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
にもチェックしています。
担当しているサービスが少人数開発なので、必要最低限の設定に留めています。
ブランチモデルやワークフローによって適した設定は変わってくると思いますので、最適な設定を模索してみてください。 ↩