Draftプルリクエスト作成をターミナルだけで行う(GitHub CLI 1.0)
はじめに
Zenn良さげなのでテンション上がって初投稿です。
内容について、間違いや、そもそもその開発手順おかしくね?
など気付いたらどしどしコメントしていただければ幸いです
背景
普段の業務で、以下の手順に沿ってチケット駆動開発をしています。
- Jiraでタスクをアサインされる。
- タスクと連動したfeatureブランチを作成する。(Jira連動については参考リンク参照)
- featureブランチに
--allow-empty
で空コミットする。(UIではコミットないとPR作れないため) - featureブランチからdefaultブランチへドラフトPRを作成する
- 実際に作業、コミット
- レビュー可能になったら、ドラフトを外す(ready for review)。レビュアーをアサインする。
- レビューもらったら修正。修正したらレビューリクエスト。これをapproveされるまで繰り返す
- approveされたらマージ。featureブランチも消す。
この手順、ブラウザとターミナルを行き来きして大変です。
タスクの粒度が細かくなるほどこの作業の回数が増えるので、めんどくさいです。
特に手順2、3、4は虚無です。
GitHub CLIで置き換え
先日、GitHub CLI 1.0がリリースされました。
Goodbye, context switching. Hello, terminal. ということで
cliのマニュアルを見ながら、
上記の手順を、cliで一つずつ実現していきます。
準備
インストール
# homebrew
brew install gh
# scoop
scoop bucket add github-gh https://github.com/cli/scoop-gh.git
scoop install gh
次に、アカウント認証して読み取りと書き込みの権限を付与
gh auth login
ブランチの作成。
まず作業用のブランチをローカルに作成します
Jiraなどと連動している場合は、タスク名を含めます
# ローカルブランチを作成
git branch feature/example
空コミット
GUIと同様に、コミットが1つもない状態では、PRは作れません。以下のようなエラーになります
pull request create failed: GraphQL error: No commits between master and feature/example
作業に着手した段階でドラフトPRが作成される というフローにしたいので、`--allow-empty'で親コミットと差分がないコミットを作成します。
git commit --allow-empty -m ":tada: first commit"
ドラフトPRの作成
gh pr create
はリモートに対象のブランチがなくても、リモートに作成してからPRを作ってくれます。
--draft
を指定することで、ドラフトPRの作成になります。
オプションは、-d
のように短縮することもできます。
gh pr create --draft
とすれば、対話的にPRを作成できます
今回は、オプションでPRのタイトルと本文を指定してみます。
gh pr create --draft --title "Pull request title" --body "Pull request body"
これで、ドラフトPRが作成されます。
便利〜〜〜〜
ドラフトPRをready for reviewにする
$ gh pr ready
✔ Pull request #1 is marked as "ready for review"
レビュアーを設定する。
レビュアーはgh pr create
時に--reviewer
オプションで設定できます。
しかし、PRを作った後にCLIから設定する方法はまだ無いようです。
「ready for reviewにする時にreviewer設定できたらよくね?」というissueが立っています。
Add PR reviewers when marking PR ready for review · Issue #971 · cli/cli
PRの状態を確認、マージ、ブランチの削除
# PRの状態確認
$ gh pr status
#CI を通過しているか確認
$ gh pr checks
approveされたPRのマージもgh pr merge
だけで対話的に行えます。
オプションを指定した際はデフォルトでブランチも削除されます。
$ gh pr merge -m
✔ Merged pull request #1 (feature/example)
✔ Deleted branch feature/example and switched to branch master
便利〜〜〜〜
エイリアスを設定する
これらのコマンド、毎回打つには長いので、.zshrc
に以下の関数を追加します
# ブランチ作成->ドラフトPR作成
gwip () {
git checkout -b $1 && \
git commit --allow-empty -m ":tada: first commit" && \
gh pr create --draft
}
これで、gwip ブランチ名
でブランチの作成からドラフトPRの作成までできるようになりました。
$ gwip feature/task1
Switched to a new branch 'feature/task1'
[feature/task1 c1511df] :tada: first commit
? Where should we push the 'feature/task1' branch? uta-mori/example
Creating draft pull request for feature/task1 into master in uta-mori/example
? Title task1detail
? Body <Received>
? What's next? Submit
便利〜〜〜〜
気づいたこと
- 「ready for reviewなPRをドラフトPRにする」機能はCLIでは提供されてない
- PR作成後にreviwer設定できない
- 修正後にレビュー再依頼もできない?
おわりに
今回は個人的に面倒に感じている作業をCLIに統一できました。
Issue作成 からリリースまで と公式にあるように、大抵のことはCLIでできそうです。
GitHub公式ツールということで、今後も機能追加やメンテナンスは行われていくので、安心して使えますね。
最後までお読みいただきありがとうございました。
Discussion