log.mh4gf.dev

GitHub CLIでよく使うコマンド

GitHub CLI

Take GitHub to the command line

GitHub CLI

GitHub CLIを便利に使っている。基本的にGitHubの操作の起点はCLIからにしていて、現時点での自身の利用コマンドをまとめてみる。

gh browse

gh browse

  • リポジトリをブラウザで開く
  • ghq+pecoでターミナルでのリポジトリ移動をしているので、そこからGitHubのリポジトリを開くことが多い

gh browse config/routes.rb:15

  • ファイルと行数を渡してデフォルトブランチでファイルを開く
  • コード行をslack等でシェアしたい時に使うが、デフォルトブランチだと時間が経つとリンク先の情報が変わってしまうため、以下のコミット指定で開く方をよく使う

gh browse -c db/schema.rb:52

  • c をつければ現在のコミットで開く
  • gh b で開けるようにエイリアスにしている。 gh b で開くと現在のコミットで開き、 gh browse で開くとデフォルトブランチで開く
  • この相対リンクの取得方法はRubyMineだと行にカーソルがある状態でcmd+Shift+Cで手に入るが、VSCodeだとちょうどよいキーボードショートカットがない…

gh browse -p

  • projectsの一覧を開く

gh pr

gh pr create

  • 対話式にPRを作成、git pushも含めてやってくれる
  • 最近のアップデートでdraft PRも作れるようになった

gh pr view --web

  • PRをブラウザで開く
  • gh prv で開けるようにエイリアスにしている

gh pr list --web

  • PR一覧をブラウザで開く

gh pr list --search "review-requested:@me"

  • 自分がレビュワーをアサインされているPRで絞り込む
  • 集中するタスクが一区切りしたタイミングでとりあえず叩く

gh pr checkout {number}

  • リモートブランチをfetchしてきてチェックアウトする
  • PRのレビュー時に、手元で動かしたかったり差分周辺のコードが読みたかったりする時に使う。

gh issue

gh issue list --web

  • issue一覧をブラウザで開く

gh issue create

  • 対話式にissueの作成

gh gist

gh gist view

  • 自身の投稿したgistの内容を表示する。issueやprとは違いID指定をせずに実行するとgist一覧が表示され、インクリメンタルに絞り込んで開くことができる。

gh gist edit {id}

  • id指定してgistを編集する。 gh config で設定したエディタで編集が可能。自分はvimを設定している。
  • idは gh list で取得可能

gh api

  • gh login で登録した認証情報を使ってGitHub APIを叩ける。ちょっと複雑なことがしたくなった際にサクッとAPIを試せるのは非常に便利。
  • REST APIはもちろん、V4のGraphQL APIも叩ける。 --jq でjqシンタックスでの絞り込みがjqをインストールせずとも使える。
  • 例えば適当なPRの変更差分ファイル全てをスペース区切りで出力したい場合、このようになる。
  • gh api /repos/{owner}/{repo}/pulls/255/files --jq '[.[].filename] | join(" ")'
    • ownerとrepoはプレースホルダーで、カレントディレクトリのリポジトリ情報で置き換えてくれる。

gh repo

gh repo edit --delete-branch-on-merge --enable-auto-merge

  • リポジトリの設定を変更できる。全ての設定を満たしているわけではないがフラグが用意されているので、詳しくはドキュメントを見ると良い。 https://cli.github.com/manual/gh_repo_edit
  • この二つはリポジトリを作った際に大体設定しているので、CLIで設定できるようになったのは楽。

組み合わせ

以上で紹介したコマンドや、その他のコマンドラインツールを組み合わせて使うこともある。少々長いが、一度実行しておけば後はhistoryから補完できるためエイリアスを用意したりはしていない。

gh pr checkout $(gh pr list --search "review-requested:@me" | peco | awk '{print $1}')

  • 自身がレビュワーをアサインされているPRで絞り込み、pecoでインクリメンタルに選択し、選択したPRにチェックアウトする

gh gist edit $(gh gist list | peco| awk '{print $1}')

  • gistの一覧を開いてpecoでインクリメンタルに選択し、選択したgistを編集する


この記事では自分がGitHub CLIでよく使うコマンドをまとめてみた。

他のコマンドは認知はしているものの使うユースケースが思いつかない、といったものも多いので、「このコマンドはこの状況で便利だよ」というのがあれば知りたい。workflowやreleaseは使いこなせると便利かも?と思いつつ使えていない。

GitHub CLIは月に複数回はマイナーバージョンがリリースされるほど活発に開発されている。新機能の追加も多いので今後も追っていきたい。

余談:GitHub CLIの設定ファイル

GitHub CLIの設定は ~/.config/gh/config.yml に保存されている。保存されている場所がわかればシンボリックリンクにしてgitで管理することができるので便利。自分の設定はこちら。

https://github.com/MH4GF/dotfiles/blob/master/.config/gh/config.yml