Closed9

GitHub CLI 2.0 で追加された Extensions 機能を使ってみる

Futa HirakobaFuta Hirakoba

とりあえずすでに公開されてる拡張機能をインストール。拡張機能の公開はリポジトリを公開するだけ

❯ 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されるみたいだ。

Futa HirakobaFuta Hirakoba
❯ 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! 

お〜ちゃんと取れた。

Futa HirakobaFuta Hirakoba

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.

認証のページを開いてくれるので楽々

Futa HirakobaFuta Hirakoba

確認

❯ 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
Futa HirakobaFuta Hirakoba

まあこんな感じで user-status 拡張機能は使えましたということで、リポジトリを覗いてみる。

vilmibm/gh-user-status: set and get github user statuses
https://github.com/vilmibm/gh-user-status

まさかの 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/下にキャッシュを残せるからビルドが必要なものも配布できる。依存ツールやライブラリは事前に入れておかないといけないけど。

Futa HirakobaFuta Hirakoba

リポジトリ名は頭に gh- をつけないといけない。

そして、インストールしたコマンドを叩くとリポジトリ名と同名の実行可能ファイルが実行されるという仕組みらしい。

拡張機能は gh extension create <EXTENSION-NAME> で簡単に雛形を作成できる。この場合頭に gh- をつけなくても勝手につけてくれるっぽい。

手動で作成しローカル拡張としてインストールすることも可能。gh extension install .

https://docs.github.com/en/github-cli/github-cli/creating-github-cli-extensions

Futa HirakobaFuta Hirakoba

面白いから自分でも作ってみる。
て言ってもあんまりいいアイデア浮かばん。

このスクラップは2021/08/26にクローズされました