kakakakakku blog

Weekly Tech Blog: Keep on Learning!

WIP プルリクエストの誤った merge を避ける GitHub Apps「WIP」と GitHub 新機能「Draft pull requests」

チーム開発をしていると,プルリクエストを WIP (Work In Progress) として送る場面は多くある.例えば,コードを書く前に設計相談をしたり,レビュー依頼をする前にパッケージ構成など全体感を相談したり,プロトタイプなどを一時的に公開することもある.進捗状況を可視化できたり,根本的な手戻りを減らせるメリットもある.

WIP を制御するツール 3選

WIP を積極的に使うとしても,WIP のまま誤ってプルリクエストを merge してしまう可能性もあり,WIP を制御するツールを使うことが多いと思う.僕自身が使っている(使ってきた)WIP 制御ツールを紹介しようと思う.今後は最後に紹介する GitHub 新機能「Draft pull requests」を積極的に使っていこうと思う.

  • Chrome 拡張「Do Not Merge WIP for GitHub」
  • GitHub Apps「WIP」
  • GitHub 新機能「Draft pull requests」

Chrome 拡張「Do Not Merge WIP for GitHub」

以前は Chrome 拡張「Do Not Merge WIP for GitHub」を使っていた.プルリクエストのタイトルに "WIP" と入っていると「Merge pull request」ボタンを押せないように制御してくれる.比較的長く使っていたけど,自分自身が誤って merge をしないように制御できるだけで,チーム開発の場合はメンバー全員に Chrome 拡張をインストールしてもらう必要があった.

chrome.google.com

GitHub Apps「WIP」

去年頃からは GitHub Apps として公開されている「WIP」を使っている.プルリクエストのタイトルに "WIP" など以下のキーワードが含まれている場合,Checks に該当して「Merge pull request」ボタンを押せないように制御してくれる.

  • wip
  • work in progress
  • 🚧

github.com

サンプルリポジトリに「WIP」を導入して,タイトルに "WIP" と含まれているプルリクエストを用意した.以下のようになる.

f:id:kakku22:20190221200953p:plain

さらに「WIP」では GitHub Marketplace で Pro 契約をすると .github/wip.yml を使って細かく設定を書くことができる.以下のように書くと,対象をタイトル以外に広げることもできるし,独自のキーワードを設定することもできる.

locations:
- title
- label_name
- commit_subject
terms:
- do not merge
- 

github.com

GitHub 新機能「Draft pull requests」

すると今月,GitHub に新機能「Draft pull requests」が追加された.プルリクエストを「ドラフト版」として送ることができる機能で,今までのように明示的に WIP と書く必要がなくなった.本当に必要だった機能と言える.

github.blog

サンプルリポジトリで試したところ,プルリクエストのステータスが「Draft」になった.「Merge pull request」ボタンを押せないように制御してくれる.さらに「ドラフト版」を通常のプルリクエストに昇格する場合は「Ready for review」ボタンを押す.ただし,一度押すと戻すことはできなさそうだった.既存のプルリクエストもあるし,もしかしたら「ドラフト版として送り忘れる」こともありそうなので,GitHub Apps「WIP」と併用しつつ,今後は公式機能を積極的に使っていこうと思う.

f:id:kakku22:20190221212121p:plain

まとめ

  • WIP を制御するツール 3選
    • Chrome 拡張「Do Not Merge WIP for GitHub」
    • GitHub Apps「WIP」
    • GitHub 新機能「Draft pull requests」
  • 今後は GitHub 新機能「Draft pull requests」を積極的に使っていこうと思う
    • 既存のプルリクエストを「ドラフト版」に戻すことができないため,GitHub Apps「WIP」と併用すると良さそう