GitHub CLI徹底解説:便利なコマンドを紹介
はじめに:なぜ今、GitHub CLIなのか?
ソフトウェア開発において、GitHubはもはやインフラストラクチャとも呼べるほど中心的な存在です。日々の開発ワークフロー、コードレビュー、CI/CD、プロジェクト管理など、あらゆる側面でGitHubを利用しています。多くの開発者は、Webブラウザ上のGitHubインターフェースを利用していることでしょう。しかし、ローカルでの開発作業は、Gitコマンドラインツールやエディタ、IDEで行われることがほとんどです。
ここで課題となるのが、ローカルのコマンドライン作業とGitHubのWebインターフェースとの間のコンテキストスイッチです。プルリクエストの確認、Issueの作成、リポジトリのクローン、GitHub Actionsの実行状況確認など、GUIとCLIを行ったり来たりすることで、作業の流れが中断され、集中力が削がれることがあります。
GitHub CLI (gh
) は、このギャップを埋めるために生まれました。コマンドラインから直接、GitHubの様々な操作を行うことができる公式ツールです。Gitコマンドを補完し、よりスムーズで効率的なGitHubとの連携を実現します。
この記事では、GitHub CLI (gh
) の基本的な使い方から、リポジトリ、プルリクエスト、Issue、GitHub Actionsなど、主要な機能に関連する便利なコマンドまでを網羅的に解説します。約5000語を費やし、それぞれのコマンドの目的、使い方、豊富なオプション、具体的な使用例を詳しく見ていきます。この記事を読み終える頃には、GitHub CLIがあなたの開発ワークフローにいかに革命をもたらすか、実感していただけるでしょう。
さあ、GitHub CLIの世界へ深く潜り込み、その真価を徹底的に解き明かしましょう。
GitHub CLI (gh
) のインストール
まずは、GitHub CLIを利用するための第一歩、インストール方法から始めます。GitHub CLIは主要なオペレーティングシステム(macOS, Linux, Windows)に対応しており、様々な方法でインストールできます。
最新の正確なインストール方法は、公式ドキュメントを参照することを強く推奨しますが、ここでは一般的な方法を紹介します。
macOS
macOSでは、Homebrewを利用するのが最も簡単です。
bash
brew install gh
インストール後、以下のコマンドでバージョンを確認できます。
bash
gh --version
Linux
Linuxの場合、ディストリビューションによって推奨される方法が異なります。多くのディストリビューションでは、公式のリポジトリを追加してパッケージマネージャーでインストールする方法が推奨されています。
Debian/Ubuntu
bash
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 \
&& sudo chmod go+rb /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 -y
Fedora/CentOS/RHEL
bash
sudo dnf install 'dnf-command(config-manager)'
sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
sudo dnf install gh
他のLinuxディストリビューションや詳細については、公式ドキュメントを確認してください。
Windows
Windowsの場合、winget、Chocolatey、またはインストーラーを利用できます。
winget (Windows 10 1709以降)
powershell
winget install GitHub.cli
Chocolatey
powershell
choco install gh
MSIインストーラー
GitHub CLIのリリースぺージ(https://github.com/cli/cli/releases)から、最新版の.msi
ファイルをダウンロードして実行します。
インストールが完了したら、コマンドプロンプトまたはPowerShellを開き、gh --version
コマンドを実行してインストールが成功したか確認しましょう。
認証:GitHubアカウントへの接続
GitHub CLIをインストールしたら、次にGitHubアカウントに接続するための認証設定を行います。これは gh auth login
コマンドで行います。
bash
gh auth login
このコマンドを実行すると、いくつか質問が表示されます。
- GitHub.com or GitHub Enterprise?: 使用するGitHubの種類を選択します。多くの場合、
GitHub.com
を選択します。 - What is your preferred protocol for Git operations?: Git操作に使用するプロトコルを選択します。
HTTPS
またはSSH
を選べます。普段Gitで利用しているプロトコルを選択すると良いでしょう。HTTPS
: SSHキーの設定が不要ですが、場合によっては認証情報の管理が必要になります。GitHub CLIが認証ヘルパーとして機能します。SSH
: SSHキーの設定が必要です。一度設定すれば、パスフレーズの入力などもGitHub CLIが管理してくれます。
- Authenticate Git with your GitHub credentials?: Git操作(clone, push, pullなど)の認証にGitHub CLIの認証情報を使うか尋ねられます。
Yes
を選択すると、HTTPSプロトコルを選んだ場合にGitの認証情報ヘルパーとしてGitHub CLIが設定され、ユーザー名やパスワードの入力を省略できます。SSHの場合は、既存のSSHキーを利用する設定ができます。 - How would you like to authenticate gh?: ghコマンド自体の認証方法を選択します。
Login with a web browser
: ブラウザを開いてGitHubの認証ページにリダイレクトされる方法です。これが最も推奨される方法です。Paste an authentication token
: GitHubのSettingsから自分でPersonal Access Token (PAT) を生成し、それを貼り付ける方法です。自動化スクリプトなどで利用されることがあります。
通常は Login with a web browser
を選択し、ブラウザの指示に従って認証を完了させます。ブラウザが開き、GitHubの認証ページが表示されるので、そこでGitHub CLIに権限を付与します。認証が成功すると、コマンドラインに戻って設定が完了したことが表示されます。
認証が完了したかどうかは、gh auth status
コマンドで確認できます。
bash
gh auth status
これにより、どのGitHubホストにどのユーザーとして認証されているか、認証情報がどこに保存されているかなどが表示されます。
もし認証情報を更新したい場合や、別のユーザーでログインしたい場合は、gh auth login
を再度実行するか、gh auth refresh
コマンドを利用します。
bash
gh auth refresh # スコープなどを更新する場合
gh auth logout # 現在の認証情報を削除する場合
これで、GitHub CLIを使う準備が整いました。
GitHub CLIの基本概念とヘルプ
GitHub CLIのコマンドは、通常 gh <対象> <操作> [引数]
の形式をとります。例えば、リポジトリをリストするなら gh repo list
、プルリクエストを作成するなら gh pr create
となります。
ヘルプ機能
GitHub CLIは非常に親切なヘルプ機能を備えています。
- 全体ヘルプ:
gh --help
またはgh -h
で、利用可能な主要なコマンド群(gh repo
,gh pr
,gh issue
など)が表示されます。 - 特定のコマンド群のヘルプ:
gh <対象> --help
またはgh <対象> -h
で、その対象に関するコマンド(サブコマンド)のリストと説明が表示されます。例:gh pr --help
- 特定のコマンドのヘルプ:
gh <対象> <操作> --help
またはgh <対象> <操作> -h
で、その特定のコマンドの詳細な使い方、引数、オプション、使用例が表示されます。例:gh pr create --help
何か操作方法が分からなくなったときは、積極的にヘルプ機能を活用しましょう。
デフォルトリポジトリ
ほとんどの gh
コマンドは、現在のカレントディレクトリがGitリポジトリである場合、そのリポジトリを対象として操作を行います。例えば、~/my-project
ディレクトリが user/my-project
リポジトリのクローンである場合、そのディレクトリ内で gh pr list
を実行すると、user/my-project
リポジトリのプルリクエストが一覧表示されます。
カレントディレクトリがGitリポジトリでない場合、あるいは別のリポジトリを明示的に指定したい場合は、--repo
オプションを使用します。
bash
gh pr list --repo owner/repository-name
また、特定のディレクトリをデフォルトリポジトリとして設定することも可能です(ただしあまり一般的ではありません)。通常はカレントディレクトリを対象にする挙動で十分でしょう。
主要なコマンドを徹底解説
ここからは、GitHub CLIの核となる主要なコマンド群を、それぞれの機能や便利な使い方とともに詳しく解説していきます。
1. リポジトリ操作 (gh repo
)
リポジトリの作成、クローン、表示、管理などを行います。
gh repo create
:新しいリポジトリを作成する
GitHub上に新しいリポジトリを作成します。
bash
gh repo create [<name>] [--public|--private|--internal] [--source <path>] [--clone] [--push]
<name>
: 作成するリポジトリ名。省略した場合、現在のディレクトリ名が使われます。--public
,--private
,--internal
: リポジトリの公開範囲を指定します。デフォルトは対話形式で尋ねられます。--source <path>
: 指定したパスにあるローカルリポジトリを元に作成します。--clone
: リポジトリ作成後、ローカルにクローンします。--push
:--source
と--clone
を併用した場合、ローカルのコミットをプッシュします。
使用例:
- 対話形式でリポジトリを作成(公開・非公開などを聞かれます):
bash
gh repo create - 現在のディレクトリ名で新しいプライベートリポジトリを作成し、クローンする:
bash
gh repo create --private --clone my-new-project
という名前でパブリックリポジトリを作成する:
bash
gh repo create my-new-project --public- 既存のローカルリポジトリ
~/old-project
を元にmy-migrated-repo
という名前でプライベートリポジトリを作成し、クローンしてプッシュする:
bash
gh repo create my-migrated-repo --private --source ~/old-project --clone --push
gh repo clone
:リポジトリをクローンする
GitHub上のリポジトリをローカルにクローンします。git clone
とほぼ同じですが、GitHub CLIの認証を利用できる点が異なります。
bash
gh repo clone <repository> [<directory>] [-- <git-options>]
<repository>
: クローンするリポジトリ。owner/repository-name
の形式で指定します。<directory>
: クローン先のディレクトリ名。省略した場合、リポジトリ名が使われます。<git-options>
:git clone
に渡す追加オプションを指定できます。
使用例:
octocat/Spoon-Knife
リポジトリをクローンする:
bash
gh repo clone octocat/Spoon-Knifemy-user/my-repo
リポジトリを~/dev/my-special-repo
にクローンし、特定のブランチをチェックアウトする:
bash
gh repo clone my-user/my-repo ~/dev/my-special-repo -- -b feature-branch
gh repo fork
:リポジトリをフォークする
指定したリポジトリを自分のアカウントにフォークします。
bash
gh repo fork [<repository>] [--clone] [--remote-name <name>] [--default-branch-only]
<repository>
: フォークするリポジトリ。省略した場合、現在のリポジトリをフォークします。--clone
: フォーク後、ローカルにクローンします。--remote-name <name>
: クローンした場合の、元のリポジトリへのリモート名(デフォルトはupstream
)を指定します。--default-branch-only
: デフォルトブランチのみをフォーク・クローンします。
使用例:
- 現在のリポジトリをフォークしてクローンする:
bash
gh repo fork --clone octocat/Spoon-Knife
リポジトリをフォークし、クローン時のリモート名をorigin
とupstream
ではなくmain-repo
とmy-fork
のように設定する(詳細オプションは--help
で確認):
bash
gh repo fork octocat/Spoon-Knife --clone --remote-name upstream
gh repo list
:リポジトリ一覧を表示する
ユーザーまたは組織のリポジトリを一覧表示します。
bash
gh repo list [<owner>] [--limit <count>] [--language <lang>] [--topic <topic>] [--forks] [--source] [--no-archived] [--public|--private|--internal]
<owner>
: リポジトリを一覧表示したいユーザーまたは組織名を指定します。省略した場合、認証ユーザーのリポジトリが表示されます。--limit <count>
: 表示するリポジトリの最大数を指定します(デフォルトは30)。--language <lang>
: 指定した言語のリポジトリに絞り込みます。--topic <topic>
: 指定したトピックが設定されているリポジトリに絞り込みます。--forks
: フォークされたリポジトリを含めます。--source
: フォーク元リポジトリを含めます。--no-archived
: アーカイブされたリポジトリを除外します。--public
,--private
,--internal
: 指定した公開範囲のリポジトリに絞り込みます。
使用例:
- 自分のリポジトリを50件まで表示する:
bash
gh repo list --limit 50 github
組織のJavaScriptリポジトリを一覧表示する:
bash
gh repo list github --language javascript- 自分の持つ、
react
トピックが設定されたプライベートリポジトリを一覧表示する:
bash
gh repo list --private --topic react
その他の gh repo
コマンド
gh repo view [<repository>] [--branch <branch>] [--web]
: リポジトリ情報を表示したり、ブラウザで開いたりします。gh repo archive [<repository>]
: リポジトリをアーカイブします。gh repo rename <old-name> <new-name>
: リポジトリ名を変更します。gh repo delete [<repository>] [--confirm]
: リポジトリを削除します(注意して使用してください!)。
2. プルリクエスト操作 (gh pr
)
プルリクエスト (PR) の作成、一覧表示、確認、マージ、クローズなど、PRに関するあらゆる操作を行います。GitHub CLIの最も頻繁に利用される機能の一つです。
gh pr list
:プルリクエスト一覧を表示する
現在のリポジトリ、または指定したリポジトリのプルリクエストを一覧表示します。
bash
gh pr list [--state <state>] [--assignee <user>] [--author <user>] [--label <label>] [--search <query>] [--limit <count>] [--web]
--state <state>
: PRの状態を指定します (open
,closed
,all
)。デフォルトはopen
。--assignee <user>
: 指定したユーザーがアサインされているPRに絞り込みます。--author <user>
: 指定したユーザーが作成したPRに絞り込みます。--label <label>
: 指定したラベルが付いているPRに絞り込みます。複数指定可(カンマ区切り)。--search <query>
: GitHubの検索クエリ構文を使用してPRを検索します。--limit <count>
: 表示するPRの最大数を指定します(デフォルトは30)。--web
: ブラウザでPR一覧ページを開きます。
使用例:
- オープンなPRを一覧表示する:
bash
gh pr list - 自分がアサインされているクローズされたPRを一覧表示する:
bash
gh pr list --state closed --assignee @me bug
またはenhancement
ラベルが付いたオープンなPRを50件まで表示する:
bash
gh pr list --label bug,enhancement --limit 50- タイトルに “feat” を含むPRを検索する(検索クエリはGitHubのGUIと同じ構文):
bash
gh pr list --search "title:feat" - PR一覧をブラウザで開く:
bash
gh pr list --web
gh pr create
:新しいプルリクエストを作成する
現在のローカルブランチから、ベースブランチへの新しいプルリクエストを作成します。対話形式と非対話形式があります。
bash
gh pr create [--title <title>] [--body <body>|--body-file <file>] [--base <branch>] [--head <branch>] [--reviewer <user>] [--assignee <user>] [--label <label>] [--milestone <milestone>] [--project <project>] [--draft] [--fill] [--web]
--title <title>
: PRのタイトルを指定します。省略した場合、Gitのコミットメッセージから自動生成(--fill
使用時)されるか、対話形式で尋ねられます。--body <body>
: PRの本文を指定します。省略した場合、Gitのコミットメッセージから自動生成(--fill
使用時)されるか、対話形式で尋ねられます。--body-file <file>
: PRの本文をファイルから読み込みます。--base <branch>
: PRのベースブランチを指定します(例:main
,develop
)。省略した場合、リポジトリのデフォルトブランチになります。--head <branch>
: PRのヘッドブランチ(変更が含まれるブランチ)を指定します。通常は現在のローカルブランチが自動検出されます。--reviewer <user>
: レビュアーをアサインします(ユーザー名またはチーム名)。複数指定可。--assignee <user>
: アサインeeを指定します(ユーザー名)。複数指定可。--label <label>
: ラベルを指定します。複数指定可。--milestone <milestone>
: マイルストーンを指定します。--project <project>
: プロジェクトを指定します。--draft
: ドラフトPRとして作成します。--fill
: タイトルと本文をGitコミットメッセージから自動生成します(複数コミットの場合は対話形式に移行)。--web
: PRを作成後、ブラウザで開きます。
使用例:
- 対話形式でPRを作成する(最も一般的):
bash
gh pr create
タイトル、本文、レビュアーなどを順に聞かれます。 - 現在のブランチから
main
ブランチへのPRを、コミットメッセージから自動生成して作成する:
bash
gh pr create --base main --fill - タイトルと本文を明示的に指定し、特定のレビュアーとラベルを設定してPRを作成する:
bash
gh pr create --title "Fix: Login bug" --body "Details of the fix..." --reviewer octocat,monalisa --label bug,fix docs/update-readme
ブランチからmain
ブランチへのドラフトPRを作成し、ブラウザで開く:
bash
gh pr create --base main --head docs/update-readme --draft --web
gh pr view
:プルリクエストの詳細を表示する
指定したPRの詳細情報(タイトル、本文、差分、コメント、レビュー状況など)をコマンドラインに表示します。
bash
gh pr view [<number>|<url>|<branch>] [--repo <repository>] [--json <fields>] [--web]
<number>|<url>|<branch>
: 表示したいPRを、番号、URL、または関連するローカルブランチ名で指定します。省略した場合、現在のブランチに関連するPRが表示されます。--json <fields>
: PRの詳細情報をJSON形式で出力します。指定できるフィールドは--help
で確認できます(例:author,title,body,state,comments
)。これはスクリプトなどで情報を取得する際に非常に便利です。--web
: PRをブラウザで開きます。
使用例:
- 現在のブランチに関連するPRの詳細を表示する:
bash
gh pr view - PR番号
123
の詳細を表示する:
bash
gh pr view 123 https://github.com/octocat/Spoon-Knife/pull/123
のPR詳細を表示する:
bash
gh pr view https://github.com/octocat/Spoon-Knife/pull/123- PR番号
456
のタイトル、状態、本文、レビュー状況をJSONで取得する:
bash
gh pr view 456 --json title,state,body,reviews - PR番号
789
をブラウザで開く:
bash
gh pr view 789 --web
gh pr checkout
:プルリクエストのブランチをチェックアウトする
指定したPRのヘッドブランチをローカルにチェックアウトします。ローカルにそのブランチが存在しない場合は、リモートからフェッチして作成します。PRのレビューやテストを行う際に非常に便利です。
bash
gh pr checkout <number>|<url>|<branch> [--repo <repository>] [--force] [--detach]
<number>|<url>|<branch>
: チェックアウトしたいPRを、番号、URL、または関連するローカルブランチ名で指定します。--force
: ローカルの変更を破棄してチェックアウトします (git checkout --force
に相当)。--detach
: デタッチドHEADでチェックアウトします (git checkout <commit>
に相当)。
使用例:
- PR番号
123
のブランチをチェックアウトする:
bash
gh pr checkout 123 - PR番号
456
のブランチを、ローカルの変更を破棄して強制的にチェックアウトする:
bash
gh pr checkout 456 --force
gh pr merge
:プルリクエストをマージする
指定したPRをマージします。マージ方法(Merge, Squash, Rebase)を指定できます。
bash
gh pr merge [<number>|<url>|<branch>] [--repo <repository>] [--merge|--squash|--rebase] [--delete-branch] [--auto]
<number>|<url>|<branch>
: マージしたいPRを、番号、URL、または関連するローカルブランチ名で指定します。省略した場合、現在のブランチに関連するPRを対象とします。--merge
: マージコミットを作成してマージします(デフォルト)。--squash
: Squash mergeします。変更が単一の新しいコミットにまとめられます。--rebase
: Rebase mergeします。PRのコミットがベースブランチの先端にリベースされます。--delete-branch
: マージ成功後にヘッドブランチを削除します。--auto
: マージ可能になったら自動的にマージします(Auto-mergeを有効にします)。
使用例:
- 現在のブランチに関連するPRをマージする:
bash
gh pr merge - PR番号
123
をSquash mergeし、マージ後にブランチを削除する:
bash
gh pr merge 123 --squash --delete-branch - PR番号
456
に対してAuto-mergeを設定する:
bash
gh pr merge 456 --auto
gh pr close
:プルリクエストをクローズする
指定したPRをクローズします。
bash
gh pr close [<number>|<url>|<branch>] [--repo <repository>] [--delete-branch]
<number>|<url>|<branch>
: クローズしたいPRを、番号、URL、または関連するローカルブランチ名で指定します。省略した場合、現在のブランチに関連するPRを対象とします。--delete-branch
: クローズ後にヘッドブランチを削除します。
使用例:
- 現在のブランチに関連するPRをクローズする:
bash
gh pr close - PR番号
123
をクローズし、ブランチも削除する:
bash
gh pr close 123 --delete-branch
gh pr comment
:プルリクエストにコメントする
指定したPRにコメントを追加します。
bash
gh pr comment [<number>|<url>|<branch>] [--repo <repository>] [--body <body>|--body-file <file>]
<number>|<url>|<branch>
: コメントしたいPRを、番号、URL、または関連するローカルブランチ名で指定します。省略した場合、現在のブランチに関連するPRを対象とします。--body <body>
: コメント本文を指定します。省略した場合、対話形式で入力します。--body-file <file>
: コメント本文をファイルから読み込みます。
使用例:
- 現在のブランチに関連するPRにコメントする(対話形式):
bash
gh pr comment - PR番号
123
にテキストでコメントを追加する:
bash
gh pr comment 123 --body "Looks good to me!" - PR番号
456
にファイルの内容をコメントとして追加する:
bash
gh pr comment 456 --body-file review_notes.md
その他の gh pr
コマンド
gh pr diff [<number>|<url>|<branch>] [--repo <repository>]
: PRの変更内容(差分)を表示します。gh pr status [--repo <repository>]
: 認証ユーザーが関連する(作成した、アサインされた、レビュー依頼された)PRとIssueのサマリーを表示します。これはgh status
コマンドのエイリアスです。gh pr ready [<number>|<url>|<branch>] [--repo <repository>]
: ドラフトPRをレビュー可能な状態に変更します。gh pr reopen [<number>|<url>|<branch>] [--repo <repository>]
: クローズされたPRを再度開きます。
3. Issue操作 (gh issue
)
Issueの作成、一覧表示、確認、クローズなど、Issueに関する操作を行います。
gh issue list
:Issue一覧を表示する
現在のリポジトリ、または指定したリポジトリのIssueを一覧表示します。
bash
gh issue list [--state <state>] [--assignee <user>] [--author <user>] [--label <label>] [--search <query>] [--limit <count>] [--milestone <milestone>] [--project <project>] [--web]
オプションは gh pr list
と非常に似ています。
--state <state>
: Issueの状態を指定 (open
,closed
,all
)。デフォルトはopen
。--assignee <user>
: アサインeeで絞り込みます。--author <user>
: 作成者で絞り込みます。--label <label>
: ラベルで絞り込みます。--search <query>
: 検索クエリで絞り込みます。--limit <count>
: 表示数制限。--milestone <milestone>
: マイルストーンで絞り込みます。--project <project>
: プロジェクトで絞り込みます。--web
: ブラウザでIssue一覧ページを開きます。
使用例:
- オープンなIssueを一覧表示する:
bash
gh issue list - 自分にアサインされているオープンなIssueを一覧表示する:
bash
gh issue list --assignee @me bug
ラベルが付いたクローズされたIssueを一覧表示する:
bash
gh issue list --state closed --label bug
gh issue create
:新しいIssueを作成する
新しいIssueを作成します。対話形式と非対話形式があります。
bash
gh issue create [--title <title>] [--body <body>|--body-file <file>] [--assignee <user>] [--label <label>] [--milestone <milestone>] [--project <project>] [--web]
オプションは gh pr create
と非常に似ています。
--title <title>
: Issueのタイトル。省略した場合、対話形式で尋ねられます。--body <body>
: Issueの本文。省略した場合、対話形式で尋ねられます。--body-file <file>
: 本文をファイルから読み込みます。--assignee <user>
: アサインeeを指定します。--label <label>
: ラベルを指定します。--milestone <milestone>
: マイルストーンを指定します。--project <project>
: プロジェクトを指定します。--web
: Issue作成後、ブラウザで開きます。
使用例:
- 対話形式でIssueを作成する(最も一般的):
bash
gh issue create - タイトルと本文を指定してIssueを作成する:
bash
gh issue create --title "UI bug on profile page" --body "The 'Save' button is misaligned on mobile." - 特定のラベルとアサインeeを指定してIssueを作成する:
bash
gh issue create --title "Refactor user authentication" --body "..." --label enhancement,backend --assignee monalisa
gh issue view
:Issueの詳細を表示する
指定したIssueの詳細情報(タイトル、本文、コメントなど)をコマンドラインに表示します。
bash
gh issue view [<number>|<url>] [--repo <repository>] [--json <fields>] [--web]
オプションは gh pr view
と似ています。
<number>|<url>
: 表示したいIssueを、番号またはURLで指定します。省略した場合、現在のリポジトリのオープンなIssue一覧が表示されます(gh issue list
と似た挙動)。--json <fields>
: Issueの詳細情報をJSON形式で出力します。--web
: Issueをブラウザで開きます。
使用例:
- Issue番号
123
の詳細を表示する:
bash
gh issue view 123 - Issue番号
456
のタイトル、本文、状態をJSONで取得する:
bash
gh issue view 456 --json title,body,state - Issue番号
789
をブラウザで開く:
bash
gh issue view 789 --web
gh issue close
:Issueをクローズする
指定したIssueをクローズします。
bash
gh issue close <number>|<url> [--repo <repository>]
<number>|<url>
: クローズしたいIssueを、番号またはURLで指定します。
使用例:
- Issue番号
123
をクローズする:
bash
gh issue close 123
gh issue comment
:Issueにコメントする
指定したIssueにコメントを追加します。
bash
gh issue comment <number>|<url> [--repo <repository>] [--body <body>|--body-file <file>]
オプションは gh pr comment
と同じです。
<number>|<url>
: コメントしたいIssueを、番号またはURLで指定します。--body <body>
: コメント本文を指定します。省略した場合、対話形式で入力します。--body-file <file>
: コメント本文をファイルから読み込みます。
使用例:
- Issue番号
123
にコメントを追加する(対話形式):
bash
gh issue comment 123 - Issue番号
456
にテキストでコメントを追加する:
bash
gh issue comment 456 --body "Resolved by commit abcdefg."
その他の gh issue
コマンド
gh issue reopen <number>|<url> [--repo <repository>]
: クローズされたIssueを再度開きます。
4. リリース操作 (gh release
)
リポジトリのリリース(タグと関連付けられたバイナリ、ノートなど)を管理します。
gh release list
:リリース一覧を表示する
リポジトリのリリースを一覧表示します。
bash
gh release list [--repo <repository>] [--limit <count>]
--limit <count>
: 表示数制限。
使用例:
- 最新のリリースを一覧表示する:
bash
gh release list - リポジトリ
octocat/Spoon-Knife
のリリースを10件表示する:
bash
gh release list --repo octocat/Spoon-Knife --limit 10
gh release create
:新しいリリースを作成する
指定したタグに対して新しいリリースを作成します。
bash
gh release create <tag> [<files>...] [--repo <repository>] [--title <title>] [--notes <body>|--notes-file <file>] [--draft] [--prerelease] [--target <branch>] [--discussion-category <category>] [--generate-notes]
<tag>
: リリースを作成するGitタグ名。タグが存在しない場合は作成されます。<files>...
: リリースに添付するファイルを指定します。--title <title>
: リリースのタイトル。省略した場合、タグ名が使われます。--notes <body>
: リリースノートの本文を指定します。省略した場合、対話形式で入力するか、--generate-notes
を使用します。--notes-file <file>
: リリースノートの本文をファイルから読み込みます。--draft
: ドラフトリリースとして作成します。--prerelease
: プレリリースとして作成します。--target <branch>
: リリースを作成するターゲットブランチ(タグが指すコミットが含まれるブランチ)。省略した場合、デフォルトブランチになります。--discussion-category <category>
: ディスカッションを作成する場合のカテゴリを指定します。--generate-notes
: 直前のリリースからの差分に基づいてリリースノートを自動生成します。
使用例:
v1.0.0
タグに対して新しいリリースを作成し、対話形式でタイトルとノートを入力する:
bash
gh release create v1.0.0v1.1.0
タグに対してリリースを作成し、app.tar.gz
とchecksums.txt
を添付する:
bash
gh release create v1.1.0 app.tar.gz checksums.txtv2.0.0
タグに対して、自動生成されたリリースノートと指定したタイトルでプレリリースを作成する:
bash
gh release create v2.0.0 --title "Version 2.0.0 - Major Update" --generate-notes --prereleasev1.0.1
タグに対して、ファイルから読み込んだノートでドラフトリリースを作成する:
bash
gh release create v1.0.1 --notes-file release_notes_v1.0.1.md --draft
gh release download
:リリースアセットをダウンロードする
指定したリリースから添付されたアセットをダウンロードします。
bash
gh release download [<tag>] [<pattern>...] [--repo <repository>] [--dir <directory>] [--clobber]
<tag>
: アセットをダウンロードしたいリリースのタグ名。省略した場合、最新のリリースからダウンロードします。<pattern>...
: ダウンロードしたいアセットのファイル名パターンを指定します。省略した場合、全てのアセットをダウンロードします。--dir <directory>
: ダウンロード先ディレクトリを指定します(デフォルトはカレントディレクトリ)。--clobber
: 既存の同名ファイルを上書きします。
使用例:
- 最新リリースから全てのアセットをダウンロードする:
bash
gh release download v1.0.0
リリースから、ファイル名にlinux
を含むアセットをダウンロードする:
bash
gh release download v1.0.0 "*linux*"v2.0.0
リリースからapp.zip
を./downloads
ディレクトリにダウンロードする:
bash
gh release download v2.0.0 app.zip --dir ./downloads
gh release upload
:リリースにアセットをアップロードする
既存のリリースに新しいアセットをアップロードします。
bash
gh release upload <tag> <files>... [--repo <repository>] [--clobber]
<tag>
: アセットをアップロードしたいリリースのタグ名。<files>...
: アップロードしたいファイル(複数指定可)。--clobber
: 既存の同名アセットを上書きします。
使用例:
v1.0.0
リリースにupdate.patch
ファイルをアップロードする:
bash
gh release upload v1.0.0 update.patchv1.1.0
リリースに複数のアセットをアップロードし、既存ファイルを上書きする:
bash
gh release upload v1.1.0 new_app.tar.gz checksums.txt --clobber
その他の gh release
コマンド
gh release view [<tag>] [--repo <repository>] [--json <fields>] [--web]
: リリース情報を表示またはブラウザで開きます。gh release delete <tag> [--repo <repository>]
: 指定したリリースを削除します。
5. Gist操作 (gh gist
)
Gist(簡易的なコード共有機能)を操作します。
gh gist list
:Gist一覧を表示する
認証ユーザーのGistを一覧表示します。
bash
gh gist list [<user>] [--repo <repository>] [--limit <count>] [--public|--secret]
<user>
: 指定したユーザーのGistを一覧表示します。省略した場合、認証ユーザーのGistが表示されます。--limit <count>
: 表示数制限。--public
: 公開Gistのみを表示します。--secret
: Secret Gistのみを表示します。
使用例:
- 自分のGistを一覧表示する:
bash
gh gist list - 公開Gistを10件表示する:
bash
gh gist list --public --limit 10 - ユーザー
octocat
のGistを一覧表示する:
bash
gh gist list octocat
gh gist create
:新しいGistを作成する
新しいGistを作成します。標準入力またはファイルから内容を読み込めます。
bash
gh gist create [<files>...] [--repo <repository>] [--public|--secret] [--desc <description>]
<files>...
: Gistに含めるファイルを指定します。ファイル名を指定しない場合、標準入力から読み込みます。--public
: 公開Gistとして作成します。--secret
: Secret Gistとして作成します(デフォルト)。--desc <description>
: Gistの説明を指定します。省略した場合、対話形式で尋ねられます。
使用例:
- 標準入力の内容で新しいSecret Gistを作成する(対話形式で説明を入力):
bash
echo "Hello, Gist!" | gh gist create my_script.sh
ファイルを元に、説明付きのSecret Gistを作成する:
bash
gh gist create my_script.sh --desc "A simple script"- 複数のファイルを元に、公開Gistを作成する:
bash
gh gist create file1.txt file2.md --public
gh gist view
:Gistを表示する
指定したGistの内容を表示します。
bash
gh gist view <gist-id>|<url> [--repo <repository>] [--json <fields>] [--web]
<gist-id>|<url>
: 表示したいGistを、IDまたはURLで指定します。--json <fields>
: JSON形式で出力します。--web
: ブラウザで開きます。
使用例:
- 特定のIDのGistを表示する:
bash
gh gist view a1b2c3d4e5f6g7h8i9j0 - Gistをブラウザで開く:
bash
gh gist view https://gist.github.com/octocat/a1b2c3d4e5f6g7h8i9j0 --web
その他の gh gist
コマンド
gh gist edit <gist-id>|<url> [<files>...] [--repo <repository>] [--add <files>] [--delete <files>] [--desc <description>]
: Gistを編集します。gh gist delete <gist-id>|<url> [--repo <repository>]
: Gistを削除します。gh gist clone <gist-id>|<url> [<directory>] [--repo <repository>]
: Gistをローカルにクローンします。
6. GitHub Actions操作 (gh workflow
, gh run
)
GitHub Actionsのワークフローと実行(Run)を操作します。CI/CDの実行状況確認などに非常に便利です。
gh workflow list
:ワークフロー一覧を表示する
リポジトリで設定されているGitHub Actionsワークフローを一覧表示します。
bash
gh workflow list [--repo <repository>] [--limit <count>] [--all] [--json <fields>]
--all
: 有効/無効に関わらず全てのワークフローを表示します。--json <fields>
: JSON形式で出力します。
使用例:
- リポジトリのワークフローを一覧表示する:
bash
gh workflow list - 全てのワークフロー(有効・無効含む)をJSONで取得する:
bash
gh workflow list --all --json name,state
gh workflow view
:ワークフローの詳細を表示する
指定したワークフローのYAML定義などを表示します。
bash
gh workflow view <workflow> [--repo <repository>] [--json <fields>] [--web]
<workflow>
: ワークフローを指定します。ファイル名(例:ci.yml
)、名前(例:CI
)、またはIDで指定できます。
使用例:
ci.yml
ワークフローの定義を表示する:
bash
gh workflow view ci.yml- ワークフロー名
Build and Deploy
の定義をJSONで取得する:
bash
gh workflow view "Build and Deploy" --json name,state,path - ワークフローをブラウザで開く:
bash
gh workflow view 12345 --web
gh workflow run
:ワークフローを手動実行する
workflow_dispatch
トリガーが設定されているワークフローを手動で実行します。
bash
gh workflow run <workflow> [--repo <repository>] [--ref <branch>] [--field <key=value>]
<workflow>
: 実行したいワークフローをファイル名、名前、またはIDで指定します。--ref <branch>
: 実行するブランチやタグを指定します(デフォルトはデフォルトブランチ)。--field <key=value>
:inputs
に渡すパラメータを指定します(複数指定可)。
使用例:
- デフォルトブランチで
ci.yml
ワークフローを手動実行する:
bash
gh workflow run ci.yml develop
ブランチでワークフロー名Deploy to Staging
を手動実行し、パラメータを渡す:
bash
gh workflow run "Deploy to Staging" --ref develop --field environment=staging --field version=1.2.3
gh workflow enable
/ gh workflow disable
:ワークフローを有効化/無効化する
指定したワークフローを有効または無効にします。
bash
gh workflow enable <workflow> [--repo <repository>]
gh workflow disable <workflow> [--repo <repository>]
使用例:
ci.yml
ワークフローを無効にする:
bash
gh workflow disable ci.ymldeploy.yml
ワークフローを有効にする:
bash
gh workflow enable deploy.yml
gh run list
:ワークフロー実行一覧を表示する
リポジトリのワークフロー実行(Run)を一覧表示します。特定のワークフローやブランチで絞り込めます。
bash
gh run list [--repo <repository>] [--workflow <workflow>] [--branch <branch>] [--event <event>] [--status <status>] [--limit <count>] [--json <fields>]
--workflow <workflow>
: 指定したワークフローの実行に絞り込みます(ファイル名、名前、またはID)。--branch <branch>
: 指定したブランチの実行に絞り込みます。--event <event>
: 特定のイベント(例:push
,pull_request
,workflow_dispatch
)でトリガーされた実行に絞り込みます。--status <status>
: 実行ステータス(例:completed
,failure
,success
,queued
,in_progress
)で絞り込みます。--limit <count>
: 表示数制限。--json <fields>
: JSON形式で出力します。
使用例:
- 最新のワークフロー実行を一覧表示する:
bash
gh run list main
ブランチで失敗したワークフロー実行を一覧表示する:
bash
gh run list --branch main --status failureci.yml
ワークフローの直近の実行を30件表示する:
bash
gh run list --workflow ci.yml --limit 30- 最新の実行をJSONで取得し、IDとステータス、URLを表示する:
bash
gh run list --limit 1 --json databaseId,status,url
gh run view
:ワークフロー実行の詳細を表示する
指定したワークフロー実行の詳細(ジョブ、ログなど)を表示します。実行中のRunを監視するのに非常に便利です。
bash
gh run view [<run-id>|<url>] [--repo <repository>] [--check <name>] [--job <id>] [--log] [--log-failed] [--exit-code] [--json <fields>] [--live] [--web]
<run-id>|<url>
: 表示したい実行をIDまたはURLで指定します。省略した場合、最新の実行が表示されます。--log
: 全てのジョブのログを表示します。--log-failed
: 失敗したジョブのログのみを表示します。--live
: 実行が完了するまでログをストリーム表示します(ライブ監視)。--log
または--log-failed
と併用します。--exit-code
: 実行が成功すれば終了コード0、失敗すれば1で終了します。スクリプトに組み込む際に便利です。--json <fields>
: JSON形式で出力します。--web
: ブラウザで実行詳細ページを開きます。
使用例:
- 最新のワークフロー実行の詳細を表示する:
bash
gh run view - 実行ID
123456789
の失敗したジョブのログを表示する:
bash
gh run view 123456789 --log-failed - 最新の実行が完了するまでログをリアルタイム監視する:
bash
gh run view --live --log - 最新の実行が成功したか確認し、その結果に基づいて次の処理を行う(スクリプト向け):
bash
if gh run view --exit-code; then
echo "Workflow succeeded."
else
echo "Workflow failed."
fi - 実行ID
987654321
をブラウザで開く:
bash
gh run view 987654321 --web
gh run watch
:ワークフロー実行を監視する
指定したワークフロー実行のステータスを待ち、完了したらログを表示します。特に gh workflow run
で手動実行した後に便利です。
bash
gh run watch [<run-id>|<url>] [--repo <repository>] [--log] [--exit-code]
<run-id>|<url>
: 監視したい実行をIDまたはURLで指定します。省略した場合、最新の実行が監視されます。--log
: 完了後、全てのジョブのログを表示します。--exit-code
: 実行が成功すれば終了コード0、失敗すれば1で終了します。
使用例:
- 最新のワークフロー実行が完了するのを待つ:
bash
gh run watch gh workflow run ...
で開始した実行の完了を待ち、ログを表示する:
bash
gh workflow run ci.yml --ref main
gh run watch --log
その他の gh run
コマンド
gh run rerun [<run-id>|<url>] [--repo <repository>]
: 失敗したワークフロー実行を再実行します。gh run cancel [<run-id>|<url>] [--repo <repository>]
: 実行中のワークフロー実行をキャンセルします。gh run delete [<run-id>|<url>] [--repo <repository>]
: ワークフロー実行を削除します。
7. Codespaces操作 (gh codespace
)
GitHub Codespacesを操作します。Codespacesを利用している開発者にとって非常に強力な機能です。
gh codespace list
:Codespace一覧を表示する
自分のCodespaceを一覧表示します。
bash
gh codespace list [--repo <repository>] [--limit <count>] [--json <fields>]
--repo <repository>
: 特定のリポジトリに関連するCodespaceに絞り込みます。--limit <count>
: 表示数制限。--json <fields>
: JSON形式で出力します。
使用例:
- 自分のCodespaceを一覧表示する:
bash
gh codespace list - 特定のJSONフィールド(例:
name
,displayName
,state
,repository
)を取得する:
bash
gh codespace list --json name,displayName,state,repository
gh codespace create
:新しいCodespaceを作成する
新しいCodespaceを作成します。
bash
gh codespace create [--repo <repository>] [--branch <branch>] [--machine <machine-type>] [--git-status]
--repo <repository>
: Codespaceを作成するリポジトリ。省略した場合、現在のリポジトリ。--branch <branch>
: Codespaceの基となるブランチ(デフォルトはデフォルトブランチ)。--machine <machine-type>
: マシンタイプを指定します(例:basicLinux32Gh
)。利用可能なタイプはgh codespace create --help
で確認できます。--git-status
: 作成後、Codespace内でgit status
を実行します。
使用例:
- 現在のリポジトリのデフォルトブランチに新しいCodespaceを作成する:
bash
gh codespace create octocat/Spoon-Knife
リポジトリのfeature-branch
に、特定のマシンタイプでCodespaceを作成する:
bash
gh codespace create --repo octocat/Spoon-Knife --branch feature-branch --machine basicLinux32Gh
gh codespace open
:Codespaceをエディタで開く
既存のCodespaceをVS Codeなどのエディタで開きます。
bash
gh codespace open [<codespace-name>] [--repo <repository>] [--branch <branch>] [--codespace-url <url>] [--editor <editor>] [--json <fields>] [--web]
<codespace-name>
: 開きたいCodespace名。省略した場合、リストから選択できます。--editor <editor>
: 使用するエディタを指定します(例:vscode
,vscode-insiders
,vscodium
,neovim
)。デフォルトはVS Code。--web
: ブラウザ版のVS Code(VS Code for Web)で開きます。
使用例:
- Codespaceをリストから選択してVS Codeで開く:
bash
gh codespace open - 特定のCodespace名
my-codespace-name
をVS Codeで開く:
bash
gh codespace open my-codespace-name - 特定のCodespaceをブラウザで開く:
bash
gh codespace open my-codespace-name --web
gh codespace delete
:Codespaceを削除する
指定したCodespaceを削除します。
bash
gh codespace delete [<codespace-name>...] [--repo <repository>] [--branch <branch>] [--all] [--force]
<codespace-name>...
: 削除したいCodespace名を指定します。複数指定可。省略した場合、リストから選択できます。--all
: 全てのCodespaceを削除します(注意!)。--force
: 確認プロンプトなしで削除します(注意!)。
使用例:
- Codespaceをリストから選択して削除する:
bash
gh codespace delete - 特定のCodespace名
old-codespace-1
とold-codespace-2
を削除する:
bash
gh codespace delete old-codespace-1 old-codespace-2
gh codespace stop
/ gh codespace start
:Codespaceを停止/開始する
指定したCodespaceを停止または開始します。アイドル状態のCodespaceは課金対象になるため、停止はコスト管理に重要です。
bash
gh codespace stop [<codespace-name>...] [--repo <repository>] [--branch <branch>] [--all]
gh codespace start [<codespace-name>...] [--repo <repository>] [--branch <branch>]
オプションは gh codespace delete
に似ています。
使用例:
- 全てのCodespaceを停止する:
bash
gh codespace stop --all - 特定のCodespace名
my-dev-codespace
を開始する:
bash
gh codespace start my-dev-codespace
その他の gh codespace
コマンド
gh codespace ssh [<codespace-name>] [--repo <repository>] [--branch <branch>] [-- <ssh-options>]
: CodespaceにSSH接続します。gh codespace forward <local-port>:<remote-port> [<codespace-name>] [--repo <repository>] [--branch <branch>]
: Codespace内のポートをローカルに転送します。gh codespace logs [<codespace-name>] [--repo <repository>] [--branch <branch>]
: Codespaceの起動ログを表示します。
8. Secrets操作 (gh secret
)
リポジトリ、環境、組織レベルのSecretを管理します。GitHub Actionsなどで機密情報を安全に利用するために使われます。
Secretの値をコマンドラインで直接渡すのはセキュリティリスクがあるため、通常は標準入力やファイルから読み込みます。
gh secret list
:Secret一覧を表示する
リポジトリ、環境、または組織のSecretを一覧表示します。
bash
gh secret list [--repo <repository>] [--org <organization>] [--env <environment>] [--json <fields>]
--repo <repository>
: リポジトリのSecretを表示します。--org <organization>
: 組織のSecretを表示します。--env <environment>
: 環境のSecretを表示します(--repo
もしくは--org
と組み合わせて使用)。- 何も指定しない場合、カレントリポジトリのSecretを表示します。
使用例:
- 現在のリポジトリのSecretを一覧表示する:
bash
gh secret list - 組織
my-org
のSecretを一覧表示する:
bash
gh secret list --org my-org - 現在のリポジトリの
production
環境のSecretを一覧表示する:
bash
gh secret list --env production
gh secret set
:Secretを設定する
リポジトリ、環境、または組織に新しいSecretを設定したり、既存のSecretの値を更新したりします。Secretの値は標準入力から読み込むのが推奨です。
bash
gh secret set <secret-name> [--repo <repository>] [--org <organization>] [--env <environment>] [--body <body>|--body-file <file>] [--visibility <visibility>]
<secret-name>
: 設定/更新したいSecretの名前。--repo <repository>
/--org <organization>
/--env <environment>
: Secretを設定する対象(リポジトリ、組織、環境)を指定します。省略した場合、カレントリポジトリに設定されます。--body <body>
: Secretの値を直接指定します(非推奨)。--body-file <file>
: Secretの値をファイルから読み込みます。--visibility <visibility>
: 組織Secretの場合に可視性を設定します (all
,private
,selected
)。selected
の場合は--repos
オプションで対象リポジトリを指定する必要があります(詳細は--help
を参照)。
使用例:
- 現在のリポジトリに
API_KEY
という名前のSecretを設定する(値を標準入力から):
bash
echo "your_secret_api_key_value" | gh secret set API_KEY
または、対話形式で入力します。 - 現在のリポジトリの
production
環境にDB_PASSWORD
Secretを設定する(値をファイルから):
bash
gh secret set DB_PASSWORD --env production --body-file ~/secrets/db_pass.txt - 組織
my-org
にORG_TOKEN
Secretを設定する(値を標準入力から):
bash
echo "your_org_token" | gh secret set ORG_TOKEN --org my-org
gh secret delete
:Secretを削除する
リポジトリ、環境、または組織からSecretを削除します。
bash
gh secret delete <secret-name> [--repo <repository>] [--org <organization>] [--env <environment>]
<secret-name>
: 削除したいSecretの名前。--repo <repository>
/--org <organization>
/--env <environment>
: Secretを削除する対象を指定します。省略した場合、カレントリポジトリから削除されます。
使用例:
- 現在のリポジトリから
API_KEY
Secretを削除する:
bash
gh secret delete API_KEY - 現在のリポジトリの
staging
環境からDB_PASSWORD
Secretを削除する:
bash
gh secret delete DB_PASSWORD --env staging
9. Environments操作 (gh environment
)
GitHub ActionsのDeployment Environmentsを管理します。ワークフロー実行時の特定の環境(staging, productionなど)へのデプロイを保護するルール(承認者の設定や待機時間など)を定義します。
gh environment list
:環境一覧を表示する
リポジトリに設定されているデプロイ環境を一覧表示します。
bash
gh environment list [--repo <repository>] [--limit <count>] [--json <fields>]
使用例:
- 現在のリポジトリのデプロイ環境を一覧表示する:
bash
gh environment list
gh environment set
:環境を設定/更新する
リポジトリに新しいデプロイ環境を設定したり、既存の環境設定を更新したりします。承認者、待機時間、Secretなどを関連付けることができます。
bash
gh environment set <environment-name> [--repo <repository>] [--wait <seconds>] [--reviewers <users>] [--secret-access <visibility>] [--variable-access <visibility>]
<environment-name>
: 設定/更新したい環境名。--wait <seconds>
: 待機時間(秒)を設定します。--reviewers <users>
: 承認者を設定します(ユーザー名またはチーム名、複数指定可)。--secret-access <visibility>
: 環境Secretのアクセス権限を設定します (selected
またはall
)。selected
の場合はSecretを指定する必要があります。--variable-access <visibility>
: 環境Variableのアクセス権限を設定します (selected
またはall
)。selected
の場合はVariableを指定する必要があります。
使用例:
- 現在のリポジトリに
staging
環境を設定する:
bash
gh environment set staging production
環境を設定し、承認者をoctocat
とmonalisa
に設定する:
bash
gh environment set production --reviewers octocat,monalisa
gh environment delete
:環境を削除する
リポジトリからデプロイ環境を削除します。
bash
gh environment delete <environment-name> [--repo <repository>]
使用例:
- 現在のリポジトリから
staging
環境を削除する:
bash
gh environment delete staging
10. Variables操作 (gh variable
)
リポジトリ、環境、組織レベルのVariableを管理します。Secretほど機密ではないが、ハードコーディングしたくない設定値を保存するのに使われます。
gh variable list
:Variable一覧を表示する
リポジトリ、環境、または組織のVariableを一覧表示します。
bash
gh variable list [--repo <repository>] [--org <organization>] [--env <environment>] [--json <fields>]
オプションは gh secret list
と似ています。
使用例:
- 現在のリポジトリのVariableを一覧表示する:
bash
gh variable list - 組織
my-org
のVariableを一覧表示する:
bash
gh variable list --org my-org - 現在のリポジトリの
production
環境のVariableを一覧表示する:
bash
gh variable list --env production
gh variable set
:Variableを設定する
リポジトリ、環境、または組織に新しいVariableを設定したり、既存のVariableの値を更新したりします。Secretと同様、値は標準入力やファイルから読み込むのが推奨です。
bash
gh variable set <variable-name> [--repo <repository>] [--org <organization>] [--env <environment>] [--body <body>|--body-file <file>] [--visibility <visibility>]
オプションは gh secret set
と似ています。
使用例:
- 現在のリポジトリに
DEPLOY_TARGET
という名前のVariableを設定する(値を標準入力から):
bash
echo "production" | gh variable set DEPLOY_TARGET - 現在のリポジトリの
staging
環境にFEATURE_FLAG
Variableを設定する(値をファイルから):
bash
gh variable set FEATURE_FLAG --env staging --body-file feature_flag.txt
gh variable delete
:Variableを削除する
リポジトリ、環境、または組織からVariableを削除します。
bash
gh variable delete <variable-name> [--repo <repository>] [--org <organization>] [--env <environment>]
オプションは gh secret delete
と似ています。
使用例:
- 現在のリポジトリから
DEPLOY_TARGET
Variableを削除する:
bash
gh variable delete DEPLOY_TARGET
11. 認証管理 (gh auth
)
前述の gh auth login
など、認証に関するコマンド群です。
gh auth status [--hostname <hostname>]
: 認証状態を表示します。gh auth login [--hostname <hostname>] [--web|--token] [--git-protocol <protocol>] [--scopes <scope>]
: 認証を行います。gh auth logout [--hostname <hostname>] [--keep-local-token]
: ログアウトします。gh auth refresh [--hostname <hostname>] [--scopes <scope>]
: アクセストークンのスコープを更新します。
12. 設定管理 (gh config
)
GitHub CLIの様々な設定値を表示、設定、削除します。グローバルな設定や、ホスト(GitHub.comやGitHub Enterpriseインスタンス)ごとの設定が可能です。
bash
gh config [get|set|list|clear] [<key>] [<value>] [--host <hostname>]
get <key>
: 設定値を取得します。set <key> <value>
: 設定値を設定します。list
: 全ての設定値を一覧表示します。clear <key>
: 設定値を削除します。--host <hostname>
: 特定のホストの設定を操作します。
設定可能なキーの例:
git_protocol
: Git操作に使用するプロトコル(https
またはssh
)。prompt
: 対話型プロンプトの表示方法(enabled
またはdisabled
)。editor
: PR/Issue作成時の本文入力などに使用するエディタコマンド。pager
: コマンド出力のページャーコマンド。browser
:--web
オプションで使用するブラウザコマンド。
使用例:
- 全ての設定値を一覧表示する:
bash
gh config list git_protocol
の設定値を取得する:
bash
gh config get git_protocol- GitHub Enterpriseホスト
my.ghe.com
のgit_protocol
をssh
に設定する:
bash
gh config set git_protocol ssh --host my.ghe.com - デフォルトのエディタを
vim
に設定する:
bash
gh config set editor vim
13. エイリアス (gh alias
)
よく使うコマンドや、複数のコマンドを組み合わせた複雑な操作にショートカット(エイリアス)を設定できます。これはGitHub CLIの強力なカスタマイズ機能です。
bash
gh alias [set|list|delete] [<alias> [<expansion>]]
set <alias> <expansion>
: 新しいエイリアスを設定します。<alias>
はショートカット名、<expansion>
は置き換えたいコマンドです。<expansion>
は!
で開始すると、外部コマンドとして実行できます。list
: 設定されているエイリアスを一覧表示します。delete <alias>
: エイリアスを削除します。
使用例:
prl
というエイリアスをpr list
に設定する:
bash
gh alias set prl "pr list"
これでgh prl
と入力するだけでgh pr list
が実行されます。my-pr
というエイリアスをpr create --fill --base main --reviewer @me
に設定する:
bash
gh alias set my-pr "pr create --fill --base main --reviewer @me"
これでgh my-pr
と入力するだけで、コミットメッセージから自動生成し、main
ブランチをベースに、自分自身をレビュアーに指定したPRが作成できます。- Issue番号を指定して、そのIssueに関連するブランチをチェックアウトするエイリアスを設定する(
!
を使ってシェルのコマンドを実行):
bash
gh alias set checkout-issue '!f() { gh pr checkout $(gh issue view $1 --json number --jq .number); }; f'
これでgh checkout-issue 123
とすると、Issue 123に関連するPRを検索し、そのPRのブランチをチェックアウトします。少し複雑ですが、強力なエイリアスを作成できます。 - 設定されているエイリアスを一覧表示する:
bash
gh alias list
エイリアスは、あなたのワークフローをさらに効率化するための非常に有用な機能です。
14. 拡張機能 (gh extension
)
GitHub CLIは拡張機能をサポートしており、コミュニティによって開発された機能を追加したり、独自のコマンドを作成したりできます。拡張機能は通常 gh <extension-name>
の形式で実行されます。
bash
gh extension [install|list|upgrade|remove] [<name>]
install <name>
: 指定した名前(GitHubリポジトリ名)の拡張機能をインストールします。例えば、github/gh-label
というリポジトリにある拡張機能をインストールしたい場合はgh extension install github/gh-label
とします。list
: インストールされている拡張機能を一覧表示します。upgrade <name>
: 指定した拡張機能をアップグレードします。--all
ですべてをアップグレードできます。remove <name>
: 指定した拡張機能を削除します。
使用例:
gh-label
というラベル管理を強化する拡張機能をインストールする:
bash
gh extension install github/gh-label- インストールされている拡張機能を一覧表示する:
bash
gh extension list - 全ての拡張機能をアップグレードする:
bash
gh extension upgrade --all
15. その他の便利なコマンド
これまで紹介した主要なコマンド群以外にも、便利な単体コマンドがいくつかあります。
gh status
:ステータスを表示する
認証ユーザーに関連するオープンなPRとIssueのサマリーを表示します。gh pr status
と同じです。朝一番や作業開始時に自分の状況を把握するのに便利です。
bash
gh status [--repo <repository>]
使用例:
- 自分の関連するPRとIssueのステータスを確認する:
bash
gh status
gh browse
:ブラウザで開く
現在のリポジトリ、指定したリポジトリ、または指定したIssue/PRなどをWebブラウザで開きます。
bash
gh browse [<subpage>] [--repo <repository>] [--branch <branch>] [--commit <commit>] [--color <color>] [--no-color]
<subpage>
: 開きたいページのサブパスを指定します(例:issues
,pulls
,settings
,actions/runs
).--repo <repository>
: 開きたいリポジトリを指定します。--branch <branch>
: 指定したブランチで開きます。--commit <commit>
: 指定したコミットで開きます。
使用例:
- 現在のリポジトリをブラウザで開く:
bash
gh browse - 現在のリポジトリのIssue一覧ページをブラウザで開く:
bash
gh browse issues - 現在のリポジトリの
develop
ブランチをブラウザで開く:
bash
gh browse --branch develop octocat/Spoon-Knife
リポジトリのPR一覧ページをブラウザで開く:
bash
gh browse pulls --repo octocat/Spoon-Knife
gh api
:GitHub APIを呼び出す
任意のGitHub REST APIまたはGraphQL APIエンドポイントを呼び出すことができます。これはGitHub CLIの機能でカバーされていない高度な操作や、自動化スクリプトでAPIと直接連携したい場合に非常に強力です。
bash
gh api <endpoint> [--method <method>] [--header <header>] [-F <name=value>] [-f <name=value>] [-i] [-q <query>] [-X <method>]
<endpoint>
: 呼び出すAPIエンドポイント(例:/user/repos
,/repos/owner/repo/issues
).-X <method>
/--method <method>
: HTTPメソッド(例:GET
,POST
,PUT
,PATCH
,DELETE
)。-H <header>
/--header <header>
: HTTPヘッダーを追加します。-F <name=value>
: フォームデータ(multipart/form-data)を送信します。-f <name=value>
: フォームデータ(application/x-www-form-urlencoded)を送信します。-i
: レスポンスヘッダーを含めて表示します。-q <query>
: レスポンスのJSONデータをjq構文でフィルタリングします。
使用例:
- 認証ユーザーのリポジトリを一覧表示する(GET /user/repos):
bash
gh api user/repos - 特定のIssueにリアクションを追加する(POST /repos/{owner}/{repo}/issues/{issue_number}/reactions):
bash
gh api repos/octocat/Spoon-Knife/issues/123/reactions -X POST -f content=+1 - 最新リリースのタグ名をjqで抽出する:
bash
gh api repos/owner/repo/releases/latest -q '.tag_name'
gh api
コマンドは非常に柔軟で、GitHub APIドキュメントと組み合わせることで無限の可能性を秘めています。
gh repo set-default
:デフォルトリポジトリを設定する
カレントディレクトリがGitリポジトリでない場合に、特定のコマンドでデフォルトとして使用されるリポジトリを設定します。通常は必要ありませんが、特定のシナリオでは便利かもしれません。
bash
gh repo set-default <repository> [--local|--global]
GitHub CLIの活用例とメリット
ここまで多くのコマンドを見てきましたが、GitHub CLIを日常的に活用することでどのようなメリットがあるのでしょうか?
- コンテキストスイッチの削減: コマンドラインからGitHubの操作を完結できるため、WebブラウザとCLIを行き来する手間が省け、作業の中断が減ります。開発中のターミナルから離れることなく、PRの作成や確認、Issueの参照が可能です。
- スピードと効率: GUIでのクリック操作に比べて、コマンド入力は慣れればはるかに高速です。特に、複数のPRやIssueをまとめて操作したい場合、コマンド一つで実行できるのは大きなメリットです。
- 自動化とスクリプト:
gh
コマンドはシェルスクリプトなどから簡単に呼び出せます。PRやIssueの自動作成、リリースの自動化、GitHub Actionsの実行トリガーなど、開発ワークフローの自動化に不可欠なツールとなります。--json
オプションとjq
を組み合わせることで、APIのレスポンスを自在に処理し、高度なスクリプトを作成できます。 - Gitコマンドとの連携:
gh pr checkout
のように、GitコマンドとGitHub CLIのコマンドを自然に連携させて使うことができます。 - 一貫性のあるインターフェース: リポジトリ、PR、Issue、Gist、Actionsなど、GitHubの様々な機能に対して一貫したコマンドラインインターフェースを提供します。新しい機能が追加されても、同様のパターンで操作できることが期待できます。
- 拡張性: エイリアスや拡張機能を利用することで、自分自身の特定のニーズに合わせてツールをカスタマイズ・拡張できます。
より深い活用に向けて
この記事で紹介したのはGitHub CLIの機能の大部分ですが、さらに深く活用するためのヒントをいくつか紹介します。
- シェル補完: 多くのシェル(Bash, Zsh, Fishなど)でGitHub CLIのコマンド補完を設定できます。これにより、コマンド名やオプション、引数(リポジトリ名、ユーザー名、PR番号など)の入力を効率化できます。設定方法は
gh completion --help
を参照してください。 - パイプとリダイレクト:
gh
コマンドの出力は標準出力に出力されるため、他のコマンドとパイプで繋いだり、ファイルにリダイレクトしたりできます。特にgh <command> --json ...
の出力はjq
で処理するのに最適です。 - dotfilesでの管理: エイリアスの設定などは、
.gitconfig
や.config/gh/config.yml
に保存されます。これらのファイルをdotfilesとして管理することで、異なる環境間でも同じGitHub CLI設定を利用できます。 - GitHub APIドキュメントとの連携:
gh api
コマンドを利用する際は、GitHub REST APIおよびGraphQL APIの公式ドキュメントを参照しながら行うと効果的です。
まとめ
GitHub CLI (gh
) は、コマンドラインでの開発体験とGitHub上のリモート操作をシームレスに繋ぐための強力なツールです。リポジトリ管理、プルリクエスト、Issue、リリース、GitHub Actions、Codespaces、Secret、Variable、Gistなど、GitHubの主要な機能をコマンドラインから直接操作できるようになります。
この記事では、それぞれのコマンド群について、インストールと認証から始まり、一覧表示、作成、詳細表示、編集、削除といった基本的な操作から、便利なオプションや具体的な使用例まで、約5000語を費やして徹底的に解説しました。
GitHub CLIを使いこなすことで、開発ワークフローのコンテキストスイッチを減らし、作業を効率化し、自動化を推進することができます。特に、プルリクエストのレビューやIssueの管理、GitHub Actionsの実行状況確認といった日常的なタスクは、gh
コマンドを使うことで劇的にスムーズになるはずです。
この記事で紹介したコマンドや活用方法を参考に、ぜひあなたの開発環境にGitHub CLIを導入し、その恩恵を実感してみてください。最初は慣れないかもしれませんが、一度使い始めると、きっと手放せなくなるでしょう。
Happy Command Line-ing!