gh でエディタから離れずに作業する
はじめに
gh、つかってますか?
「エディタとブラウザを行き来する時間は、もっとも簡単に減らせる無駄だ」みたいなことを誰かが言っていた気がするので、最近は DevOps の導入をがんばったりしています。その中で触り心地が良かったものを紹介。
この記事では、github の公式 CLI である gh コマンドを使って
- issue の作成
- issue に紐づいたブランチの作成、移動
- PR の作成
- PR のマージ
を行います。
導入
そもそも gh を使ったことがない場合は、インストール作業が必要になります。
https://github.com/cli/cli?tab=readme-ov-file#installation
macOS
Homebrew からインストールするのが一番早そう。
https://github.com/cli/cli/blob/trunk/docs/install_macos.md#homebrew
brew install gh
Windows
WSL ではないほう。winget でよいらしいです。
https://github.com/cli/cli/blob/trunk/docs/install_windows.md#winget
winget install --id GitHub.cli
Linux / Unix
WSL 上で Ubuntu 使ってるくらいしか触ってないので、それ以上のことは以下参照。
https://github.com/cli/cli/blob/trunk/docs/install_linux.md#debian
基本これでいけると思います。
(type -p wget >/dev/null || (sudo apt update && sudo apt install wget -y)) \
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
&& out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg \
&& cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& sudo mkdir -p -m 755 /etc/apt/sources.list.d \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y
やってみる
さて、実際にやってみます。
前提としてなにかしらのプロジェクトを立てていて、GitHub 上にリポジトリが立っているものとします。
issue を作成する
まずは Issue を立ててみます。
以下のコマンドで対話プロンプトが起動するので、必要な情報をチマチマ入力する感じです。
gh issue create
ちなみに gh のデフォルトエディタは nano になっているんですが、以下のコマンドで vim とかに変更できます。
gh config set editor vim
github 側で確認してみると、ちゃんと issue が生えてるのが確認できます。

issue に紐づいたブランチを作成する
これは人によりますが、だいたい 1 issue につき 1 ブランチで作業してると思います。
issue に紐づいたブランチを作成することで、PR merge 時に自動で削除されるなどのメリットがあります。
さて、これも gh でできます。
gh issue develop <issue-id> -n <branch-name> -c
-n を付けずに送信した場合、デフォルトのブランチ名(1-Issueのタイトル)が使われます。タイトルが日本語の場合 CLI とかで扱いづらい名前になっちゃうので、英数字でつけなおすことを推奨します。
-c をつけることで、作成後に自動でチェックアウトしてくれます。
PR を作成する
さて、issue で定めた作業が終わったとします。
gh で PR を作成する場合は以下のようになります。
gh pr create
これも issue の作成とおなじく対話形式で書けます。
PR のマージ
個人開発などでとくにレビューも必要ない場合、gh からさくっとマージすることが多いです。
以下で現在チェックイン中のブランチをマージします。
gh pr merge