届けて守る / 第10章 リポジトリを守る仕組み

ページ 1 / 6

第10章Git・GitHub

約5分で読む

リポジトリを守る仕組み

「うっかり」で本番が壊れないのは、なぜでしょうか

確認漏れを止める仕組みと、その限界を見てみましょう。

  1. 01リスク

    確認せず合流しそう

    確認漏れが心配

    急いでいると、確認を忘れたまま変更を入れてしまいそうです。

  2. 02対策

    検査を手順に組み込む

    保護と検査を組み合わせる

    保護設定とレビュー記録の検査を用意し、決めた手順で合流します。

  3. 03効果

    未確認で止まった

    記録の不足を検出

    点検した版の記録がなく、手順が止まりました。確認漏れに気づけました。

  4. 04残る注意

    回避できる場合もある

    強制できる範囲に限り

    設定によっては画面から合流できてしまいます。担当者と手順を守ります。

この章の合言葉

保護が効く範囲を知り、決めた手順を使う

GitHubが合流を制限する方式と、5slabの手順で検査する方式があります。強制力は同じではありません。

読みはじめる

守りは何層あるのか

ファイルと履歴の保管場所(リポジトリ)では、確認していない変更の合流や、履歴の強制的な書き換えを防ぐ対策を重ねます。それぞれが担当する範囲は違います。対策があるから無条件に安全とは考えず、どの操作をどの仕組みが止めるかを確かめます。

気になる層や右側の範囲注釈をクリックすると、その内容の説明がここに表示されます。

忘れを止める層が重なる — それぞれの守備範囲を確認する

この図をテキストで読む

積層図「本番を守る5つの層」。5 つの層を全幅の帯で縦に積む(上から順・最後の層が土台)。 【層】(上から順) - 本番承認・前進ガード(手順とワークフローの制御) | 含まれるもの: /git release / 本番反映の承認 / 順序ガード - /git land の運用ゲート(合流コマンドによる自動検査) | 含まれるもの: レビュー確認 / CI完了待ち / 統合判断 - 〔焦点〕review-gate(CI検証)(レビュー証跡と規模の機械的検証) | 含まれるもの: レビューの記録検証 / 最新本流確認 / 300ファイル上限 - branch protection(main の保護)(GitHubサーバーによるルール強制) | 含まれるもの: PR必須 / 強制プッシュ禁止 / ブランチ削除禁止 - trunk-based(開発の土台)(本流1本のシンプルな運用設計)(土台) | 含まれるもの: mainブランチ単一 / 短命な作業ブランチ / 早期の統合 【範囲】 - 運用の手順が強制: 本番承認・前進ガード 〜 /git land の運用ゲート - サーバー側(GitHub)が強制: review-gate(CI検証) 〜 branch protection(main の保護) 【結論】忘れを止める層が重なる — それぞれの守備範囲を確認する

忘れを止める層が重なる — それぞれの守備範囲を確認する

strict と advisory は、何が違うのか

5slab の設定用の道具 repo-guard は、GitHub で使える保護機能を調べて設定します。GitHub 自身が合流を制限する strict と、決めた手順で検査する advisory があります。契約プランや公開範囲で使える機能が異なります。設定の不足や状態が不明な場合は、弱い方式に切り替えて続行せず止めます。

各セルをクリックすると、その意味や詳しい説明がここに表示されます。

GitHub が止められないぶんは、/git land の手順が受け持つ

この図をテキストで読む

比較表「strict と advisory の違い」。2列 × 4行。 【列】 1. strict(厳格保護)(GitHubが直接阻止) 2. advisory(助言保護)(運用手順で担保) 【比較】(観点ごとに) ■ いつ適用されるか - strict(厳格保護): 保護機能が使えるとき / 公開リポや有料プラン - advisory(助言保護): プラン制限のとき / 無料プランの非公開リポ(403) ■ 何が止めるか - strict(厳格保護): GitHubサーバー / 画面のマージボタンも無効化 - advisory(助言保護): /git land の手順 / 合流コマンドが判定 ■ review-gate の位置 - strict(厳格保護): 必須チェック(required) / 赤ならマージ不可 - advisory(助言保護): 通常のチェック / 赤でもGitHubは止めない ■ /git land の動作 - strict(厳格保護): スキップ不可で厳格合流 / チェック完了を自動待機 - advisory(助言保護): 検査待ちと統合判断 / 軽量変更のみ明示スキップ可 【観点】 - advisoryの役割: advisory(助言保護)

GitHubが止められない場合は手順で確認します。強制力の違いは残ります。

advisory では、手順が受け持つ

advisory では、自動検査が不合格でも GitHub 画面から合流できてしまいます。担当者は /git land を使い、手順の中で検査を確認します。strict と同じ強制力があるわけではありません。管理者が保護を回避できる設定もあるため、直接の変更を通常の手順として使わないことが大切です。

review-gate は何を見ているのか

review-gate は、レビューした版と、合流しようとしている版が同じかを検査します。たとえばレビュー後にコードが変わっていたら、古い結果で進めず再確認を求めます。これはレビュー漏れを減らすための検査で、コードをもう一度点検する処理ではありません。

レビューの記録や検査設定を、編集権限のある人が書き換える可能性は残ります。管理者は招待する相手と権限を確かめ、不要になったアクセスを外します。依頼者は、知らない人が追加されていたり、検査を飛ばすよう求められたりしたら、担当者に確認しましょう。

記録は、改ざんを防ぐ署名ではありません

この検査は確認忘れを減らす仕組みです。検査設定や記録そのものの改ざんまで防ぐには、編集権限の分離など別の対策が必要です。

押さえておきたい用語

branch protection
本流(main)を直接の変更から保護するGitHubの機能。提案書の必須化や強制プッシュの禁止などをサーバー側で強制する。
review-gate
提案書の末尾にあるレビュー証跡を検査するCIの仕組み。確認後に本流が進んでいないかや、変更規模の上限を判定する。
repo-guard
リポジトリの保護設定を自動化する道具。GitHubのAPI応答を判別し、環境に合わせて最適な保護ルールを適用する。
strict
GitHubのブランチ保護と必須チェックが有効な保護モード。保護対象の操作では、必須検査に通らない提案のマージをGitHub側で止める。
advisory
プラン制限などでGitHub側がマージを止められない保護モード。/git landの手順で合否を確認する。画面からの直接操作には同じ強制力がない。
レビューの記録
点検したコードの版と結果の記録。合流する版と照合し、再確認が必要かを判断する。
ページ 1 / 6