GitHubを操作するCLI「gh – The GitHub CLI tool」(Beta)を試す
はじめに
GitHubが「GitHub CLI」をベータ版として公開しました。
リポジトリはgh - The GitHub CLI toolです。 githubの紹介記事は、こちらです。
本ツールはGitHub公式であるのに対して、hubという非公式ツールがあります。
私は普段からhubを利用しており、hub createやhub create -pやhub browseをよく利用しています。
本記事では、GitHubの公式ツールghでどのような操作が可能か試してみました。
注意: Beta版なので、今後大きく仕様が変わる可能性があります。また本記事は、gh version 0.5.5 (2020-02-13)を利用しています。
インストール
Mac場合
1 | $ brew install github/gh/gh |
認証設定
何らかのコマンドを実行すると認証を求められます。
1 2 3 | $ gh issue listNotice: authentication requiredPress Enter to open github.com in your browser... |
[Enter]を押下で、ブラウザが起動し、認可画面に遷移します
緑色のAuthorize githubを押下し、認証完了です。
ghコマンドのオプション
現在第1引数に以下のコマンドが利用可能です。
- gh help
- gh issue
- gh pr
gh prとgh issueについて見ていきます。
gh pr
gh pr create
プルリクエストを作成するオプション。gh pr create [flags]で実行します。
flagsオプションの詳細は、下記の通りです。(詳細は、gh pr create --help参照。以後同様。)
| flags | 機能 |
|---|---|
| -B, --base string | コードをマージするブランチを指定 |
| -b, --body string | PR内容を指定します。それ以外は対話型で設定します |
| -d, --draft | ドラフトプルリクエストを作成します |
| -t, --title string | タイトルを指定します。 それ以外は対話型で設定します |
| -w, --web | Webブラウザーを開いてプルリクエストを作成します |
オプション未指定で試す(gh pr create)
プルリクエスト内容を記述するエディターの設定をします。
ghは利用するエディタを環境変数で認識し、$GITHUB_EDITOR、$EDITOR、$VISUALの順で評価します。参考
私の環境では、$VISUALにnanoが設定されていたため、neovimで設定し直しました。
1 | export VISUAL='nvim' # vim等 |
ブランチを適当に切って、コミット後コマンド(gh pr create)を実行します
タイトルを入れると、内容入力が求められます。(e)でnvimを起動します
neovimが起動します。プルリクの内容を書きます。 (このとき、プルリクテンプレートがあると反映されることを確認しています)
wqで抜けると、Preview in browserかSubmitかCancelかを選択出来ます。今回は、Preview in browserを実行してみます。
ブラウザが起動し、neovim入力した内容が反映されています。
オプション指定で試す
以下のシナリオを想定して実行してみます
| 設定項目 | 値 |
|---|---|
| マージ先ブランチ | master |
| プルリクエスト | draft |
| タイトル | リファクタリング |
| プルリクエストの内容 | hoge |
1 2 3 4 5 | $ gh pr create -B master -d -b 'hoge' -t 'リファクタリング'Creating pull request for gh-test into master in shuntaka9576/dotfileshttps://github.com/shuntaka9576/dotfiles/pull/41 |
期待通り、draftプルリクエストが作成されました!
gh pr list
リポジトリ内のプルリクエストの一覧表示およびフィルタリングするオプション。gh pr list [flags]で実行します。
flagsオプションの詳細は、下記の通りです。
| flags | 機能 |
|---|---|
| -a, --assignee string | アサインでフィルタ |
| -l, --label strings | ラベルでフィルタ |
| -L, --limit int | CLI上の取得上限を設定(デフォルト30件) |
| -s, --state string | 状態(open|closed|merged|all)でフィルタ可能(デフォルト open) |
prナンバー タイトル branch名の情報が表示されます。open(緑) merged(ピンク) close(赤)で表現されており、分かりやすいですね。
gh pr status
プルリクエストのステータスを表示するオプション。gh pr status [flags]で実行します。
Global Flagsの除くflagsオプションは現在存在しません。
自分のカレントブランチに関するPRと、自分が作成したPR(open)とレビュー依頼されているPRの情報が確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ gh pr statusRelevant pull requests in shuntaka9576/dotfilesCurrent branch #41 リファクタリング [gh-test]Created by you #41 リファクタリング [gh-test] #40 Refactoring [refactoring]Requesting a code review from you You have no pull requests to review |
gh pr view
引数で指定されたプルリクエストをブラウザで表示するオプション。gh pr view [{<number> | <url> | <branch>}] [flags]で実行します。
flagsオプションの詳細は、下記の通りです。
| flags | 機能 |
|---|---|
| -p, --preview | issue内容のプレビューを表示する |
プレビューと聞いたら、fzfですね。
リポジトリ配下で、下記のコマンドを実行します。(fzf-tmuxになっていますが、fzfでも可能です)
1 | $ gh pr list| fzf-tmux --prompt "pr preview>" --preview "echo {} | awk '{print \$1}' | xargs gh pr view -p" | xargs gh pr view |
左側にprリスト、右側にpr内容が表示出来ます。曖昧検索選択後、自動的にブラウザが立ち上がり、対象のissueを確認出来ます。
gh pr checkout
対象のプルリクエストのbranchにcheckoutするオプション。gh pr checkout {<number> | <url> | <branch>} [flags]で実行します。
Global Flagsの除くflagsオプションは現在存在しません。
1 2 3 4 5 6 7 8 | ~/dotfiles [master]$ gh pr checkout 41 # PRの番号を指定Switched to branch 'gh-test'Your branch is up to date with 'origin/gh-test'.Already up to date.~/dotfiles [gh-test] # 指定したPRのブランチにcheckout$ |
コードレビュー時に、ブランチ名をコピーしてgit checkout ブランチ名する手間が省けて良さそうですね。
gh issue
gh issue create
issueを作成するオプション。gh issue create [flags]で実行します。
| flags | 機能 |
|---|---|
| -b, --body string | issue内容を指定します。それ以外は対話型で設定します |
| -t, --title string | issueタイトルを指定します。 それ以外は対話型で設定します |
| -w, --web | Webブラウザーを開いてプルリクエストを作成します |
要領は、gh pr createと同様です。
gh issue list
issueを表示するオプション。git issue list [flags]で実行します。
flagsオプションの詳細は、下記の通りです。
| flags | 機能 |
|---|---|
| -a, --assignee string | アサインでフィルタ |
| -l, --label strings | ラベルをフィルタ |
| -L, --limit int | CLI上の取得上限を設定(デフォルト30件) |
| -s, --state string | 状態(open|closed|all)でフィルタ可能 |
下記ような検索をする場合、コマンドは、gh issue list -l bug -L 20 -s allとなります。
| 設定値 | 値 |
|---|---|
| ラベル | bug |
| 取得上限 | 20 |
| 状態 | 全て |
aws-cdkで実行した結果は下記の通り。 openしているissueが緑でcloseしているissueが赤で表現されています。
gh issue status
プルリクエストのステータスを表示するオプション。gh issue status [flags]で実行出来ます。
Global Flagsの除くflagsオプションは現在存在しません。
自分がアサインされたissue,メンションされたissue,作成したissueの情報が確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ gh issue statusRelevant issues in shuntaka9576/dotfilesIssues assigned to you There are no issues assigned to youIssues mentioning you There are no issues mentioning youIssues opened by you #36 powerline作成 about 6 months ago #34 マルチバイト文字列使用時に、tmuxのstatus-windowが... about 6 months ago |
gh issue view
issueをブラウザで表示するオプション。git issue view {<number> | <url> | <branch>} [flgas]で実行します。
flagsオプションの詳細は、下記の通りです。
| flags | 機能 |
|---|---|
| -p, --preview | issue内容のプレビューを表示する |
先ほどと同様に、fzfを組み合わせると便利そうです。
1 | $ gh issue list| fzf-tmux --prompt "issue preview>" --preview "echo {} | awk '{print \$1}' | xargs gh issue view -p" | xargs gh issue view |
左側にissueリスト、右側にissue内容が表示出来ます。曖昧検索選択後、自動的にブラウザが立ち上がり、対象のissueを確認出来ます。
最後に
本記事は、ghの機能を試してみました。beta版でありながら十分に実用的だと感じました。
今後様々なオプションが増えることが期待出来るので、注目していきたいです。