main ブランチ保護ルール設定ガイド

本資料は、GitHubリポジトリの中核となる main ブランチを安全かつ一貫した品質で運用するための「ブランチ保護ルール(Branch Protection Rule)」を解説するガイドです。小規模チームから大規模組織に至るまで、誤ったコミットやレビュー抜けによるトラブルを未然に防ぎ、信頼性の高い開発フローを構築することを目的としています。

以下の内容を順を追って理解し、リポジトリの公開・非公開や利用プラン(Free/Pro/Team 等)に応じて最適な設定を適用してください。

  • 基本設定:プルリクエスト必須化や承認ルールなど、全チームで必ず押さえたい項目
  • 高度オプション:会話の解決や署名コミット、リニアヒストリーなど、セキュリティや品質担保を一段高めるための設定
  • 無料版との比較:GitHub Free で使える機能と、Pro/Team プランで追加できる機能の違い

本ガイドを通じて、main ブランチへの変更管理を強化し、レビュー文化と自動化された品質チェックの両輪で、開発スピードとコードの信頼性を両立させましょう。


GitHubのリポジトリ設定画面

後述していますが、無料版の場合、Privete(非公開)では、選択できない機能があります

1. 概要

main ブランチへの直接コミットを禁止し、プルリクエスト(PR)を介したコードレビューと承認を必須化することで、品質担保とガバナンスを強化します。


2. 適用対象

  • ブランチ名パターン:main
  • 適用ブランチ:main

3. 主な設定項目

項目名設定値解説
Require a pull request before merging✅ 有効直接 push を禁止し、必ず PR → マージ のワークフローを強制。誤ったコミットの混入を防止。
Require approvals✅ 有効PR をマージするには、最低 1 人 の承認(Approve)が必要。コード品質の担保と知見の共有を促進。
Dismiss stale pull request approvals when new commits are pushed☐ 無効PR 承認後に新コミットが追加された場合、既存の承認を取り消す。変更点を必ず再レビューしたいときに有効。
Require review from Code Owners✅ 有効CODEOWNERS に指定されたオーナーからの承認を必須化。各ファイルの責任者が必ず目を通す。
Require approval of the most recent reviewable push☐ 無効最新コミットが自分自身のものであっても、他者による再承認を必須化。「自分のコミットは自分で承認できない」制約をかけたい場合に有効。
Require status checks to pass before merging☐ 無効CI/テスト結果(GitHub Actions・外部CIなど)のすべてのチェックが成功しないとマージ不可に。テスト未通過のコード流入を防止。

4. その他の設定オプション

項目名設定値解説
Require conversation resolution before merging☐ 無効PR 内の全レビューコメントを「Resolve」しないとマージ不可。未解決の議論を残さず完結させたい場合に利用。
Require signed commits☐ 無効GPG/S-MIME 署名付きコミットのみを許可。コミットの真正性・改ざん防止を強化したいプロジェクト向け。
Require linear history☐ 無効–no-ff マージのみを許可し、マージコミットやリベースを禁止。コミット履歴を直線化し可読性を向上。
Require deployments to succeed before merging☐ 無効指定したデプロイ環境(例:staging)へのデプロイが成功した PR のみマージ許可。本番リリース前の検証を自動化。
Lock branch☐ 無効ブランチを完全読み取り専用にし、PR も含め一切の更新を禁止。緊急凍結やアーカイブ用途に利用。
Do not allow bypassing the above settings☐ 無効管理者や「bypass branch protections」権限を持つユーザーにも、本ルールを強制適用。例外なしで保護を徹底。
Allow force pushes☐ 無効全ユーザーに –force プッシュを許可。歴史書き換えを抑制したい場合はオフ推奨。
Allow deletions☐ 無効全ユーザーにブランチ削除を許可。誤削除防止のため、不要であればオフに。

5. 期待されるワークフロー

  1. 開発者 は feature/… や fix/… ブランチで作業
  2. コードをコミットし、プルリクエスト を作成
  3. 担当レビュアー(+CODEOWNERS)が Approve
  4. 必要に応じてステータスチェックや会話解決を行い
  5. 承認後、PR をマージして main に反映

6. 効果とメリット

  • 品質向上:未レビュー・未テストの変更を防ぎ、バグ流入を抑制
  • 責任明確化:CODEOWNERS やコミット署名で責任者を特定しやすく
  • 履歴の可読性向上:リニアヒストリーや会話解決で、どの変更がなぜ行われたか追いやすく

7. 次のステップ(おすすめカスタマイズ)

  • ステータスチェック追加:Lint/ビルド/テストなど、必要なチェックを追加
  • コミット署名必須化:重要プロジェクトで真正性を担保
  • 会話解決必須化:全レビューコメントを解決してからマージ
  • デプロイ成功条件設定:staging 環境で動作検証済みの PR だけを main にマージ

8. 無料版(GitHub Free)との機能比較

機能/プランGitHub Free(Publicのみ)GitHub Pro/Team以上(Private含む)
Require pull request before merging
Require approvals
Dismiss stale approvals
Require review from Code Owners
Require recent-push approval
Require status checks✅(Publicのみ)
Require conversation resolution
Require signed commits
Require linear history
Require deployments before merging
Lock branch
Do not allow bypassing settings
Allow force pushes✅(設定可能)
Allow deletions✅(設定可能)

補足

  • GitHub Free では パブリックリポジトリ のみ基本的なブランチ保護が利用可能。
  • プライベートリポジトリ に対しては、Pro/Team 以上へアップグレードが必要です。

以上、無料版との比較を含めた完全ガイドです。チーム構成やリポジトリの公開/非公開状況に応じてプランをご検討ください。