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での設定手順(ブランチ保護)

  1. リポジトリ設定画面へ
  2. 「Branches」 > 対象ブランチに保護ルールを追加
  3. Require status checks to pass before merging を有効化
  4. チェック名を選択(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パイプラインの整備は、コードレビューと同等の優先事項です。