GitHubを利用してチーム開発をしているあなた!
こんな経験はありませんか?
「せっかくCIを設定しているのにテストに失敗したプルリクをマージしてしまった!」
「レビューが終わっていないのにマージされてしまった!」
とはいえ、そんなことする人はいないと思いますが、うっかりミスは誰でも、どんなときでも起こりえます。
事故防止のためにも、ブランチ保護はしっかりと設定していきたいものです。
ということで、ブランチ保護の設定方法、項目について、簡単にですが説明していきたいと思います。
ブランチを保護する
無料アカウントでは、privateリポジトリの保護は設定できません。
Pro(OrganizationならTeam以上)にアップグレードするか、publicリポジトリに設定してください。
対象のリモートリポジトリにアクセスし、Settingsを選択

Branchesを選択し、Add ruleでブランチ保護ルールを追加します。

保護対象ブランチの名前等を入力してCreateで削除などの操作を制限できます。

その他の設定項目について、簡単ですが説明していきたいと思います。
保護設定項目
Branch name pattern
ブランチ名やglobでパターンを指定します。
※ *[master|develop]*, release-*, etc...
指定されたブランチは、削除できなくなります。
Require pull request reviews before merging
pull requestによるレビューを必須にします。
Required approving reviews
マージするために必要な承認数を設定します。
1を設定したら、最低1人の承認を得なければマージできません。
Dismiss stale pull request approvals when new commits are pushed
pull request承認後に新たなcommitがpushされた場合、再度承認されるまでマージをできないように設定します。
Require review from Code Owners
コードオーナーのレビューを必須にします。
コードオーナーは、プロジェクトルートに.github/CODEOWNERSというファイルを追加することで設定できます。
※プロジェクトルート直下にCODEOWNERSを作成しても適用されますが、.github/CODEOWNERSとしたほうがわかりやすいと思います。
# 全ファイルの所有者
* @username1
# 特定の拡張子のファイル所有者
*.html @username2
*.js @username2
*.scss @username2
# 特定のディレクトリ直下ファイルの所有者
# Eメールアドレスも指定可
tests/* example@github.com
Restrict who can dismiss pull request reviews
レビューを却下できるユーザー/チームを設定できます。
一旦承認されていても、ここに設定されたユーザーは、そのレビューを却下することができます。
Require status checks to pass before merging
ステータスチェックを有効にします。
GitHub API v3のStatusesを利用することで、ステータスチェックをカスタマイズすることが可能です。
Require branches to be up to date before merging
ベースブランチに対して、最新であることを必須にする設定です。
その他の設定(レビュー必須など)をしている場合、ベースから取り込んだcommitもPRの作成とレビューが必須になります。
Status checks found in the last week for this repository
連携しているサービス一覧(Circle CI、 Travis CIなど)が表示されます。
push時に確実に通しておきたいテストや処理がある場合は、対象のサービスにチェックを入れます。
Require signed commits
署名済みコミットを必須にします。
署名済みコミットについては、以下をご覧ください。
Git のさまざまなツール - 作業内容への署名
Include administrators
Owner/Admin権限所有者もブランチ保護制限の対象にする設定です。
Restrict who can push to matching branches
pushできる人/チームをホワイトリスト型で指定します。
Organizationのみの項目です。
あとがき
「失敗する余地のあるものは失敗する」1
参考
Configuring protected branches
About protected branches
About code owners
About required commit signing
Git のさまざまなツール - 作業内容への署名
[GitHub] ブランチの保護設定を活用しよう 【レビューが通るまでマージさせんぞ】
-
マーフィーの法則
ミスは必ず起こるものです。
不安なく開発をするためにも、リポジトリを作成した際には、忘れずに設定したいですね。
私の場合、masterはRestrict who can push to matching branchesだけを設定し、担当者かCIサービスがpushできるように設定
developは最低1人の承認、テストのパスを必須条件にし、Include administratorsにもチェックしています。
担当しているサービスが少人数開発なので、必要最低限の設定に留めています。
ブランチモデルやワークフローによって適した設定は変わってくると思いますので、最適な設定を模索してみてください。 ↩