コンテンツにスキップ

第10章 GitHub CLI(gh コマンド)

GitHub CLI(gh は、ターミナルから GitHub の操作を行えるコマンドラインツールです。
ブラウザを開かずに PR の作成やレビュー、Issue の管理ができるので、
管理者の 日常業務を大幅に効率化 できます ⌨️


Terminal window
# macOS
brew install gh
# Windows
winget install GitHub.cli
# Linux (Debian/Ubuntu)
sudo apt install gh
# 認証(ブラウザで GitHub にログイン)
gh auth login
# 認証状態の確認
gh auth status
✓ Logged in to github.com as taro-yamada
✓ Git operations protocol: ssh
✓ Token: gho_****
✓ Token scopes: gist, read:org, repo, workflow

Terminal window
# リポジトリの一覧
gh repo list your-org --limit 20
# リポジトリの作成
gh repo create your-org/new-project --private --clone
# リポジトリの情報を表示
gh repo view your-org/web-app
# ブラウザでリポジトリを開く
gh repo view --web
# リポジトリをクローン
gh repo clone your-org/web-app
# リポジトリをフォーク
gh repo fork your-org/web-app

Terminal window
# PR の作成
gh pr create --title "feat: ログインページ追加" --body "## 概要<br>ログイン機能を実装"
# テンプレートを使って対話的に作成
gh pr create
# ドラフト PR を作成
gh pr create --draft
# PR の一覧
gh pr list
gh pr list --state open --label "bug"
# PR の詳細を表示
gh pr view 123
# ブラウザで PR を開く
gh pr view 123 --web
# PR をチェックアウト(ローカルでレビュー)
gh pr checkout 123
# PR のレビュー
gh pr review 123 --approve
gh pr review 123 --comment --body "LGTM!"
gh pr review 123 --request-changes --body "修正をお願いします"
# PR のマージ
gh pr merge 123 --squash --delete-branch
# PR の差分を表示
gh pr diff 123
flowchart LR
    A["gh pr create
PR を作成"] B["gh pr list
PR を一覧"] C["gh pr checkout
ローカルで確認"] D["gh pr review
レビュー"] E["gh pr merge
マージ"] A --> B --> C --> D --> E style A fill:#E8F5E9,stroke:#43A047,color:#1B5E20 style D fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style E fill:#F3E5F5,stroke:#8E24AA,color:#4A148C

Terminal window
# Issue の作成
gh issue create --title "[Bug] ログインできない" --label "bug,priority:high"
# テンプレートを使って対話的に作成
gh issue create
# Issue の一覧
gh issue list
gh issue list --label "bug" --assignee "@me"
# Issue の詳細
gh issue view 456
# Issue にコメント
gh issue comment 456 --body "再現確認しました"
# Issue のクローズ
gh issue close 456
# Issue をアサイン
gh issue edit 456 --add-assignee taro-yamada
# Issue にラベルを追加
gh issue edit 456 --add-label "status:in-progress"

gh run ─ Actions ワークフロー操作

Section titled “gh run ─ Actions ワークフロー操作”
Terminal window
# ワークフロー実行の一覧
gh run list
# 特定ワークフローの実行一覧
gh run list --workflow ci.yml
# 実行の詳細を表示
gh run view 123456
# 実行のログを表示
gh run view 123456 --log
# 失敗した実行のログだけ表示
gh run view 123456 --log-failed
# ワークフローを手動実行(workflow_dispatch)
gh workflow run deploy.yml -f environment=staging
# 失敗した実行を再実行
gh run rerun 123456
# 実行が完了するまで待機
gh run watch 123456

Terminal window
# リリースの作成
gh release create v1.2.0 --title "v1.2.0" --generate-notes
# ファイルを添付してリリース
gh release create v1.2.0 ./dist/app.zip ./dist/app.tar.gz
# ドラフトリリース
gh release create v1.2.0 --draft --generate-notes
# リリースの一覧
gh release list
# 最新リリースの情報
gh release view --latest

Terminal window
# GitHub のステータスを確認
gh status
# 通知の確認
gh notification list
# Gist の作成
gh gist create script.sh --public
# API を直接呼ぶ
gh api repos/your-org/web-app
# エイリアスの設定
gh alias set prc 'pr create --draft'
# 以降 gh prc で実行可能
# 拡張機能のインストール
gh extension install dlvhdr/gh-dash

管理者として、複数リポジトリに対する操作をスクリプト化すると便利です。

全リポジトリの Branch Protection 確認

Section titled “全リポジトリの Branch Protection 確認”
check-protection.sh
#!/bin/bash
ORG="your-org"
echo "📋 Branch Protection の確認"
echo "=========================="
gh repo list "$ORG" --limit 100 --json name -q '.[].name' | while read -r repo; do
echo ""
echo "🔍 $ORG/$repo"
gh api "repos/$ORG/$repo/branches/main/protection" 2>/dev/null \
&& echo " ✅ main ブランチは保護されています" \
|| echo " ⚠️ main ブランチが保護されていません"
done

マージ済みブランチの一括削除

Section titled “マージ済みブランチの一括削除”
cleanup-branches.sh
#!/bin/bash
echo "🧹 マージ済みブランチの削除"
# マージ済みのリモートブランチを一覧
BRANCHES=$(gh pr list --state merged --json headRefName -q '.[].headRefName' | sort -u)
for branch in $BRANCHES; do
if [ "$branch" != "main" ] && [ "$branch" != "develop" ]; then
echo " 🗑️ 削除: $branch"
git push origin --delete "$branch" 2>/dev/null
fi
done
echo "✅ 完了!"

全リポジトリの Dependabot Alert サマリー

Section titled “全リポジトリの Dependabot Alert サマリー”
dependabot-summary.sh
#!/bin/bash
ORG="your-org"
echo "🔒 Dependabot Alert サマリー"
echo "==========================="
gh repo list "$ORG" --limit 100 --json name -q '.[].name' | while read -r repo; do
COUNT=$(gh api "repos/$ORG/$repo/dependabot/alerts?state=open" \
-q 'length' 2>/dev/null || echo "N/A")
if [ "$COUNT" != "0" ] && [ "$COUNT" != "N/A" ]; then
echo " ⚠️ $repo: $COUNT 件のアラート"
fi
done

新メンバーのオンボーディング

Section titled “新メンバーのオンボーディング”
onboard-member.sh
#!/bin/bash
ORG="your-org"
USERNAME="$1"
TEAM="$2"
if [ -z "$USERNAME" ] || [ -z "$TEAM" ]; then
echo "Usage: ./onboard-member.sh <username> <team-slug>"
exit 1
fi
echo "👋 $USERNAME$TEAM に追加中..."
# Organization に招待
gh api -X PUT "orgs/$ORG/memberships/$USERNAME" \
-f role=member
# Team に追加
gh api -X PUT "orgs/$ORG/teams/$TEAM/memberships/$USERNAME" \
-f role=member
echo "$USERNAME$ORG/$TEAM に追加しました!"

カテゴリコマンド用途
認証gh auth loginログイン
リポジトリgh repo list一覧表示
gh repo create作成
gh repo cloneクローン
PRgh pr createPR 作成
gh pr list一覧表示
gh pr reviewレビュー
gh pr mergeマージ
gh pr checkoutローカルで確認
Issuegh issue createIssue 作成
gh issue list一覧表示
gh issue closeクローズ
Actionsgh run list実行一覧
gh run view --logログ表示
gh workflow run手動実行
リリースgh release createリリース作成
APIgh api <endpoint>API 直接呼び出し