Bitbucketを「ただの保管庫」にするな:Python APIで構築する最強の自動化パイプライン
Bitbucketを単なるGitサーバーとしてしか使っていないなら、それはフェラーリで近所のコンビニへ買い物に行っているようなものだ。
テックリードとして現場を見てきて痛感するのは、「定型作業に費やすエンジニアの時間は、エンジニアリングにおける最大の負債である」ということだ。リポジトリの作成、権限設定、監査ログの収集……これらをブラウザのGUIでポチポチやる時代は終わった。
今日は、Bitbucket APIをPythonで完全に掌握し、開発環境を「コードで定義・自動生成」するための極限のテクニックを伝授する。
—
1. Bitbucket APIの認証:セキュリティと利便性の最適解
APIを使う際、パスワードを直書きするような愚行は禁止だ。Atlassianの推奨は「App Password」だが、CI/CDや自動化スクリプトには「Workspace Access Token」を活用せよ。
実践的な認証管理 (Python `requests`)
import requests
from requests.auth import HTTPBasicAuth
環境変数から読み込むのがプロの鉄則
import os
USERNAME = os.getenv(‘BITBUCKET_USER’)
APP_PASSWORD = os.getenv(‘BITBUCKET_APP_PASS’)
WORKSPACE = “my-company-workspace”
def get_headers():
return {“Content-Type”: “application/json”}
基本のセッション構築
session = requests.Session()
session.auth = HTTPBasicAuth(USERNAME, APP_PASSWORD)
—
2. 破壊的自動化:リポジトリ自動生成スクリプト
新規プロジェクトの立ち上げ時に、必ず必要な「リポジトリ作成」「README初期化」「ブランチ保護設定」をワンコマンドで完了させる。
def create_repo(project_key, repo_slug):
url = f”https://api.bitbucket.org/2.0/repositories/{WORKSPACE}/{repo_slug}”
payload = {
“scm”: “git”,
“is_private”: True,
“project”: {“key”: project_key}
}
response = session.post(url, json=payload)
if response.status_code == 201:
print(f”🚀 Repository {repo_slug} created successfully.”)
return response.json()
現場の知見: リポジトリ作成直後に、`branch-restrictions` APIを叩いて`master/main`ブランチへの直接プッシュを禁ずる設定を自動適用しろ。手動設定漏れによる事故をゼロにするのがテックリードの仕事だ。
—
3. 生産性を劇的に高める「現場のハック」
神ショートカット・キー
ブラウザ操作を極限まで減らせ。
- `g` + `i`: Issuesへ遷移
- `g` + `p`: Pull Requestsへ遷移
- `z` + `a`: Activity(直近の変更)を確認
- `?`: 全ショートカットの一覧表示(これを暗記するまで閉じないこと)
絶対入れるべきプラグイン・拡張
- Bitbucket Refined: UIを圧倒的に使いやすくするChrome拡張。PRの差分ビューが劇的に見やすくなる。
- SourceTreeの「カスタムアクション」: PythonスクリプトをSourceTreeの右クリックメニューに登録せよ。Jiraチケット番号を自動でブランチ名に付与するスクリプトを組み込めば、命名規則の揺らぎは消滅する。
—
4. チーム開発における設定の共有化(bitbucket-pipelines.yml)
CI/CD設定はリポジトリごとにバラバラにしてはいけない。`bitbucket-pipelines.yml`をテンプレート化し、「再利用可能なパイプライン」を目指せ。
推奨構成:パイプラインをステップ単位で疎結合にする
definitions:
steps:
- step: &lint-and-test
name: Lint and Test
image: python:3.9
script:
- pip install flake8 pytest
- flake8 .
- pytest tests/
pipelines:
default:
- step: lint-and-test
branches:
main:
- step: lint-and-test
- step:
name: Deploy to Production
deployment: Production
script:
- ./deploy.sh
—
5. 伝説のエンジニアへの道:コミットログの自動抽出
監査やリリースノート作成のため、コミットログを抽出するスクリプトは持っておくべきだ。
def get_recent_commits(repo_slug):
url = f”https://api.bitbucket.org/2.0/repositories/{WORKSPACE}/{repo_slug}/commits”
response = session.get(url)
commits = response.json().get(‘values’, [])
for c in commits:
print(f”[{c[‘hash’][:7]}] {c[‘message’]} – {c[‘author’][‘raw’]}”)
—
テックリードからの提言
ツールは「使いこなす」ものではなく、「自分の生産性を最大化するためにハックするもの」だ。
Bitbucket APIを使い始めると、今まで「面倒だ」と感じていた作業が「自動化のチャンス」に変わる。まずはリポジトリのライフサイクル管理からコード化せよ。
自動化の先には、もっと高度なエンジニアリング——チームのコード品質を担保し、デリバリー速度を倍増させるという、真に創造的な領域が待っている。さあ、今すぐコンソールを開け。コードを書く時間だ。