【あなたのことを】 GitHubの設定でmainブランチの誤更新を防止しよう 【守りたい】

俺「あなたのこと、絶対守ります。」 mainブランチ「ありがとう///」
2021.12.14

「よし、修正完了!」
「作業ブランチにpushしてプルリク作成するかー」
「git push っと」
「あ、やべ、今mainブランチだわ。。pushちゃった。。」

こんなことってありませんか?

自分が進めているプロジェクトでは、基本的にプルリクエストが承認されなければmainブランチにマージできない運用となっています。

しかし、GitHubの設定によっては上記のようなミスが起こりうるので、あらためて設定を整理してみました。

プルリクエスト作成時に特定の人物をレビュアーに指定する

GitHubのcode ownersという機能を使い、プルリクエスト時にチームメンバーなどをレビュアーに指定できます。

リポジトリに.github/CODEOWNERSというファイルを作成し、レビュアーに指定したいアカウント名を指定します。

.github/CODEOWNERS

# @hoge, @fuga, @foo をレビュアーに指定
* @hoge @fuga @foo

その後、GitHubの「Settings -> Branches」を開き、「Branch protection rules」から下記のように設定します。
CodeOwnersの設定

それぞれ下記のような意味になります。

  • Require a pull request before merging
    マージにプルリクエストを必須とします。

  • Require approvals
    指定した人数以上の承認が必須となります。

  • Require review from Code Owners
    .github/CODEOWNERSで指定したアカウントをレビュアーとして設定します。

プルリクエスト承認後に追加コミットがあった場合は再度レビューする

一旦プルリクエストを承認しても、その後修正が必要になり追加でコミットする場合があります。
その際に、下記を有効にすると再度レビューを強制することが可能となるため、こちらも設定することをおすすめします。

github_pr_setting

  • Dismiss stale pull request approvals when new commits are pushed
    新しくレビュー可能なコミットがあった場合、現在の承認を取り消します。

Admin権限にも保護ルールを適用する

実は今までの設定を行っても、Admin権限がある場合はレビューの承認無しでコミットやプッシュを行うことができます。
Admin権限のユーザーであってもレビューを必須とするように、下記を設定することをおすすめします。

github_include_administrators

  • Include administrators
    Admin権限のユーザーにも保護ルールを適用する。

強制pushとブランチ削除を無効にする

強制pushとブランチ削除の許可は別項目なので、こちらはチェックを外しておきます(デフォルトで外れています)。

github_force_push_setting

おわりに

これらの設定はデフォルトでは有効になっていないので、チーム開発をする際はなるべく設定することをおすすめします!
人間ミスは犯してしまうので、できるだけ設定で防ぎたいですね!