GitHub CLI Extension

GitHub CLIは独自のサブコマンドを追加できる。GitHub CLI 2.0から導入され、GitHub CLIのコア機能を拡張できる。

BashとGoで拡張を作成できるが、ここではGo言語での作成方法を説明する。

プロジェクトの作成

GitHub CLIではgh extension createコマンドでGoプロジェクトのひな型を作成できる。

gh extension create --precompiled=go [拡張名]

[拡張名]は任意の名前を指定する。このコマンドでGoプロジェクトのひな型とGitHub Actionsのワークフローファイルが生成される。

ディレクトリ名はgh-[拡張名]となる。

プロジェクト構成

拡張のリポジトリ名はgh-で始まる必要がある。

生成されるプロジェクトには以下のファイルが含まれる。

  • main.go - 拡張のエントリーポイント
  • go.mod - Goモジュールの定義
  • .github/workflows/release.yml - リリース用のGitHub Actionsワークフロー
  • script/build.sh - ビルドスクリプト

リリース時にはビルドされたバイナリファイルをリリースに添付する。

ビルドと実行確認

以下のコマンドでビルドする。

go mod tidy
go build

ビルドに成功すると実行可能ファイルが生成される。

ローカルでのインストール

作成した拡張をローカル環境でテストするにはプロジェクトのディレクトリで以下のコマンドを実行する。

gh extension install .

インストールされた拡張はgh extension listコマンドで確認できる。

$ gh extension list
NAME    REPO    VERSION
gh test

動作確認

インストール後、以下のコマンドで動作確認できる。

gh [拡張名]

正常に動作すれば拡張が実行される。

プロジェクトを生成し、何も修正していない状態でインストールすると以下のような出力が得られる。

$ gh [拡張名]
hi world, this is the gh-[拡張名] extension!
running as [ユーザ名]

最後のユーザ名はGitHub CLIでGitHubにログインしているユーザ名が表示され、GitHubとの連携も確認できる。

インストールした拡張のアンインストール

インストールした拡張をアンインストールするには以下のコマンドを実行する。

gh extension remove [拡張名]

正常にアンインストールされるとgh extension listコマンドで表示されなくなる。