コンテンツにスキップ

UbuntuにGitHub CLIをインストール

GitHub CLI をインストールする方法を紹介します。

要約

参考

gh をインストール

以下のコマンドを実行します。

Terminal window
sudo apt update
sudo apt install git gh

最新版をインストールしたい場合は以下のコマンドを実行します。

Terminal window
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y))
sudo mkdir -p -m 755 /etc/apt/keyrings
wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install git gh

認証

以下のコマンドを実行して認証を行います。

Terminal window
gh auth login

認証では、ブラウザを使用するか、トークンを入力するかを選択します。

プライベートリポジトリのクローン

認証時に、HTTPSプロトコルを選択した場合は

Terminal window
git clone https://github.com/USERNAME/REPO.git

SSHプロトコルを選択した場合は

Terminal window
git clone git@github.com:USERNAME/REPO.git

で、クローン可能です。 また、どちらのプロトコルを選択した場合でも以下のコマンドでクローンできます。

Terminal window
gh repo clone USERNAME/REPO

API を使用する

ユーザーの情報を取得する

Terminal window
gh api user
実行結果
{
"login": "USERNAME",
"id": XXXXXXXXX,
"node_id": "XXxxXX",
"avatar_url": "https://avatars.githubusercontent.com/u/XXXXXXXXX?v=4",
29行の折りたたみ
"gravatar_id": "",
"url": "https://api.github.com/users/USERNAME",
"html_url": "https://github.com/USERNAME",
"followers_url": "https://api.github.com/users/USERNAME/followers",
"following_url": "https://api.github.com/users/USERNAME/following{/other_user}",
"gists_url": "https://api.github.com/users/USERNAME/gists{/gist_id}",
"starred_url": "https://api.github.com/users/USERNAME/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/USERNAME/subscriptions",
"organizations_url": "https://api.github.com/users/USERNAME/orgs",
"repos_url": "https://api.github.com/users/USERNAME/repos",
"events_url": "https://api.github.com/users/USERNAME/events{/privacy}",
"received_events_url": "https://api.github.com/users/USERNAME/received_events",
"type": "User",
"site_admin": false,
"name": null,
"company": null,
"blog": "",
"location": null,
"email": null,
"hireable": null,
"bio": null,
"twitter_username": null,
"public_repos": 0,
"public_gists": 0,
"followers": 0,
"following": 0,
"created_at": "20XX-XX-XXTXX:XX:XXZ",
"updated_at": "20XX-XX-XXTXX:XX:XXZ"
}

上記以外にも、アカウントによってowned_private_reposplanなどの項目が含まれることがあります。

メールアドレスの公開設定を確認する

Terminal window
gh api user/emails

以下のようなエラーが発生した場合は

実行結果
{
"message": "Not Found",
"documentation_url": "https://docs.github.com/rest/users/emails#list-email-addresses-for-the-authenticated-user",
"status": "404"
}
gh: Not Found (HTTP 404)
gh: This API operation needs the "user" scope. To request it, run: gh auth refresh -h github.com -s user

メッセージ通りにコマンドを実行します。

Terminal window
gh auth refresh -h github.com --scopes user

認可が終了したら、再度gh api user/emailsコマンドを実行します。デフォルトでは以下のような返答が得られます。

実行結果
[
{
"email": "YOUR_EMAIL@example.com",
"primary": true,
"verified": true,
"visibility": "public"
}
]

メールアドレスの公開設定を変更する

メールアドレスの公開設定をprivateに変更します。

Terminal window
gh api \
--method PATCH \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/user/email/visibility \
-f "visibility=private"

以下のような返答が得られます。

実行結果
[
{
"email": "YOUR_EMAIL@example.com",
"primary": true,
"verified": true,
"visibility": "private"
}
]

また、メールアドレスの公開設定をprivateにすると、先ほどのコマンドの実行結果も変わります。

Terminal window
gh api user/emails
実行結果
[
{
"email": "YOUR_EMAIL@example.com",
"primary": true,
"verified": true,
"visibility": "public"
},
{
"email": "USERID+USERNAME@users.noreply.github.com",
"primary": false,
"verified": true,
"visibility": null
}
]

設定

ローカル環境の git の設定(名前、メールアドレス)を GitHub 側に合わせる際に、以下のように API を使用することもできます。

Terminal window
GITHUB_USER=$(gh api user --jq .login)
echo "GITHUB_USER: $GITHUB_USER"
git config --global user.name "$GITHUB_USER"
GITHUB_EMAIL=$(gh api user/emails --jq '.[0].email')
# 非公開設定
# GITHUB_EMAIL=$(gh api user/emails --jq '.[1].email')
echo "GITHUB_EMAIL: $GITHUB_EMAIL"
git config --global user.email "$GITHUB_EMAIL"

メールアドレスとして、gh api user/emails --jq '.[1].email'を使用すると、git logコマンドを実行した際に表示されるAuthorのメールアドレスがUSERID+USERNAME@users.noreply.github.comになります。 自身のメールアドレスを知られたくない場合に設定するとよいと思います。

署名期限切れ