GitHub Cliを使ってみた!



GitHub CLI
Take GitHub to the command line


$brew install gh


Work seamlessly with GitHub from the command line.

  gh <command> <subcommand> [flags]

  auth:        Authenticate gh and git with GitHub
  browse:      Open the repository in the browser
  codespace:   Connect to and manage codespaces
  gist:        Manage gists
  issue:       Manage issues
  org:         Manage organizations
  pr:          Manage pull requests
  project:     Work with GitHub Projects.
  release:     Manage releases
  repo:        Manage repositories

  cache:       Manage Github Actions caches
  run:         View details about workflow runs
  workflow:    View details about GitHub Actions workflows

  co:          Alias for "pr checkout"

  alias:       Create command shortcuts
  api:         Make an authenticated GitHub API request
  completion:  Generate shell completion scripts
  config:      Manage configuration for gh
  extension:   Manage gh extensions
  gpg-key:     Manage GPG keys
  label:       Manage labels
  ruleset:     View info about repo rulesets
  search:      Search for repositories, issues, and pull requests
  secret:      Manage GitHub secrets
  ssh-key:     Manage SSH keys
  status:      Print information about relevant issues, pull requests, and notifications across repositories
  variable:    Manage GitHub Actions variables

  actions:     Learn about working with GitHub Actions
  environment: Environment variables that can be used with gh
  exit-codes:  Exit codes used by gh
  formatting:  Formatting options for JSON data exported from gh
  mintty:      Information about using gh with MinTTY
  reference:   A comprehensive reference of all gh commands

  --help      Show help for command
  --version   Show gh version

  $ gh issue create
  $ gh repo clone cli/cli
  $ gh pr checkout 321

  Use 'gh <command> <subcommand> --help' for more information about a command.
  Read the manual at <>

gh auth login


$gh auth login
? What account do you want to log into?
? What is your preferred protocol for Git operations? SSH
? Upload your SSH public key to your GitHub account? /Users/XXXX/.ssh/
? Title for your SSH key: public_key
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: XXXX-XXXX
Press Enter to open in your browser...
✓ Authentication complete.
- gh config set -h git_protocol ssh
✓ Configured git protocol
✓ SSH key already existed on your GitHub account: /Users/XXXX/.ssh/
✓ Logged in as XXXX

gh status


$gh status
Assigned Issues                             │ Assigned Pull Requests
Nothing here ^_^                            │ Nothing here ^_^
Review Requests                             │ Mentions
Nothing here ^_^                            │ Nothing here ^_^
Repository Activity
Nothing here ^_^

gh run

Github ActionsをCliで操作できる

  • キャンセル
  • 削除
  • ダウンロード
  • 実行履歴を表示
  • 再実行
  • 実行サマリーの表示
  • 実行の監視
$gh run
List, view, and watch recent workflow runs from GitHub Actions.

  gh run <command> [flags]

  cancel:      Cancel a workflow run
  delete:      Delete a workflow run
  download:    Download artifacts generated by a workflow run
  list:        List recent workflow runs
  rerun:       Rerun a run
  view:        View a summary of a workflow run
  watch:       Watch a run until it completes, showing its progress

  -R, --repo [HOST/]OWNER/REPO   Select another repository using the [HOST/]OWNER/REPO format

  --help   Show help for command

  Use 'gh <command> <subcommand> --help' for more information about a command.
  Read the manual at <>

gh api

Github APIを呼び出すコマンド


$gh api --help
Makes an authenticated HTTP request to the GitHub API and prints the response.

The endpoint argument should either be a path of a GitHub API v3 endpoint, or
"graphql" to access the GitHub API v4.

Placeholder values "{owner}", "{repo}", and "{branch}" in the endpoint
argument will get replaced with values from the repository of the current
directory or the repository specified in the GH_REPO environment variable.
Note that in some shells, for example PowerShell, you may need to enclose
any value that contains "{...}" in quotes to prevent the shell from
applying special meaning to curly braces.

The default HTTP request method is "GET" normally and "POST" if any parameters
were added. Override the method with `--method`.

Pass one or more `-f/--raw-field` values in "key=value" format to add static string
parameters to the request payload. To add non-string or placeholder-determined values, see
`--field` below. Note that adding request parameters will automatically switch the
request method to POST. To send the parameters as a GET query string instead, use
`--method GET`.

The `-F/--field` flag has magic type conversion based on the format of the value:

- literal values "true", "false", "null", and integer numbers get converted to
  appropriate JSON types;
- placeholder values "{owner}", "{repo}", and "{branch}" get populated with values
  from the repository of the current directory;
- if the value starts with "@", the rest of the value is interpreted as a
  filename to read the value from. Pass "-" to read from standard input.

For GraphQL requests, all fields other than "query" and "operationName" are
interpreted as GraphQL variables.

To pass nested parameters in the request payload, use "key[subkey]=value" syntax when
declaring fields. To pass nested values as arrays, declare multiple fields with the
syntax "key[]=value1", "key[]=value2". To pass an empty array, use "key[]" without a

To pass pre-constructed JSON or payloads in other formats, a request body may be read
from file specified by `--input`. Use "-" to read from standard input. When passing the
request body this way, any parameters specified via field flags are added to the query
string of the endpoint URL.

In `--paginate` mode, all pages of results will sequentially be requested until
there are no more pages of results. For GraphQL requests, this requires that the
original query accepts an `$endCursor: String` variable and that it fetches the
`pageInfo{ hasNextPage, endCursor }` set of fields from a collection.

For more information about output formatting flags, see `gh help formatting`.

  gh api <endpoint> [flags]

      --cache duration        Cache the response, e.g. "3600s", "60m", "1h"
  -F, --field key=value       Add a typed parameter in key=value format
  -H, --header key:value      Add a HTTP request header in key:value format
      --hostname string       The GitHub hostname for the request (default "")
  -i, --include               Include HTTP response status line and headers in the output
      --input file            The file to use as body for the HTTP request (use "-" to read from standard input)
  -q, --jq string             Query to select values from the response using jq syntax
  -X, --method string         The HTTP method for the request (default "GET")
      --paginate              Make additional HTTP requests to fetch all pages of results
  -p, --preview names         GitHub API preview names to request (without the "-preview" suffix)
  -f, --raw-field key=value   Add a string parameter in key=value format
      --silent                Do not print the response body
  -t, --template string       Format JSON output using a Go template; see "gh help formatting"
      --verbose               Include full HTTP request and response in the output

  --help   Show help for command

  # list releases in the current repository
  $ gh api repos/{owner}/{repo}/releases

  # post an issue comment
  $ gh api repos/{owner}/{repo}/issues/123/comments -f body='Hi from CLI'

  # post nested parameter read from a file
  $ gh api gists -F 'files[myfile.txt][content]=@myfile.txt'

  # add parameters to a GET request
  $ gh api -X GET search/issues -f q='repo:cli/cli is:open remote'

  # set a custom HTTP header
  $ gh api -H 'Accept: application/vnd.github.v3.raw+json' ...

  # opt into GitHub API previews
  $ gh api --preview baptiste,nebula ...

  # print only specific fields from the response
  $ gh api repos/{owner}/{repo}/issues --jq '.[].title'

  # use a template for the output
  $ gh api repos/{owner}/{repo}/issues --template \\
    '{{range .}}{{.title}} ({{.labels | pluck "name" | join ", " | color "yellow"}}){{"\\n"}}{{end}}'

  # list releases with GraphQL
  $ gh api graphql -F owner='{owner}' -F name='{repo}' -f query='
    query($name: String!, $owner: String!) {
      repository(owner: $owner, name: $name) {
        releases(last: 3) {
          nodes { tagName }