GitHub CLI徹底解説:便利なコマンドを紹介


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

このコマンドを実行すると、いくつか質問が表示されます。

  1. GitHub.com or GitHub Enterprise?: 使用するGitHubの種類を選択します。多くの場合、GitHub.comを選択します。
  2. What is your preferred protocol for Git operations?: Git操作に使用するプロトコルを選択します。HTTPSまたはSSHを選べます。普段Gitで利用しているプロトコルを選択すると良いでしょう。
    • HTTPS: SSHキーの設定が不要ですが、場合によっては認証情報の管理が必要になります。GitHub CLIが認証ヘルパーとして機能します。
    • SSH: SSHキーの設定が必要です。一度設定すれば、パスフレーズの入力などもGitHub CLIが管理してくれます。
  3. Authenticate Git with your GitHub credentials?: Git操作(clone, push, pullなど)の認証にGitHub CLIの認証情報を使うか尋ねられます。Yesを選択すると、HTTPSプロトコルを選んだ場合にGitの認証情報ヘルパーとしてGitHub CLIが設定され、ユーザー名やパスワードの入力を省略できます。SSHの場合は、既存のSSHキーを利用する設定ができます。
  4. 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-Knife
  • my-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 リポジトリをフォークし、クローン時のリモート名を originupstream ではなく main-repomy-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.0
  • v1.1.0 タグに対してリリースを作成し、app.tar.gzchecksums.txt を添付する:
    bash
    gh release create v1.1.0 app.tar.gz checksums.txt
  • v2.0.0 タグに対して、自動生成されたリリースノートと指定したタイトルでプレリリースを作成する:
    bash
    gh release create v2.0.0 --title "Version 2.0.0 - Major Update" --generate-notes --prerelease
  • v1.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.patch
  • v1.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.yml
  • deploy.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 failure
  • ci.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-1old-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-orgORG_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 環境を設定し、承認者を octocatmonalisa に設定する:
    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.comgit_protocolssh に設定する:
    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を日常的に活用することでどのようなメリットがあるのでしょうか?

  1. コンテキストスイッチの削減: コマンドラインからGitHubの操作を完結できるため、WebブラウザとCLIを行き来する手間が省け、作業の中断が減ります。開発中のターミナルから離れることなく、PRの作成や確認、Issueの参照が可能です。
  2. スピードと効率: GUIでのクリック操作に比べて、コマンド入力は慣れればはるかに高速です。特に、複数のPRやIssueをまとめて操作したい場合、コマンド一つで実行できるのは大きなメリットです。
  3. 自動化とスクリプト: gh コマンドはシェルスクリプトなどから簡単に呼び出せます。PRやIssueの自動作成、リリースの自動化、GitHub Actionsの実行トリガーなど、開発ワークフローの自動化に不可欠なツールとなります。--json オプションと jq を組み合わせることで、APIのレスポンスを自在に処理し、高度なスクリプトを作成できます。
  4. Gitコマンドとの連携: gh pr checkout のように、GitコマンドとGitHub CLIのコマンドを自然に連携させて使うことができます。
  5. 一貫性のあるインターフェース: リポジトリ、PR、Issue、Gist、Actionsなど、GitHubの様々な機能に対して一貫したコマンドラインインターフェースを提供します。新しい機能が追加されても、同様のパターンで操作できることが期待できます。
  6. 拡張性: エイリアスや拡張機能を利用することで、自分自身の特定のニーズに合わせてツールをカスタマイズ・拡張できます。

より深い活用に向けて

この記事で紹介したのは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!


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール