ちょっと話題の記事

[GitHub] ブランチの保護設定を活用しよう 【レビューが通るまでマージさせんぞ】

2017.08.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ブランチを保護していますか?

master ブランチにマージしたらテストに失敗! みたいな経験をしたことはないでしょうか?開発の中心となるブランチは、問題なく動作する状態を健全に保ちたいですよね。

GitHub では、リポジトリの設定にて ブランチの保護 が可能です。この機能を使うと、以下のような保護を実施できます。

  • CIが通らなければマージできない
  • 他のメンバーからレビューを承認(Approve)されなければマージできない
  • 特定のメンバーはマージできない

設定方法

ブランチの保護の設定は「Settings」の「Branches」から行うことができます。何もコミットがないリポジトリは、設定そのものが出てきませんのでご注意ください。

protect-01

「Protect branches」セクションの「Choose a branch...」をクリックし、保護対象とするブランチを選択します。

protect-02

ページが切り替わります。「Protect this branch」にチェックを入れると、ブランチをどのように保護するか設定が表示されます。

protect-03

設定項目を確認する

保護設定は、何を許可して何を拒否するのか、詳細に設定することができます。ここで、各設定項目について確認していきましょう。

Require pull request reviews before merging

保護しているブランチに対してマージする前に、プルリクエストによるレビューを必須にする設定です。この設定を有効化すると、プルリクエストに対して、承認(Approve)されるまではマージできなくなります。

Dismiss stale pull request approvals when new commits are pushed

プルリクエストが承認(Approve)されたあとは、すぐにマージせずコミットを追加することができます。そのような場合に、改めてレビューを必須にする設定です。改めて承認(Approve)されるまではマージできなくなります。

Require review from Code Owners

コードオーナーのレビューを必須にする設定です。コードオーナーはつい先日(2017年7月)に追加された機能です。.github/CODEOWNERS に、以下のようなフォーマットで記載すると、ファイル単位でコードオーナーを指定できます。コミット対象のファイルのコードオーナーから承認(Approve)されるまでは、マージできなくなります。

# Lines starting with '#' are comments.
# Each line is a file pattern followed by one or more owners.

# These owners will be the default owners for everything in the repo.
*       @defunkt

# Order is important. The last matching pattern has the most precedence.
# So if a pull request only touches javascript files, only these owners
# will be requested to review.
*.js    @octocat @github/js

# You can also use email addresses if you prefer.
docs/*  docs@example.com

Require status checks to pass before merging

リポジトリと CI などのサービスを連係している場合の設定です。例えば CI サービスと連携させている場合「プルリクエストのブランチの CI が成功させること」を必須にすることができます。ユニットテストに失敗した場合などに、マージできなくなります。

Require branches to be up to date before merging

リポジトリに対して何らかのサービスを連係させている場合、この欄に各サービスの一覧が表示されます。サービス別に保護の条件に含めるか設定できます。

Include administrators

管理ユーザーに、プルリクエストを強制的にマージさせることを許可するかしないかを設定できます。この項目にチェックを入れると、管理ユーザーであろうとも、承認(Approve)されるまでは、マージできなくなります。

レビューが通るまでマージできないようにする

「Require pull request reviews before merging」を設定した状態で、プルリクエストを作成してみましょう。下記のように、そのままではマージできません。

protect-04

レビューをお願いしましょう。

protect-05

レビューが承認(Approve)されると、マージできるようになります。

protect-06

まとめ

開発の中心となるブランチを健全に保つため、ぜひ保護設定を行うようにしましょう。

しかしながら、開発初期は逆に手間になる場合もありえます。いつから適用すべきか、状況をよく考えて決める ことをオススメします。

参考

本記事は、以下の記事を参考に執筆いたしました。