GitHub CLI 2.0 で追加された Extensions 機能を使ってみる
これ
GitHub CLI 2.0 includes extensions! | The GitHub Blog
とりあえずすでに公開されてる拡張機能をインストール。拡張機能の公開はリポジトリを公開するだけ
❯ gh extension install vilmibm/gh-user-status
Cloning into '/Users/korosuke613/.local/share/gh/extensions/gh-user-status'...
remote: Enumerating objects: 121, done.
remote: Counting objects: 100% (121/121), done.
remote: Compressing objects: 100% (88/88), done.
remote: Total 121 (delta 70), reused 78 (delta 33), pack-reused 0
Receiving objects: 100% (121/121), 12.80 MiB | 7.63 MiB/s, done.
Resolving deltas: 100% (70/70), done.
どうやら~/.local/share/gh/
下にリポジトリがcloneされるみたいだ。
❯ gh user-status -h
Usage:
user-status [command]
Available Commands:
completion generate the autocompletion script for the specified shell
get get a GitHub user's status or your own
help Help about any command
set set your GitHub status
Flags:
-h, --help help for user-status
Use "user-status [command] --help" for more information about a command.
user-status は GitHub アカウントのステータスを set, get するためのコマンド。
❯ gh user-status get
😇 Dakarayo!
お〜ちゃんと取れた。
setは?
❯ gh user-status set '😇 Dakarayo!!'
gh user-status set '😇 Dakarayo!!'
! Sorry, this extension requires the 'user' scope.
? Would you like to add the user scope now? Yes
? What account do you want to refresh auth for? github.com
! First copy your one-time code: HOGE-HOGE
- Press Enter to open github.com in your browser...
✓ Authentication complete. Press Enter to continue...
✓ Status set to 💭 😇 Dakarayo!!
今のghコマンドの権限ではuser
スコープを許可していないため、user
スコープの追加を求められた。Sorry, this extension requires the 'user' scope.
認証のページを開いてくれるので楽々
確認
❯ gh user-status get
💭 😇 Dakarayo!!
なんだこの雲!💭
絵文字はオプションで指定だった。
❯ gh user-status set -h
set your GitHub status
Usage:
user-status set <status> [flags]
Flags:
-e, --emoji string Emoji for status (default "thought_balloon")
-E, --expiry duration Expire status after this duration
-h, --help help for set
-l, --limited Indicate limited availability
-o, --org string Limit status visibility to an organization
まあこんな感じで user-status 拡張機能は使えましたということで、リポジトリを覗いてみる。
vilmibm/gh-user-status: set and get github user statuses
まさかの go で書かれていた。インストール時にgit clone
していたけどビルドもやったってこと?
https://github.com/vilmibm/gh-user-status/tree/cead3abf46ffb5fd3c178a0ba6f2c69c3dbabf7e/builds
違った。バイナリもコミットしていた。
それをシェルから呼び出すという形らしい。
(どうやら対応するバイナリが無ければその場でビルドするらしい)
exec "${extensionPath}/${exe}" "$@"
https://github.com/vilmibm/gh-user-status/blob/cead3abf46ffb5fd3c178a0ba6f2c69c3dbabf7e/gh-user-status
つまりcloneしてシェルからできることならなんでもできるってことか。
~/.local/gh/
下にキャッシュを残せるからビルドが必要なものも配布できる。依存ツールやライブラリは事前に入れておかないといけないけど。
リポジトリ名は頭に gh-
をつけないといけない。
そして、インストールしたコマンドを叩くとリポジトリ名と同名の実行可能ファイルが実行されるという仕組みらしい。
拡張機能は gh extension create <EXTENSION-NAME>
で簡単に雛形を作成できる。この場合頭に gh-
をつけなくても勝手につけてくれるっぽい。
手動で作成しローカル拡張としてインストールすることも可能。gh extension install .
面白いから自分でも作ってみる。
て言ってもあんまりいいアイデア浮かばん。
gh-branchを参考に自分がつけたStarを見るための拡張機能作った。
shellでオプションの仕組み作るのだるすぎてとりあえず直近30件だけ