Bitbucket × Slackで実現する「承認待ちゼロ」の世界:DevOpsエンジニアが教える自動化の極意
こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアとして、今日は君に「プルリクエスト(PR)の放置」という開発現場の癌を外科手術で取り除く方法を伝授しよう。
多くのチームが「PRを出したけど誰も見てくれない」というボトルネックに悩んでいる。これを人力で「見てください」と催促するのは非効率の極みだ。今回はBitbucket APIとSlack Botを組み合わせ、「承認者がいない」「期限が迫っている」PRを自動で検知し、Slackに叩き起こす集中管理システムの作り方を解説する。
—
1. なぜ「自動化」が必要なのか?
開発の本質は「コードを書くこと」ではなく「コードを届けること」にある。PRが放置される時間は、その機能が価値を生むまでの「死に体」の時間だ。
今回構築するシステムは、単なる通知ボットではない。「放置を許さない」というチームの規律をコードとして埋め込む仕組みだ。これをマスターすれば、君のチームのデリバリー速度は劇的に向上するはずだよ。
—
2. 構築の全体像:魔法のレシピ
1. Bitbucket Webhooks: PRの作成や更新という「イベント」を検知。
2. Middle-ware (Python): 受け取ったイベントを解析し、APIで詳細を確認。
3. Slack API: 適切な担当者へメンションを飛ばす。
必要なもの
- Bitbucket Workspaceの管理者権限
- SlackのIncoming Webhook URL
- Python環境(今回は軽量で堅牢な `FastAPI` を採用する)
—
3. 実装:PR監視ボットの核心
まずは、環境変数を設定して、BitbucketからのWebhookを受け取る最小構成(HelloWorld)を作成しよう。
main.py
from fastapi import FastAPI, Request
import requests
app = FastAPI()
Slackの通知用エンドポイント(環境変数で管理すること!)
SLACK_WEBHOOK_URL = “https://hooks.slack.com/services/…”
@app.post(“/webhook”)
async def handle_bitbucket_webhook(request: Request):
payload = await request.json()
# 1. イベントの種類を確認(PR作成、更新など)
event_key = request.headers.get(“X-Event-Key”)
if event_key == “pullrequest:created”:
pr_title = payload[“pullrequest”][“title”]
pr_link = payload[“pullrequest”][“links”][“html”][“href”]
# 2. Slackへ通知を飛ばす
message = f”🚀 新しいPRが来たよ!確認よろしく!\n<{pr_link}|{pr_title}>”
requests.post(SLACK_WEBHOOK_URL, json={“text”: message})
return {“status”: “ok”}
このコードのポイント
- イベント駆動: Webhookを使えば、サーバーは常に待機状態で、何かが起きた時だけ動く。これが最もCPU効率の良いアーキテクチャだ。
- 拡張性: `if` 文を増やせば、「承認者が設定されていない場合」や「ビルドが失敗した場合」など、ロジックを無限に拡張できる。
—
4. APIレートリミットを考慮した「プロの運用設計」
ここで君に一つ、耳寄りな話をしよう。BitbucketのAPIにはレートリミット(呼び出し制限)がある。安易にすべてのリクエストに対してAPIを叩くと、すぐに制限に達してボットが沈黙する。
現場で役立つ3つの生存戦略
1. キャッシュを活用せよ:
直近1分間に同じPRで通知を送っていないか、Redisなどの軽量なKVS(Key-Value Store)で状態を保持する。不要なAPIコールは徹底的に削る。
2. キューイングの導入:
Webhookを受け取った瞬間に処理するのではなく、`Celery` や `RQ` といったタスクキューに入れよう。これにより、スパイクアクセスがあってもシステムが崩壊しない。
3. ロングポーリングを避けろ:
あくまで「Webhook」を起点にし、APIは「情報取得」のためにピンポイントで叩く。これが鉄則だ。
—
5. 次のステップ:君がエンジニアとして成長するために
ここまでの実装ができれば、君はもう「自動化の入り口」に立っている。次に挑戦すべきは、「承認期限切れアラート」だ。
- 毎日決まった時間にバッチ処理を走らせる(`Cron`や`GitHub Actions`のSchedule機能を使うのが手軽だ)。
- Bitbucket APIから「Open状態のPR」を取得し、更新日時から3日以上経過していればSlackに「お化けPRがいます!」と警告を出す。
—
先輩エンジニアからの最後のアドバイス
自動化は「完璧」を目指す必要はない。まずは今日紹介したコードを動かし、チームメイトから「この通知、助かるわ」と一言もらえるだけで成功だ。
ツールは君の武器だ。使いこなすほどに、君の手は自由になり、より創造的な課題に挑戦できるようになる。
さあ、BitbucketのWebhook設定画面を開いて、冒険を始めよう。何か詰まったら、いつでも聞いてくれ。君の挑戦を応援しているよ。