【入門編】GitHubの「Repo Rules」でブランチ保護を極める!設定すべき必須ルールと破壊的変更の防止策 – バージョン管理・CI/CD活用バイブル

GitHub「Repository Rules」で守りを固める!開発スピードを落とさない究極のブランチ保護術

こんにちは。現場で数々の泥沼化したリリース事故を修復してきた経験から言わせてもらうと、「性善説に基づく開発」は、スケールした瞬間に必ず崩壊します。

特にチームが大きくなると、「うっかりmainに直pushしてしまった」「誰かが誤って履歴を書き換えた」といった事故は避けられません。そこで登場するのが、GitHubの「Repository Rules(リポジトリルール)」です。

これは従来の「Branch Protection Rules」をより強力に、かつ柔軟に進化させた次世代のガバナンス機能です。今日は、開発の自由度を殺さずに、壊してはいけない領域を鉄壁で守るための「必須設定」を伝授します。

—

1. なぜ「Repository Rules」なのか?

従来のBranch Protection Rulesは設定がリポジトリ単位で固定されがちで、柔軟性に欠けていました。一方、Repository Rulesは以下のようなメリットがあります。

  • 柔軟な適用範囲: `main`だけでなく、`release/` や `feature/` など、パターンマッチングで複数のブランチを一括管理できる。
  • ルールセットの再利用: 組織全体で共通のルールセットを定義し、複数のリポジトリに適用可能。
  • 「バイパス」の細分化: 特定の権限を持つユーザーやアプリ(CIツールなど)だけに限定したバイパス設定が可能。

「開発者の邪魔をせず、事故だけを未然に防ぐ」——これこそがDevOpsの極意です。

—

2. 実践!必須の保護ルールセット構築

それでは、実際に設定していきましょう。GitHubのリポジトリ画面で `Settings` > `Rules` > `Rulesets` へ進んでください。

ステップ1:ルールセットの作成

1. `New ruleset` をクリックし、名前を付けます(例: `Production-Protection`)。
2. Enforcement status は、最初は `Evaluate`(適用せず監視のみ)でテストし、問題なければ `Active` に切り替えます。
3. Targets で対象ブランチを指定します。`Include default branch` を選択するか、`main` を指定しましょう。

ステップ2:破壊的変更を防ぐ「鉄板ルール」

以下のチェックボックスは、本番環境を守るための最低条件です。

  • Restrict updates: `Allow force pushes` と `Allow deletions` を必ずオフにします。これだけで、履歴の改ざんという致命的な事故が物理的に不可能になります。
  • Require a pull request before merging:
  • `Require approvals`: 1人以上のレビューを必須にしましょう。
  • `Dismiss stale pull request approvals when new commits are pushed`: これ重要です。 コードが修正されたら古い承認を無効化することで、レビュー後の「すり替え」を防ぎます。
  • Require status checks to pass: CI(GitHub Actions等)が成功しない限りマージさせない設定です。テストなしのコードがmainに入ることはありません。

ステップ3:コミットの信頼性を担保する

  • Require signed commits: 全てのコミットにGPG/SSH署名を強制します。これにより、「誰が書いたか」というコードの出自が保証され、なりすましを防げます。

—

3. 「HelloWorld」的な動作確認:設定が効いているか試す

設定が本当に効いているか、手元のターミナルで確認してみましょう。

1. 誤った操作を試みる(mainブランチで)
git checkout main
echo “hacked” >> README.md
git commit -am “Evil commit”

2. 強制プッシュ(Force Push)を試みる
git push origin main –force

期待される結果:
GitHubから `! [remote rejected] main -> main (protected branch hook declined)` というエラーが返ってきます。これが返ってくれば、あなたの守りは完璧です。

—

4. 現場で震えるほど役立つ「運用のコツ」

ルールを厳しくしすぎると、今度は「緊急対応できない」という別の問題が発生します。そこで、以下の運用ハックを覚えておいてください。

① 「バイパス」を賢く使う

`Rulesets` の設定の中に `Bypass list` があります。ここで、`Repository Admin` や特定の `GitHub App`(自動リリース用ツールなど)のみを許可するように設定します。人間には厳しく、自動化には道を空けておく。これがモダンな開発のあり方です。

② 変更履歴を管理する

ルールセット自体も「コード」として捉えてください。重要なルール変更は、チームメンバーに周知し、なぜそのルールを追加したのかをGitHubのIssueに残す習慣をつけましょう。

—

最後に:ツールに守らせ、人は創造する

GitHubのRepository Rulesは、単なる「制限」ではありません。「ここは絶対に壊れない」と確信できる場所があるからこそ、開発者は大胆に新しいコードを書けるのです。

最初は少し面倒に感じるかもしれませんが、一度設定してしまえば、あなたは「事故対応」という無駄な作業から解放されます。浮いた時間で、もっと面白いコードを書きましょう。

これをマスターすれば、あなたのチームのデプロイメントは確実に安定し、毎日の作業が劇的に楽になりますよ。さあ、今すぐ設定画面を開いてみてください!

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