コンテンツにスキップ

GitHub CLI(gh)

この章では、GitHub公式CLIツール「gh」のインストール、主要コマンド、エイリアスについて学びます。

**GitHub CLI(gh)**は、GitHubの操作をターミナルから行える公式コマンドラインツールです。Issue、PR、リリースなどの操作をコマンドラインで完結できます。

特徴説明
公式ツールGitHub公式サポート
統合認証ブラウザ認証でセットアップ簡単
高機能REST/GraphQL API直接アクセス
拡張性エイリアスと拡張機能
Terminal window
# Homebrew
brew install gh
# MacPorts
sudo port install gh
Terminal window
# winget
winget install --id GitHub.cli
# Chocolatey
choco install gh
# Scoop
scoop install gh
Terminal window
# Ubuntu/Debian
type -p curl >/dev/null || sudo apt install curl -y
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/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 gh
# Fedora
sudo dnf install gh
# Arch Linux
sudo pacman -S github-cli
Terminal window
# 認証(ブラウザが開く)
gh auth login
# 認証状況の確認
gh auth status
# 複数アカウントの管理
gh auth login --hostname github.company.com
gh auth switch
Terminal window
# リポジトリのクローン
gh repo clone owner/repo
# リポジトリの作成
gh repo create my-repo --public
gh repo create my-repo --private
gh repo create my-repo --template owner/template
# リポジトリの表示
gh repo view
gh repo view owner/repo --web # ブラウザで開く
# リポジトリの一覧
gh repo list
gh repo list owner --limit 20
# リポジトリのフォーク
gh repo fork owner/repo
gh repo fork owner/repo --clone
Terminal window
# Issue一覧
gh issue list
gh issue list --state open
gh issue list --assignee @me
gh issue list --label bug
# Issue作成
gh issue create
gh issue create --title "Bug report" --body "Description"
gh issue create --title "Bug" --label bug --assignee @me
# Issue表示
gh issue view 123
gh issue view 123 --web
# Issue編集
gh issue edit 123 --title "New title"
gh issue edit 123 --add-label enhancement
gh issue edit 123 --add-assignee user1
# Issueのクローズ/再開
gh issue close 123
gh issue reopen 123
# Issueへのコメント
gh issue comment 123 --body "Comment text"
Terminal window
# PR一覧
gh pr list
gh pr list --state merged
gh pr list --author @me
gh pr list --draft
# PR作成
gh pr create
gh pr create --title "Feature" --body "Description"
gh pr create --fill # コミットメッセージから自動入力
gh pr create --draft
gh pr create --base develop --head feature/auth
# PR表示
gh pr view 123
gh pr view 123 --web
gh pr view --comments
# PRのチェックアウト
gh pr checkout 123
# PRのマージ
gh pr merge 123
gh pr merge 123 --squash
gh pr merge 123 --rebase
gh pr merge 123 --auto --squash # 自動マージ有効化
# PRのレビュー
gh pr review 123 --approve
gh pr review 123 --request-changes --body "Please fix..."
gh pr review 123 --comment --body "Looks good!"
# PRの差分
gh pr diff 123
Terminal window
# ワークフロー一覧
gh workflow list
# ワークフロー実行履歴
gh run list
# 特定のワークフロー実行
gh workflow run deploy.yml
gh workflow run build.yml --ref feature-branch
gh workflow run deploy.yml -f environment=production
# 実行結果の確認
gh run view
gh run view 12345
gh run view 12345 --log
gh run watch 12345 # リアルタイム監視
# 実行の再実行
gh run rerun 12345
gh run rerun 12345 --failed # 失敗したジョブのみ
Terminal window
# リリース一覧
gh release list
# リリース作成
gh release create v1.0.0
gh release create v1.0.0 --title "Version 1.0.0" --notes "Release notes"
gh release create v1.0.0 --generate-notes
gh release create v1.0.0 ./dist/app-linux ./dist/app-macos
# リリース表示
gh release view v1.0.0
# アセットのダウンロード
gh release download v1.0.0
gh release download v1.0.0 --pattern "*.zip"
# リリース削除
gh release delete v1.0.0
Terminal window
# Gist一覧
gh gist list
# Gist作成
gh gist create script.py
gh gist create script.py --desc "Utility script"
gh gist create file1.js file2.js
# Gist表示
gh gist view <gist-id>
# Gist編集
gh gist edit <gist-id>
# Gist削除
gh gist delete <gist-id>
Terminal window
# Codespace一覧
gh codespace list
# Codespace作成
gh codespace create --repo owner/repo
gh codespace create --repo owner/repo --machine largePremiumLinux
# Codespaceに接続
gh codespace ssh -c <codespace-name>
gh codespace code -c <codespace-name>
# Codespace停止/削除
gh codespace stop -c <codespace-name>
gh codespace delete -c <codespace-name>
Terminal window
# GET リクエスト
gh api /repos/owner/repo
# POST リクエスト
gh api /repos/owner/repo/issues --method POST \
-f title="Issue title" \
-f body="Issue body"
# ページネーション
gh api /repos/owner/repo/issues --paginate
# JQでフィルタリング
gh api /repos/owner/repo/issues --jq '.[].title'
gh api /repos/owner/repo/contributors --jq '.[].login'
# 生のJSON出力
gh api /user --jq '.'
Terminal window
# GraphQLクエリ
gh api graphql -f query='
query {
viewer {
login
repositories(first: 10) {
nodes {
name
stargazerCount
}
}
}
}
'
# 変数を使ったクエリ
gh api graphql -f query='
query($owner: String!, $repo: String!) {
repository(owner: $owner, name: $repo) {
issues(first: 10, states: OPEN) {
nodes {
title
number
}
}
}
}
' -f owner=octocat -f repo=Hello-World
Terminal window
# エイリアスの作成
gh alias set co 'pr checkout'
gh alias set pv 'pr view --web'
gh alias set iv 'issue view --web'
# 引数付きエイリアス
gh alias set clone 'repo clone "$1"'
gh alias set myissues 'issue list --assignee @me'
# 複合コマンド
gh alias set pr-files 'pr view --json files --jq ".files[].path"'
# エイリアス一覧
gh alias list
# エイリアス削除
gh alias delete co
Terminal window
# ~/.config/gh/config.yml に記載される
# PR関連
gh alias set prc 'pr create --fill'
gh alias set prm 'pr merge --squash --delete-branch'
gh alias set prs 'pr status'
# Issue関連
gh alias set ic 'issue create'
gh alias set il 'issue list --assignee @me'
# ワークフロー関連
gh alias set runs 'run list --limit 5'
gh alias set watch 'run watch'
# ブラウザで開く
gh alias set web 'repo view --web'
gh alias set prweb 'pr view --web'
Terminal window
# 拡張機能の検索
gh extension search
# インストール
gh extension install github/gh-copilot
gh extension install dlvhdr/gh-dash
gh extension install mislav/gh-branch
# 一覧
gh extension list
# 更新
gh extension upgrade --all
# 削除
gh extension remove gh-copilot
拡張機能説明
github/gh-copilotCopilot in CLI
dlvhdr/gh-dashダッシュボード
mislav/gh-branchブランチ管理
seachicken/gh-poi古いブランチ削除
vilmibm/gh-screensaverスクリーンセーバー

~/.config/gh/config.yml
git_protocol: ssh
editor: vim
prompt: enabled
pager: less
aliases:
co: pr checkout
pv: pr view --web
hosts:
github.com:
user: your-username
oauth_token: ghp_xxxx
Terminal window
# Bash
eval "$(gh completion -s bash)"
# Zsh
eval "$(gh completion -s zsh)"
# Fish
gh completion -s fish | source
Terminal window
# Enterprise追加
gh auth login --hostname github.company.com
# アカウント切り替え
gh auth switch
# 特定ホストを指定
gh repo list --hostname github.company.com
#!/bin/bash
# 全PRのステータス確認
for repo in $(gh repo list --json name --jq '.[].name'); do
echo "=== $repo ==="
gh pr list --repo "owner/$repo" --state open
done
#!/bin/bash
# 古いブランチの削除
gh api /repos/owner/repo/branches --paginate --jq '
.[] | select(.name != "main" and .name != "develop") | .name
' | while read branch; do
echo "Delete: $branch"
gh api -X DELETE "/repos/owner/repo/git/refs/heads/$branch"
done

カテゴリ主要コマンド
リポジトリgh repo
Issuegh issue
PRgh pr
ワークフローgh run, gh workflow
リリースgh release
APIgh api
  1. エイリアス活用: よく使うコマンドを短縮
  2. シェル補完: Tab補完で効率アップ
  3. 拡張機能: 必要に応じて機能追加
  4. API直接アクセス: 複雑な操作も可能
  5. スクリプト化: 定型作業を自動化

よく使うコマンドチートシート

Section titled “よく使うコマンドチートシート”
Terminal window
# 日常的なワークフロー
gh pr create --fill # PR作成
gh pr checkout 123 # PRをチェックアウト
gh pr merge --squash # マージ
gh issue create # Issue作成
gh run watch # CI監視
# 確認系
gh pr status # 自分のPR状況
gh issue list --assignee @me # 自分のIssue
gh repo view --web # ブラウザで開く

次の章では、GitHub APIについて学びます。

Q1. GitHub CLIの認証を開始するコマンドはどれですか?

Q2. GitHub CLIでPRを作成してコミットメッセージから自動入力するオプションはどれですか?

Q3. GitHub CLIでREST APIを直接呼び出す方法はどれですか?