【入門編】BitbucketでのGit Hooksの代替:サーバーサイドフックを使わずにコミットルールを強制する戦略 – バージョン管理・CI/CD活用バイブル

Bitbucketの「サーバーサイドフック」がない?なら、CI/CDでねじ伏せろ!現場で使える強制力の作り方

こんにちは。日々、コードとパイプラインの海を渡り歩いているエンジニアです。

Bitbucket Cloudを使っていると、オンプレミス版のBitbucket Server(Data Center)では使えた「サーバーサイドフック(Pre-receive hook)」が使えないことに頭を抱える瞬間がありますよね。「コミットメッセージにチケット番号を強制したい」「マージ前にlintを通したい」……こうした品質統制は、チームが大きくなればなるほど重要になります。

「サーバーサイドフックが使えないから諦める」なんて、プロの仕事ではありません。Bitbucket Pipelinesを「検問所」に変えてしまえばいいのです。

今日は、Bitbucket Cloudで「コミットルールを確実に守らせる」ための、最も賢く、かつ現場で即戦力となる戦略を伝授します。

—

1. なぜ「ローカル」だけではダメなのか?

よく「Husky(Git Hooks)」を使ってローカルでチェックする方法が紹介されますが、あれは「善意のプログラマー」に依存したセキュリティです。力技でスキップされたり、設定を消されたら終わりです。

私たちが目指すのは、「ルールを守らないコードは、決してmaster(main)に辿り着けない」という物理的な封鎖網です。これを実現するのが、PipelinesによるCI強制です。

—

2. 実践:Pipelinesを「検問所」にする設定

今回は、「コミットメッセージにチケット番号(例: `PROJ-123`)が含まれているか」をチェックするパイプラインを作ります。

`bitbucket-pipelines.yml` をリポジトリのルートに作成してください。

image: atlassian/default-image:latest

pipelines:
# プルリクエスト(PR)が作成・更新された時に発火
pull-requests:
”:

  • step:

name: “Commit Message Convention Check”
script:
# 最新のコミットメッセージを取得

  • LAST_COMMIT_MESSAGE=$(git log -1 –pretty=%B)

# 正規表現でチケット番号が含まれているか確認

  • if [[ ! “$LAST_COMMIT_MESSAGE” =~ ^[A-Z]+-[0-9]+ ]]; then

echo “❌ エラー: コミットメッセージにはチケット番号(例: PROJ-123)が必要です。”
exit 1; # ここで終了コードを返すことでパイプラインを失敗させます
fi

  • echo “✅ コミットメッセージの形式チェックOK!”

この設定のポイント

  • `pull-requests` ブロック: ブランチへのプッシュ時ではなく、PR作成時をトリガーにすることで、マージの直前に「最終確認」を行えます。
  • `exit 1` の魔法: パイプライン内で `exit 1` を叩くと、そのステップは「失敗」と見なされます。Bitbucketの設定で「成功しないとマージ不可」というブランチ制限をかけておけば、強制力は完成です。

—

3. HelloWorldを超えた「実戦的セットアップ」

コミットメッセージだけでなく、コードスタイル(lint)やテストも同じ考え方で強制できます。以下は、パイプラインに「静的解析」を追加する構成案です。

pipelines:
pull-requests:
”:

  • step:

name: “Lint & Test”
image: node:18
script:

  • npm install
  • npm run lint # コードスタイルが汚いならここで落とす
  • npm test # テストが落ちたら当然マージ不可

—

4. 仕上げ:Bitbucket側の「最後の鍵」

パイプラインで失敗させても、Gitのコマンドラインから無理やりマージしようとする猛者が現れるかもしれません。それを防ぐのが、Bitbucketの「ブランチ制限(Branch permissions)」です。

1. Bitbucketのリポジトリ設定へ行く。
2. 「ブランチ制限(Branch permissions)」を選択。
3. `main` ブランチに対してルールを追加。
4. 「最低限の成功したビルド(Minimum successful builds)」 にチェックを入れ、今回作成したパイプラインを指定する。

これで、「パイプラインが緑色にならない限り、ボタンが押せなくなる」という鉄壁のガードが完成します。

—

最後に:なぜこれが「楽」なのか?

「ルールを強制するなんて窮屈だ」と思うかもしれません。しかし、逆です。

コードレビューの際、レビュアーは「チケット番号の書き忘れ」や「インデントのズレ」といった人間がやるべきでないチェックから解放されます。 チームメンバーは「とりあえず動くコードを送れば、あとはパイプラインが教えてくれる」という安心感の中で開発に集中できるのです。

自動化の目的は「縛ること」ではなく「ミスに気づくまでの時間をゼロにすること」です。

これをマスターすれば、あなたのチームのコード品質は劇的に向上し、レビューの質も一段階高いレベルへ引き上げられるはずです。ぜひ、今日からあなたのリポジトリにこの「検問所」を設置してみてください。

それでは、良い開発ライフを!何か詰まったら、いつでも聞いてくださいね。

タイトルとURLをコピーしました