やっとgh auth loginで得たクレデンシャル(OSのセキュアストレージに保存されているもの)のみを使う生活になったぞ
— k1LoW (@k1LoW) 2023年5月15日
GitHub CLIの gh auth login で作成されたクレデンシャルはOSのセキュアストレージに保存されるようになりました。
次のエントリが詳しいです。
「じゃあ、もう全部セキュアストレージに保存されたクレデンシャルを使えばOK」となるのですが、なかなかそうはいきません。
なぜかというとGitHubのクレデンシャルを使うツールによって環境変数の扱いが異なるからです。
GitHubのクレデンシャル設定の歴史(私の記憶版)
注意: 以下は、あくまで私の記憶であって実際と異なるかもしれません。
前史
GitHub CLI( gh )やGitHub Actionsの登場以前は、クレデンシャルを保存する環境変数名として使われていたのは GITHUB_TOKEN でした。また、github.comとEnterpriseを切り替えるための環境変数名は定まっていなかった気がします。
GitHub Actions の登場
GitHub Actionsが登場したことで、GitHub Actionsがデフォルトで設定している環境変数が認知されるようになってきました。
これにより、 GITHUB_API_URL といった「github.comとEnterpriseを切り替える」環境変数に対応したツールが登場してきました。
GitHub CLI( gh )の浸透
そしてGitHub CLIが広く使われるようになってきて、GitHub CLIがサポートする環境変数( GH_HOST GH_TOKEN など)が認知されるようになってきました。
異なる環境変数の取り扱いにまとめて対応する
上記のような経緯が(たぶん)あったので、GitHubのクレデンシャルを扱うツールはその登場時期によって認識する環境変数が異なります。
独自に環境変数名を定めているものはしかたないとしても、当時のデファクトスタンダードな環境変数に対応していたツールにはなんとか対応したいと考えました。
また、GitHub CLIには gh auth token というトークンそのものを取得するコマンドがありますが、「github.comとEnterpriseを切り替える」環境変数まで設定してくれる訳ではありません。
というわけで、gh-do というコマンドを作りました。
gh-do
gh-doは何かというと gh auth login で保存されたクレデンシャルとホスト名を使って環境変数を設定してくれるツールです。
インストール
gh-doはGitHub CLI 拡張機能としてインストールして gh do として実行できます。
$ gh extension install k1LoW/gh-do
$ gh do --help
gh-do is a tool to do anything using GitHub credentials.
Usage:
gh-do [flags]
Flags:
--help
-h, --hostname string The hostname of the GitHub instance to do
--insecure Use insecure credentials
-v, --version version for gh-do
また、単体のコマンド gh-do としてインストールすることも可能です。macOSであれば Homebrewでインストールできます。
$ brew install k1LoW/tap/gh-do
使い方
引数にコマンドがあれば、環境変数を設定したうえでコマンドを実行してくれますし、
gh do -- any-command arg arg arg
引数が何もなければ環境変数をexportコマンドの形で出力します。
$ gh do export GH_HOST=github.com export GH_TOKEN=gho_xxxxxXXXXXXXXxxxxxxxXXXXXXXXXxxXXxxx export GH_ENTERPRISE_TOKEN= export GITHUB_ENTERPRISE_TOKEN= export GITHUB_TOKEN=gho_xxxxxXXXXXXXXxxxxxxxXXXXXXXXXxxXXxxx export GITHUB_API_URL=https://api.github.com export GITHUB_GRAPHQL_URL=https://api.github.com/graphql
「github.comとEnterpriseの切り替え」も環境変数 GH_HOST を読んで自動で切り替えてくれます。
また --hostname ( -h ) オプションで切り替えることも可能です。
$ gh-do --hostname enterprise.internal export GH_HOST=enterprise.internal export GH_TOKEN=gho_yyyyyYYYYYYYYyyyyyyyYYYYYYYYYyyYYyyy export GH_ENTERPRISE_TOKEN=gho_yyyyyYYYYYYYYyyyyyyyYYYYYYYYYyyYYyyy export GITHUB_ENTERPRISE_TOKEN=gho_yyyyyYYYYYYYYyyyyyyyYYYYYYYYYyyYYyyy export GITHUB_TOKEN=gho_yyyyyYYYYYYYYyyyyyyyYYYYYYYYYyyYYyyy export GITHUB_API_URL=https://enterprise.internal/api/v3 export GITHUB_GRAPHQL_URL=https://enterprise.internal/api/graphql
デフォルトではOSのセキュアストレージに保存されたクレデンシャルしか使わないようになっていますが、--insecure オプションを付与することでGitHub CLIと同様にクレデンシャル用環境変数にも反応してくれます。
$ gh do --insecure
ところで
envchainにまとめるというのも汎用性高くてとてもオススメです。
というわけで
gh auth login で作成されたクレデンシャルだけの生活がはじまる...


(github.comのSettingsにあるクレデンシャルはゼロ)
と思ったのですが、現在はまだ完全には至っていません。
あーJasper用だけ残っていた
— k1LoW (@k1LoW) 2023年5月15日
Jasperめちゃ便利なのでオススメです*1。
*1:GHESのPR/Issueビューワーとしてフル活用しています