Bitbucketを「ただの保管庫」にするな:通知の自動化でレビュー待ち時間をゼロにする極限の実践術
Bitbucketを使っている多くのチームが陥る罠がある。それは「プルリクエスト(PR)の放置」だ。承認者が気づかず、コードがマージされず、結果としてCI/CDパイプラインが停止し、開発スピードが鈍化する。
「通知が来ないから気づかなかった」。これは言い訳にもならない。DevOpsにおいて、コミュニケーションの不在は最大のボトルネックだ。
今回は、Bitbucket APIとSlackを結合し、PRの承認状況をリアルタイムで監視・通知する「集中管理システム」の構築法を伝授する。ただのWebhook通知ではない、チームを加速させるための「攻め」の自動化だ。
—
1. なぜ「Webhook + Bot」なのか?
Bitbucketのデフォルト通知は、ノイズが多すぎて重要な情報が埋もれる。我々が必要なのは、「今すぐ誰がアクションすべきか」をコンテキスト付きで突きつける仕組みだ。
構築のアーキテクチャ
1. Webhook: PRの作成・更新イベントをキャッチ。
2. Middleware (Python/Node.js): APIを叩き、承認状況、経過時間、CIステータスを判定。
3. Slack API: メンション付きで「緊急度」と共に通知。
—
2. 【核心】実装:承認待ちを可視化するPythonスクリプト
APIのレートリミット(1時間あたり数千リクエスト制限)を回避するため、Webhookからトリガーを受け取る「イベント駆動型」を採用する。
import requests
from flask import Flask, request, jsonify
app = Flask(__name__)
Bitbucket API 設定
BITBUCKET_API = “https://api.bitbucket.org/2.0”
AUTH = (“user”, “app-password”) # 権限は最小限に絞ったApp Passwordを使用
def notify_slack(message):
# Slack Webhook URLへ送信
requests.post(“https://hooks.slack.com/services/…”, json={“text”: message})
@app.route(‘/webhook’, methods=[‘POST’])
def handle_webhook():
data = request.json
pr_id = data[‘pullrequest’][‘id’]
repo_slug = data[‘repository’][‘full_name’]
# 承認者数をチェック
participants = data[‘pullrequest’][‘participants’]
approvers = [p for p in participants if p.get(‘approved’)]
if len(approvers) == 0:
notify_slack(f”⚠️ PR #{pr_id} が放置されています。レビューをお願いします: {data[‘pullrequest’][‘links’][‘html’][‘href’]}”)
return jsonify({“status”: “ok”}), 200
if __name__ == “__main__”:
app.run(port=5000)
運用上の注意点(レートリミット対策)
- キャッシュ層の導入: `Redis`等で「直近10分以内に通知したか」をキャッシュし、不要なAPI呼び出しを抑制せよ。
- イベントフィルタリング: 全てのコメント投稿で叩くのではなく、`pr:opened`, `pr:updated`, `pr:reviewer_updated` にイベントを絞るのが鉄則だ。
—
3. 生産性を爆速化する「Bitbucket使い」の作法
ツールを使いこなすには、GUIをクリックしている暇などない。以下のテクニックを即座に導入せよ。
① 隠れたキーボードショートカット(これだけで1日15分は浮く)
- `?`: キーボードショートカット一覧を表示(まずはこれを確認せよ)
- `g` + `p`: プルリクエスト一覧へ即座に移動
- `j` / `k`: リストの上下移動
- `o`: 選択したPRを開く
- `a`: 承認(Approve)
② チーム開発を神速にする「設定ファイル」の共有
`bitbucket-pipelines.yml` はテンプレート化してリポジトリルートに配置せよ。ベストプラクティスは 「パイプラインのモジュール化」 だ。
bitbucket-pipelines.yml
definitions:
steps:
- step: &lint-and-test
name: Lint and Test
image: python:3.9
script:
- pip install -r requirements.txt
- pytest
pipelines:
pull-requests:
”: # 全てのブランチのPRに対して実行
- step: lint-and-test
③ 絶対に入れるべきプラグイン
- Bitbucket Integration for Jira: チケットとPRの紐付けはDevOpsの基本中の基本。
- Slack Integration: 基本だが、通知先チャンネルを「デプロイ用」と「レビュー依頼用」に分けるのがプロの技。
—
4. テックリードからの提言:運用の鉄則
1. レビュー待ちの可視化は「責めるため」ではない:
「なぜ承認しないんだ」と詰めるのではなく、「誰がボトルネックになっているか」をダッシュボード化し、チーム全体でレビュー負荷を平準化するために使え。
2. App Passwordの管理:
個人のアカウントを直書きするな。必ず専用のサービスアカウントを作成し、そのアカウントにリポジトリへの読み取り権限のみを付与せよ。
3. 通知のUXを磨け:
Slack通知にはPRのタイトル、作成者、経過時間、そして「CIの状態」を必ず含めろ。CIが落ちているのにレビューを依頼するのは時間の無駄だ。
最後に
DevOpsとは、ツールを導入することではない。「摩擦を取り除き、価値創造の時間を最大化する」という哲学である。BitbucketとAPIを組み合わせることで、チームのコードレビュー文化は劇的に変わる。
今すぐこのスクリプトをデプロイし、Slackを鳴らせ。静かなチームは、死んでいるチームだ。