ブラウザからではなくCLIでGitHubのリモートレポジトリを作ってみる gh利用
の続きです。
まず1回ちゃんとREST APIからGitHubのレポジトリを作成する方法をきちんと復習してみましょうかね?適当に検索するのでは無く、GitHubで原典にあたろうというわけです。もちろんRemote Repository Manager作る時にはAPIの使い方習いましたけどね。要はhttpsのputするわけです。パラメーター付けて。さて、
github rest api create repository
とかの検索ワードでBing君に探してもらいましょう。Copilot君が口を挟んでくるかもしれませんが、一発で、

あたったようですね。一番上のリンクから、中の“Create repository for authentic user…”を選択します。日本語に切り替えられるようです。

右側のペインで、”cURL”,”JavaScript”,”GitHub CLI”とありますが、ここでは一番右を選択します。
# GitHub CLI api
# https://cli.github.com/manual/gh_api
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/user/repos \
-f "name=Hello-World" -f "description=This is your first repo!" -f "homepage=https://github.com" -F "private=false" -F "is_template=true"
この例では、レポジトリの名前(name)、レポジトリの記述(description)、public or private、テンプレートを使うか等が指定できるようです。上のコードをそのままDebianのBashに食わせることはできません、文末の継続行文字(\)は長いコマンドラインを入れる時の継続行なので、1回エディタに食わせてからワンラインに修正する必要があります。その際に上記のname,description,public等々をなおせばいいのですね。実行前に、ghをインストールする必要もありますね。ghについては、
に記述があります。ghはGitHub純正ですね。Debianでは
sudo apt update
sudo apt install gh
でインストールできます。というかできました。
サンプルと、目的を比較して、
gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /user/repos -f "name=Hello-World" -f "description=This is your first repo!" -f "homepage=https://github.com" -F "private=false" -F "is_template=true"
を
gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /user/repos -f "name=alt-rajiru" -f "description=NHK rajiru recording script" -f "homepage=https://github.com" -F "private=false" -F "is_template=false"
nameとdescriptionと、せいぜいpublic or privateじゃないの?
実行してみましょうかね。
nao@debian-g:~/nhk$ gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /user/repos -f "name=alt-rajiru" -f "description=NHK rajiru recording script" -f "homepage=https://github.com" -F "private=false" -F "is_template=false"
To get started with GitHub CLI, please run: gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.
あるあるさね。
そういえば、PATをどこにもかいてなかった。後者の方法で指定しますかね。
export GH_TOKEN= ghp_your_original_personal_access_code
に続いて、
nao@debian-g:~/nhk$ export GH_TOKEN=ghp_あなたのPAT
nao@debian-g:~/nhk$ gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /user/repos -f "name=alt-rajiru" -f "description=NHK rajiru recording script" -f "homepage=https://github.com" -F "private=false" -F "is_template=false"
{
"id": 987279442,
"node_id": "R_kgDOOtiwUg",
"name": "alt-rajiru",
"full_name": "alt-doc-nao/alt-rajiru",
"private": false,
"owner": {
"login": "alt-doc-nao",
以下省略
無事Createできたようですね。ブラウザで確認すると、

emptyなrepositoryができてます。これでいいのだ。ちなみに、cURLとghで比較すると、
cURL
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/user/repos \
-d '{"name":"Hello-World","description":"This is your first repo!","homepage":"https://github.com","private":false,"is_template":true}'
Github CLI
# GitHub CLI api
# https://cli.github.com/manual/gh_api
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/user/repos \
-f "name=Hello-World" -f "description=This is your first repo!" -f "homepage=https://github.com" -F "private=false" -F "is_template=true"
なので、それほど面倒さは変わりませんが、強いて言えばcURLでData field(つまりJSON)をコマンドラインで書くのは面倒です。それに比べると、ghの方は独立して-fオプションで書けるから、その分だけ楽かな?パラメーター付きのスクリプトで書くのもすっきり書けるかもしれませんね。
コメント