status-check|CIを通じてレビューとマージを制御する仕組み
status-check|CIを通じてレビューとマージを制御する仕組み
概要
status-check
は、GitHub等のソースコード管理ツールにおいて、CI(継続的インテグレーション)やテストの実行結果を元に、PRのマージを許可またはブロックする仕組みです。
コードレビューと自動化された品質保証を連携させるために不可欠な要素です。
status-checkが成功しなければ、Approveされていてもマージできない──これがCI連携の基本構造です。
具体的なチェック内容の例
チェック名 | 内容例 |
---|---|
build |
ビルド成功/失敗の判定 |
test |
ユニットテストの通過確認 |
lint |
コーディングスタイルの検証 |
e2e-tests |
E2E自動テストの成否 |
codeql |
セキュリティスキャンの結果 |
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm ci
- run: npm run test
GitHubでの設定手順(ブランチ保護)
- リポジトリ設定画面へ
- 「Branches」 > 対象ブランチに保護ルールを追加
Require status checks to pass before merging
を有効化- チェック名を選択(CI実行済みである必要あり)
チェック名は CIが一度実行された後でないと一覧に表示されません。まずはPRを作成・pushしてCIを走らせましょう。
よくある失敗と対応策
状況 | 対応策 |
---|---|
CIが落ちていてマージできない | エラー詳細を確認し、再実行 or 修正後に再push |
ステータスチェックが表示されない | PRを更新して再実行/CI側の設定漏れを確認 |
謎のチェック名が出現する | 古いワークフローや外部Botが生成したチェック名の可能性あり |
# PRに変更を加えてCIを再トリガー
git commit --allow-empty -m "trigger CI"
git push
会話例:status-checkを巡るやりとり
Reviewer: approveしましたが、testがfailしているようです。修正後にマージでお願いします。
Author: 了解です。原因特定して再pushします。
Author: CI通らないのですが、ローカルでは問題ないです。
Reviewer: nodeのバージョンかもしれません。CI環境に合わせて確認してみてください。
チーム運用のベストプラクティス
lint
,test
,build
など、基本的なチェックはすべてRequired
に設定- ステージング環境へのデプロイまで自動で繋げることで、レビュー以外の運用コストを限りなく削減
- CIが頻繁に落ちる環境は 「レビューが進まない環境」=「技術的負債」 と見なす
「CIが止まっていてレビューできない」は組織のボトルネックになります。status-checkは継続的に整備する対象です。
関連用語
pull-request
:status-checkはPRに紐づいて実行されるpush
:CIを再トリガーする操作request-changes
:status-checkがfailしているときのレビュー状態との関係
実務視点まとめ
status-checkはレビュー文化とCI文化をつなぐ「自動のレビュアー」です。
人間が見逃す問題を未然に防ぎ、マージ判断の明確な基準を提供するために、精度と信頼性の高いCIパイプラインの整備は、コードレビューと同等の優先事項です。