GitHub CLI を使ってみた

最近 GitHub を CLI で操作可能な GitHub CLI を知ったので、ちょっと使ってみました。
2021.07.07

GitHub 上で開発業務を行うのが日常となっていますが、Web ブラウザ上から操作したり情報を取得しているうちに、これって CLI で出来ないのかなぁ、とふと思ったので調べてみたところズバリのものが公式にありました。

GitHub CLI について

cli/cli: GitHub’s official command line tool によると、Go 言語で書かれており、macOS、Linux、Windows で動作するようです。

どうやら、昨年2月にベータ版公開、9月には正式リリースされていたようです。

マニュアルを確認すると、PR や issue の他、色々な機能があるようです。

macOS にインストール&セットアップ

下記のページに沿って、手順を進めます。

インストール

README に記載の通り、Homebrew からインストール出来ます。

% brew install gh

% gh --version
gh version 1.12.1 (2021-07-01)
https://github.com/cli/cli/releases/tag/v1.12.1

認証

認証の選択肢はいくつかあるのですが、HTTPS プロトコルを使った Web ログイン認証を選択しました。

% gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: ****-****
- Press Enter to open github.com in your browser...

Enterキーを押すとWebブラウザが開くので、one-time code を入力して Continue をクリックします。

Device Activation

GitHub CLI に許可する操作が表示されるので、確認して Authorize github をクリックします。

確認のためパスワードを入力します。

Confirm access

このような画面が出て、GitHub CLI の OAuth 認証が完了します。

Congratulations

ターミナルに戻って作業を続行します。

✓ Authentication complete. Press Enter to continue...

- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as teknocat

Enter キーを押すと処理が完了します。

gh auth status でログイン状況を確認してみます。

% gh auth status
github.com
  ✓ Logged in to github.com as teknocat (/Users/********/.config/gh/hosts.yml)
  ✓ Git operations for github.com configured to use https protocol.
  ✓ Token: *******************

ログインできているようです。

使ってみる

issue の取得

いつものリポジトリの作業ディレクトリ上で、issue リストを取得してみます。

gh issue list

There are no open issues in teknocat/veevalidate-test

issue が無くて参考にならないので、業務で使っているリポジトリ上で実行した例を貼っておきます。

issue list sample

ラベルやマイルストーンなど、Webブラウザ上と同様のフィルタが掛けられます。

% gh issue list -l "bug"
% gh issue list --milestone "v1.0.0"

また、issue の内容も取得出来ます。

issue view sample

コメントも含めて出てきますし、--comments オプションつけなければ最新コメントのみ出力されるなど、色々と気配りされているなと感じます。

PR 一覧の取得

PR も issue と同様に取得可能です。

pr list sample

ブランチ名も同時に出てくれるのがいい感じです。

最新リリースの取得

最新リリース何だったかな、という時もコマンド一つなので便利。

ワークフローの実行

ワークフローを実行することも可能です。

特定リポジトリを特定環境にデプロイするワークフローを必要に応じて手動実行しているのですが、CLI 上で出来るので便利になりそうです。

最後に

主に情報取得系の例を紹介しましたが、更新操作系のコマンドも多く用意されています。 ただ、Web ブラウザの UI から実行することで挙動を把握している部分もあるので、CLI で実行するのは少し怖い感じがあります。 この辺りは、今後利用するユースケースが見つかったら試してみたいと思います。

あと、プロジェクト関係の機能が残念ながら無いようです。 プロジェクトの状態取得や issue への割り当てが CLI で出来ると便利だと思ったのですが…。

ただ、gh api で任意の API を発行出来るので、以下の API を叩けば生情報なら取れるかもしれません。

機会があれば試してみたいと思います。