39
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHubでブランチ保護を有効にする

Last updated at Posted at 2019-07-02

GitHubを利用してチーム開発をしているあなた!
こんな経験はありませんか?
「せっかくCIを設定しているのにテストに失敗したプルリクをマージしてしまった!」
「レビューが終わっていないのにマージされてしまった!」

とはいえ、そんなことする人はいないと思いますが、うっかりミスは誰でも、どんなときでも起こりえます。
事故防止のためにも、ブランチ保護はしっかりと設定していきたいものです。

ということで、ブランチ保護の設定方法、項目について、簡単にですが説明していきたいと思います。

ブランチを保護する

無料アカウントでは、privateリポジトリの保護は設定できません。
Pro(OrganizationならTeam以上)にアップグレードするか、publicリポジトリに設定してください。

対象のリモートリポジトリにアクセスし、Settingsを選択
2019-07-02_11h02_31.png

Branchesを選択し、Add ruleでブランチ保護ルールを追加します。
2019-07-02_11h03_15.png

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

その他の設定項目について、簡単ですが説明していきたいと思います。

保護設定項目

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承認後に新たなcommitpushされた場合、再度承認されるまでマージをできないように設定します。

Require review from Code Owners

コードオーナーのレビューを必須にします。
コードオーナーは、プロジェクトルートに.github/CODEOWNERSというファイルを追加することで設定できます。
※プロジェクトルート直下にCODEOWNERSを作成しても適用されますが、.github/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] ブランチの保護設定を活用しよう 【レビューが通るまでマージさせんぞ】

  1. マーフィーの法則
    ミスは必ず起こるものです。
    不安なく開発をするためにも、リポジトリを作成した際には、忘れずに設定したいですね。
    私の場合、masterRestrict who can push to matching branchesだけを設定し、担当者かCIサービスがpushできるように設定
    developは最低1人の承認、テストのパスを必須条件にし、Include administratorsにもチェックしています。
    担当しているサービスが少人数開発なので、必要最低限の設定に留めています。
    ブランチモデルやワークフローによって適した設定は変わってくると思いますので、最適な設定を模索してみてください。

39
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?