💻

個人的 GitHub CLI 活用法

Leaner Technologies で業務委託している西辻です。
最近はチームメンバーも増えてきて、 Pull Request をレビュー/作成する機会がだいぶ増えてきました。
以前から Pull Request 作成を GitHub CLI 経由にしていたのですが、もっと作業を効率化できないかなーと思ってました。
そこで今回テックブログでまとめつつ、楽できそうな部分をコマンドにしていくという試みです。
https://cli.github.com/

Pull Request レビュー編

Pull Request のレビューはチーム開発において不可欠かつ、頻度が高いものであるので効率化しておきたいですね。
また、数が貯まるとなかなかレビューする気が起きない(自分だけか)ので、毎朝仕事を始めるときに上がっている Pull Request はさっとレビューしておきたいところです。

レビュー待ちになっている Pull Request を CLI 経由で一覧する

自分が現在メインで開発しているプロダクトはバックエンド 1 Repository, フロントエンド 3 Repository の構成をとっているので、 Pull Request も各 Repository に分散される状況です。
毎朝、 Scheduled reminders で Slack にリマインドは送っているのですが、ついつい見逃しがちです。
なんだろう、自分がレビュー待ちの Pull Request を一覧したい気持ちがある時に一覧したいものです。

前置きが長くなりましたが、各 Repository でレビュー待ちになっている Pull Request 達を GitHub CLI で一覧してみましょう。

show-waiting-review-prs.sh
#!/bin/bash

for repo in backend forntend1 forntend2 forntend3 
do
  cd /path/to/$repo
  gh pr list -l 'レビュー待ち'
done

現状、今のチームではレビュー待ちのラベルになっていたらレビュー対象になるのでフィルタをかけています。
この辺りは各チームで運用ルールあるので、適応したフィルタにすると良さそうです。

実行すると以下のような出力が得られます。

$ /bin/bash show-waiting-review-prs.sh 

Showing 3 of 3 pull requests in your-organization/backend that match your search

#1016  ... branch-name
#1014  ... branch-name
#1013  ... branch-name

No pull requests match your search in your-organization/frontend1

No pull requests match your search in your-organization/frontend2

No pull requests match your search in your-organization/frontend3

レビュー待ちの Pull Request を CLI 経由でまとめてブラウザ上で開く

とりあえず、コンソール上では一覧できましたが、これだけだと「今日もいっぱい Pull Request 上がっているなぁ」くらいにしか使えないので、もう少し実用性を高めていきます。
自分のよくやる操作は、各 Repository のレビュー待ちとなっている Pull Request をブラウザ上でざっと開いてレビューが終わったら閉じていくスタイルです。
これを GitHub CLI を利用して、レビュー待ちになっている Pull Request をまとめてブラウザで開けるようにしてみます。

open-waiting-review-prs.sh
#!/bin/bash

for repo in backend forntend1 forntend2 forntend3 
do
  cd /path/to/$repo
  PULL_REQUESTS=`gh pr list -l 'レビュー待ち'`
  PULL_REQUEST_NUMBER_LIST=`echo "$PULL_REQUESTS" | awk '{ print $1 }'`
  for pull_request_number in $PULL_REQUEST_NUMBER_LIST
  do
    gh pr view $pull_request_number --web
  done
done

これでまとめて開けるようになりましたね。
ここまでできると、あとはレビューするまでブラウザのタブを閉じない強い気持ちを持つことで、レビューし忘れをだいぶ防げそうです。

Image from Gyazo

Pull Request 作成編

レビューと同じくらい Pull Request の作成も頻度高い操作なので、こちらも GitHub CLI を利用して楽にできないか試してみます。

Pull Request を CLI 経由で作る

現状、自分が利用しているコマンドは以下です。

$ gh alias list
cpr:  pr create -a @me --web
  • -a @me で自分を Assignee として設定できます。
  • --web をつけることで Pull Request の作成画面を開きます。

上記の設定で gh cpr とすると remote push してでブラウザを起動し Pull Request の作成画面を開きます。

https://cli.github.com/manual/gh_pr_create

最近の Pull Request の Changes を自分はよくコミットメッセージから作ることが多いので、その辺も楽にできないか試してみます。

$ git log main.. --pretty=format:%s | sort | sed 's/^/- [ ] /g' | pbcopy; gh cpr

なんかコマンドに包んだ方が良さそうですが、とりあえずコミットメッセージを Changes へコピペするところは楽にできそうです。

以下のように main ブランチとのコミットがあったとします。

$ git log main.. --pretty=oneline 
a4f923c5c5cc02feacb0b354f40b531c71817fb5 (HEAD -> sample1, origin/sample1) sample2
7df1f1f9a74751e8b3ab7b36985cfe96eb92ae7e sample1

これを Changes に貼り付けて加工すると捗りそうな気がしています。

$ git log main.. --pretty=format:%s | sort | sed 's/^/- [x] /g'
- [x] sample1
- [x] sample2

実際に動かしてみるとこんな感じでした。
Image from Gyazo

まとめ

GitHub CLI を使うことでターミナルからブラウザへの連携はかなりいい感じにできることがわかりました。
単調な作業は自動化して、レビューだったり Pull Request の Description の詳細をレビュワーにわかりやすくする時間をもっと増やしていきたいですね。

宣伝

Leaner Technologies では日々のちょっとした作業を自動化して自身の業務を効率化していけるエンジニアを募集しています!

https://careers.leaner.co.jp/

リーナーテックブログ

Discussion