search
LoginSignup
53

More than 1 year has passed since last update.

posted at

updated at

GitHub CLI 1.0 主要コマンドのサブコマンド、オプションまとめ

GitHub CLI 1.0の主要コマンドのサブコマンド、オプションまとめ

ついにGitHub CLI 1.0が登場しましたね。🎉

ソースコード、ドキュメントはこちらから
👉https://github.com/cli/cli
👉https://cli.github.com/

GitHub CLIは、go言語製のGitHub公式のCLIツールです。(既存のGitHubのCLIツールとして有名なのはhubらしいですね)

従来はcommitなどの作業はターミナルで行うが、PRの作成などはブラウザを開いて行う必要がありました。
ターミナル→ブラウザ→ターミナル...みたいに頻繁にアプリを切り替える必要があり、個人的にはこのタイミングでコンテキストスイッチによって集中力が途切れがちでした。GitHubを開くためにブラウザ開いたのに、YouTubeのタブが開いていてそのまま...なんてことはよくありますよね...?GitHub CLIを利用すればこの切り替えの手間がなくなり、快適なGitHubライフを送ることができるというわけなんですね。

2020年2月頃にβ版がリリースされていたのですが、2020年9月にβ版が終了してGitHub CLI 1.0としてリリースされました。
β版では対応していなかったGitHub Enterprise Serverも利用できるようになったみたいですね😊

これをきっかけにGitHubCLIを使ってみようと少し触ってみたので、学んだことを共有します!
今回紹介するのは最低限の環境構築(認証、エディタの設定)とGitHubCLIの主要なコマンド gist, issue, pr, release, repoとそのサブコマンド、およびそれらの全フラグですが、その他コマンドaliasapiなども随時更新、追加していく予定です。

検証環境

Mac OS X

現在MacOS, Windows, Linuxに対応しています。

install

当方macOSなのでbrewでinstallします。

$ brew install gh

versionを確認

🎉🎉

$ gh --version
gh version 1.0.0 (2020-09-16)
https://github.com/cli/cli/releases/tag/v1.0.0

環境構築

認証

まずはGitHubアカウントの設定を行いましょう。

$ gh auth login

対話形式で設定できるみたいですね。まずはGitHub.comを利用するかGitHub Enterprise Serverを利用するか選択します。今回はGithub.comを利用します。

? What account do you want to log into?  [Use arrows to move, type to filter]
> GitHub.com
  GitHub Enterprise Server

ログインの方法を選択します。今回はブラウザを利用しました。

? How would you like to authenticate?  [Use arrows to move, type to filter]
> Login with a web browser
  Paste an authentication token
? How would you like to authenticate? Login with a web browser

! First copy your one-time code: 0062-4F62
- Press Enter to open github.com in your browser...

表示されたone-time codeをブラウザに入力してください。

スクリーンショット 2020-09-19 22.27.20.png

ブラウザの表示に従ってぽちぽちしていきます。

スクリーンショット 2020-09-21 0.38.12.png

スクリーンショット 2020-09-19 22.28.24.png

スクリーンショット 2020-09-19 22.28.39.png

次にプロトコルを選択します。HTTPSSSHを選択します。

✓ Authentication complete. Press Enter to continue...

? Choose default git protocol  [Use arrows to move, type to filter]
  HTTPS
> SSH

これで認証の設定は完了しました。

? Choose default git protocol SSH
- gh config set -h github.com git_protocol ssh
✓ Configured git protocol
✓ Logged in as JIIOryo

エディタの設定

PRやissueを書く時などのエディタを設定します。今回はvimを設定しました。

$ gh config set editor vim

ちなみに公式ドキュメントによれば現状Windowsでは常にメモ帳らしい。

On Windows, the editor will currently always be Notepad.

コマンド

ghコマンドは、基本的にgh <command> <subcommand> [flags]で実行します。commandとして利用できるのは、CORE COMMANDSADDITIONAL COMMANDSです。

よく利用するCORE COMMANDSには以下の5種類があります。

CORE COMMANDS
  gist:       Create gists
  issue:      Manage issues
  pr:         Manage pull requests
  release:    Manage GitHub releases
  repo:       Create, clone, fork, and view repositories

例えば、PRやissueを新規作成したい場合はそれぞれ以下のように実行します。

$ gh pr create
$ gh issue create

コマンドの実行は、フラグを指定しない場合はだいたい以下のように対話形式で進めます。

$ gh pr create
? Where should we push the 'feature/hoge' branch? JIIOryo/gh_test

Creating pull request for feature/hoge into master in JIIOryo/gh_test

? Title add HOGE
? Body <Received>
? What's next? Add metadata
? What would you like to add?  [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
  [ ]  Reviewers
> [x]  Assignees
  [ ]  Labels
  [ ]  Projects
  [ ]  Milestone

フラグを指定することでコマンド一発で実行することもできます。

$ gh issue create --title 'foo' --body 'bar' --milestone 'baz'

これらのコマンドの使い方は後ほどそれぞれ説明します。

ADDITIONAL COMMANDSには以下の6種類があります。

ADDITIONAL COMMANDS
  alias:      Create command shortcuts
  api:        Make an authenticated GitHub API request
  auth:       Login, logout, and refresh your authentication
  completion: Generate shell completion scripts
  config:     Manage configuration for gh
  help:       Help about any command

今回はとりあえずCORE COMMANDSだけ紹介します。
随時ADDITIONAL COMMANDSも追加、更新していく予定です。

ちなみにコマンドによって使えるフラグが異なりますが、だいたいのコマンドで以下のフラグは使用できます。

INHERITED FLAGS
      --help              Show help for command
  -R, --repo OWNER/REPO   Select another repository using the OWNER/REPO format

コマンドを忘れて困ったら、とりあえずghもしくはgh --help, gh -hを叩けば利用できるコマンドの一覧が取得できます。

$ gh repo clone -h
Clone a GitHub repository locally.

If the "OWNER/" portion of the "OWNER/REPO" repository argument is omitted, it
defaults to the name of the authenticating user.

Pass additional 'git clone' flags by listing them after '--'.


USAGE
  gh repo clone <repository> [<directory>] [-- <gitflags>...]

INHERITED FLAGS
  --help   Show help for command

LEARN MORE
  Use 'gh <command> <subcommand> --help' for more information about a command.
  Read the manual at https://cli.github.com/manual

🍎🍎 gh repoコマンド 🍎🍎

gh repoコマンドは、リポジトリの作成やclone、forkなどのリポジトリ関連の操作を行うことができます。

gh repo <command> [flags]で実行し、<command>には以下の4つが利用できます。

clone:      Clone a repository locally
create:     Create a new repository
fork:       Create a fork of a repository
view:       View a repository

🍀🍀 gh repo clone 🍀🍀

gh repo cloneは、リポジトリのcloneを行うことができます。

gh repo clone <repository> [<directory>] [-- <gitflags>...]で実行します。

$ gh repo clone cli/cli

Cloning into 'cli'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 13758 (delta 9), reused 11 (delta 3), pack-reused 13737
Receiving objects: 100% (13758/13758), 32.50 MiB | 4.07 MiB/s, done.
Resolving deltas: 100% (9177/9177), done.

リポジトリの後ろにcloneしたいパスを指定することもできます。

$ gh repo clone cli/cli path/to/repos
Cloning into 'path/to/repos'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 13758 (delta 9), reused 11 (delta 3), pack-reused 13737
Receiving objects: 100% (13758/13758), 32.50 MiB | 3.77 MiB/s, done.
Resolving deltas: 100% (9174/9174), done.

$ ls !$
ls path/to/repos
LICENSE   README.md auth      command   docs      go.mod    internal  script    update    wix.json
Makefile  api       cmd       context   git       go.sum    pkg       test      utils

🍀🍀 gh repo create 🍀🍀

gh repo createは、リポジトリの新規作成を行うことができるコマンドです。

gh repo create [<name>] [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-y --confirm 確認なし
-d --description リポジトリの説明を追加
--enable-issues issueを有効にするか(デフォルトtrue)
--enable-wiki wikiを有効にするか(デフォルトtrue)
-h --homepage ホームページURL
--internal リポジトリをinternalで作成するか
--private リポジトリをprivateで作成するか
--private リポジトリをpublicで作成するか
-t --team アクセスできるorganizationチーム
-p --template テンプレートリポジトリから作成

対話形式で作成

fooというリポジトリを作ってみましょう。
以下の質問がされます。

  1. Visibility(publicなのかprivateなのかとか)どうする?
  2. currentディレクトリに作って良い?(Noを指定するとリポジトリ作らない。yesならこの時点でGitHub上に作成される)
  3. ローカルプロジェクトディレクトリをつくる?(Noを指定するとローカルのカレントディレクトリには作られない)
$ gh repo create foo
? Visibility Public
? This will create 'foo' in your current directory. Continue?  Yes
✓ Created repository JIIOryo/foo on GitHub
? Create a local project directory for JIIOryo/foo? Yes
Initialized empty Git repository in /path/to/repos/foo/.git/
✓ Initialized repository in './foo/'

ローカルプロジェクトディレクトリを作るを選択すると、ローカルにディレクトリを作成してgit initをしてくれてるっぽい。
https://github.com/cli/cli/blob/b2e36a0979a06b94bf364552a856c166cd415234/pkg/cmd/repo/create/create.go#L291

コマンド一発で作成

例えば、hoge-repoリポジトリを公開で説明付きで作成したい場合...

$ gh repo create hoge-repo -y -d 'This is description!' --public

✓ Created repository JIIOryo/hoge-repo on GitHub
Initialized empty Git repository in /path/to/repos/hoge-repo/.git/
✓ Initialized repository in './hoge-repo/'

こんな感じにリポジトリが一発で作成されました😲

スクリーンショット 2020-09-20 2.46.11.png

🍀🍀 gh repo fork 🍀🍀

gh repo forkコマンドは、リポジトリのforkの新規作成を行うことができます。

gh repo fork [<repository>] [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
--clone cloneするかどうか
--remote リモートを設定するか

対話形式でforkしてみます。(cloneするかどうか聞かれる)

$ gh repo fork cli/cli

- Forking cli/cli...
✓ Created fork JIIOryo/cli
? Would you like to clone the fork? Yes

Cloning into 'cli'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 13758 (delta 9), reused 11 (delta 3), pack-reused 13737
Receiving objects: 100% (13758/13758), 32.50 MiB | 3.77 MiB/s, done.
Resolving deltas: 100% (9174/9174), done.
Updating upstream
From github.com:cli/cli
 * [new branch]      auth-check              -> upstream/auth-check
 * [new branch]      branch-switcher         -> upstream/branch-switcher
 * [new branch]      bulk-cmd                -> upstream/bulk-cmd
 * [new branch]      custom-commands         -> upstream/custom-commands
 * [new branch]      debians                 -> upstream/debians
 * [new branch]      default-cfg             -> upstream/default-cfg
 * [new branch]      fix-query               -> upstream/fix-query
 * [new branch]      ghe-conditional-request -> upstream/ghe-conditional-request
 * [new branch]      gist-list               -> upstream/gist-list
 * [new branch]      linux-repos             -> upstream/linux-repos
 * [new branch]      migrate-repo-clone      -> upstream/migrate-repo-clone
 * [new branch]      more-gists              -> upstream/more-gists
 * [new branch]      multi-graphql           -> upstream/multi-graphql
 * [new branch]      pager-docs              -> upstream/pager-docs
 * [new branch]      patch-review-prototype  -> upstream/patch-review-prototype
 * [new branch]      relective-pr-lookup     -> upstream/relective-pr-lookup
 * [new branch]      run-checks              -> upstream/run-checks
 * [new branch]      search-cmd              -> upstream/search-cmd
 * [new branch]      the-newlygit-game       -> upstream/the-newlygit-game
 * [new branch]      trunk                   -> upstream/trunk
 * [new branch]      ubuntus                 -> upstream/ubuntus
 * [new branch]      web-flag                -> upstream/web-flag
✓ Cloned fork

$ ls cli

LICENSE   api       command   git       internal  test      wix.json
Makefile  auth      context   go.mod    pkg       update
README.md cmd       docs      go.sum    script    utils

🍀🍀 gh repo view 🍀🍀

gh repo viewコマンドは、リポジトリのdescriptionとREADMEを参照することができます。

gh repo view [<repository>] [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-w --web ブラウザで開く

リポジトリを明示的に指定しなければ現在いるリポジトリのREADMEが表示されます。ちゃんとマークダウンを認識して色が付けられていてとてもみやすいです😊

スクリーンショット 2020-09-19 22.53.49.png

ただ注意点としては、あくまでGitHub上の情報を参照しているので、ローカルでREADMEを作成、変更しても、pushしないとgh repo viewではみることができません。

-wフラグをつけることで、ブラウザを開いて参照することができます。一発でジャンプできて便利。

$ gh repo view cli/cli -w
Opening github.com/cli/cli in your browser.

🍎🍎 gh pr コマンド 🍎🍎

gh prコマンドは、プルリクの作成やマージ、ステータスを確認することができます。

gh pr <command> [flags]で実行し、<command>には以下の12個が利用できます。

checkout:   Check out a pull request in git
checks:     Show CI status for a single pull request
close:      Close a pull request
create:     Create a pull request
diff:       View changes in a pull request
list:       List and filter pull requests in this repository
merge:      Merge a pull request
ready:      Mark a pull request as ready for review
reopen:     Reopen a pull request
review:     Add a review to a pull request
status:     Show status of relevant pull requests
view:       View a pull request

prコマンドでは、基本的にブランチやPR番号を指定します。
ちなみに何も指定しないとカレントブランチを指定するようです。
https://github.com/cli/cli/blob/b2e36a0979a06b94bf364552a856c166cd415234/pkg/cmd/pr/shared/lookup.go#L34-L37

🍀🍀 gh pr create 🍀🍀

gh pr createコマンドは、PRを作成することができるコマンドです。

gh pr create [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-a --assignee assigneeを指定
-B --base マージ先ブランチ
-b --body PRのbody(説明)
-d --draft draftでPRを作成
-f --fill titleとbodyを入力しない。commit情報を使って埋める。
-H --head PRを作成したいブランチを指定(デフォルトでカレントブランチ)
-l --label ラベルを指定
-m --milestone マイルストーンを指定
-p --project プロジェクトを指定
-r --reviewer reviewerを指定
-t --title タイトルを指定
-w --web PR作成画面をブラウザで開く

対話形式で作成

$ gh pr create
? Where should we push the 'feature/hoge' branch?  [Use arrows to move, type to filter]
> JIIOryo/foo
  Skip pushing the branch
  Cancel

タイトルを入力します。

? Title (add hoge.txt) add HOGE

eを押すとエディタが開き、PRの文章を記述できます。

? Body [(e) to launch vim, enter to skip]

submitするとPRが作成されます。

? What's next?  [Use arrows to move, type to filter]
> Submit
  Continue in browser
  Add metadata
  Cancel

スクリーンショット 2020-09-20 3.39.24.png

コマンド一発で作成

$ gh pr create -t 'add FUGA' -b '# fugafuga' -m foo -l hoge -B feature/hoge -d

これで一発でこのPRができます。スゴい。

この例では-mがマイルストーンで、-lがラベル、-Bがマージ先ブランチ、-dがドラフトPRです。
ラベルなど、複数ある場合は,でつなげる。

pushしていない場合は対話形式同様pushする?って聞かれる。

? Where should we push the 'feature/foo' branch? JIIOryo/foo

スクリーンショット 2020-09-20 3.53.34.png

🍀🍀 gh pr close 🍀🍀

gh pr closeコマンドは、PRをクローズできるコマンドです。

gh pr close {<number> | <url> | <branch>} [flags]で実行します。
PRの指定方法はbranch, PR番号, urlの3種類あります。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-d --delete-branch ブランチを削除する

ブランチ名で指定

これが一番直感的でわかりやすいです。

$ gh pr close feature/fuga
✔ Closed pull request #5 (add FUGA)

PR番号で指定

$ gh pr close 5
✔ Closed pull request #5 (add FUGA)

URLで指定

$ gh pr close https://github.com/JIIOryo/foo/pull/5
✔ Closed pull request #5 (add FUGA)

ブランチも消す

-dオプションをつけることで、ブランチごと削除することが可能です。これは便利。

$ gh pr close feature/fuga -d
✔ Closed pull request #5 (add FUGA)
✔ Deleted branch feature/fuga and switched to branch master

🍀🍀 gh pr reopen 🍀🍀

gh pr reopenコマンドは、クローズしたPRを再び開くができます。

gh pr reopen {<number> | <url> | <branch>} [flags]で実行する。

ReopenするPRを指定方法はbranch, PR番号, urlの3種類あります。

PR番号でreopen

$ gh pr reopen 5
✔ Reopened pull request #5 (add FUGA)

URLで指定

$ gh pr reopen https://github.com/JIIOryo/foo/pull/5
✔ Reopened pull request #5 (add FUGA)

ブランチ名で指定

自分の場合ブランチ名で指定してもうまくいかなかったです。

$ gh pr reopen feature/fuga
no open pull requests found for branch "feature/fuga"

🍀🍀 gh pr list 🍀🍀

gh pr listコマンドは、PRの一覧を表示するコマンドです。

gh pr list [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-a --assignee assigneeでフィルタリング
-B --base ベースブランチでフィルタリング
-l --label ラベルでフィルタリング
-L --limit 最大表示個数を指定(デフォルト30)
-s --state 状態を指定 open,closed,merged,allが指定可能 (デフォルトopen
-w --web ブラウザでPR一覧のページを開く

$ gh pr list

Showing 4 of 4 open pull requests in JIIOryo/foo

#13  add fugahoge  feature/fugahoge
#9   add hogefuga  feature/hogefuga
#6   add FOO       feature/foo
#1   add HOGE      feature/hoge
$ gh pr list -B master -l hoge -L 3

Showing 1 of 1 pull request in JIIOryo/foo that matches your search

#1  add HOGE  feature/hoge

🍀🍀 gh pr diff 🍀🍀

gh pr diffコマンドは、PRのdiffを確認することができるコマンドです。

gh pr diff [<number> | <url> | <branch>] [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
--color 色。always, never, autoのうちいずれかを選択。(デフォルトauto)

スクリーンショット 2020-09-20 11.26.31.png

diffに関してはブラウザの方がわかりやすいので、これで-wフラグが利用できたら便利なんですけどね。

🍀🍀 gh pr merge 🍀🍀

gh pr mergeコマンドは、PRをマージすることができます。

gh pr merge [<number> | <url> | <branch>] [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-d --delete-branch ブランチを削除するか(デフォルト true)
-m --merge マージコミットを作成
-r --rebase リベース
-s --squash スカッシュマージ

対話形式で試す

mergeは、マージコミットを作成、リベース、スカッシュマージの3種類が利用できます。

$ gh pr merge
? What merge method would you like to use?  [Use arrows to move, type to filter]
> Create a merge commit
  Rebase and merge
  Squash and merge

ブランチを削除するか聞かれます。

? Delete the branch locally and on GitHub? (Y/n)

Done

✔ Merged pull request #7 (add baz)
✔ Deleted branch feature/baz and switched to branch master

コマンド一発でマージする

$ gh pr merge --squash feature/piyo
✔ Squashed and merged pull request #8 (add piyo)
✔ Deleted branch feature/piyo and switched to branch master

🍀🍀 gh pr ready 🍀🍀

gh pr readyコマンドは、draftPRをreview可能状態に変更するコマンドです。

gh pr ready [<number> | <url> | <branch>] [flags]で実行する。

最初はドラフト状態(グレーの状態)です。

スクリーンショット 2020-09-20 11.53.46.png

gh pr readyしてみます。
ReopenするPRを指定方法はbranch, PR番号, urlの3種類あります。
指定しない場合はカレントブランチを指定したことになります。

スクリーンショット 2020-09-20 11.53.53.png

PRのstatusがレビュー可能状態(緑)に変わりました。

スクリーンショット 2020-09-20 11.54.00.png

🍀🍀 gh pr status 🍀🍀

gh pr statusコマンドは、PRのステータスを確認することができるコマンドです。

gh pr status [flags]で実行します。

draftはグレー、レビュー可能は緑色、Closedは赤に表示されました。

スクリーンショット 2020-09-20 23.02.57.png

🍀🍀 gh pr review 🍀🍀

gh pr reviewコマンドは、レビューをすることができるコマンドです。

gh pr review [<number> | <url> | <branch>] [flags]で実行します。

PRの指定方法はbranch, PR番号, urlの3種類あります。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-a --approve PRをapproveする
-b --body レビューのメッセージを指定
-c --comment PRのコメント (-bが必要)
-r --request-changes 変更依頼

対話形式でレビューする

coment, approve, request changesの3つから選ぶことができます。コメントしてみましょう。

$ gh pr review feature/foo
? What kind of review do you want to give?  [Use arrows to move, type to filter]
> Comment
  Approve
  Request changes

eを押すとエディタが開いてコメントを書くことができます。

? Review body [(e) to launch vim]

確認があるので、submitしましょう。

? Review body <Received>
Got:

  hoge

? Submit? (Y/n)

無事にレビューできました。

? Submit? Yes
- Reviewed pull request #6

対話形式でapproveする

approveを選択します。

$ gh pr review feature/foo
? What kind of review do you want to give?  [Use arrows to move, type to filter]
  Comment
> Approve
  Request changes

eを押すとエディタが開いてコメントを書くことができます。

? Review body [(e) to launch vim, enter to skip]

Approveのときのメッセージが確認できます。Submitしましょう。

? Review body <Received>
Got:

  LGTM🎉

? Submit? (Y/n)

コマンド一発でレビューする

-cはコメント、-aでapproveすることができます。
これらのメッセージは-bで指定します。

$ gh pr review feature/foo -c -b 'hoge'
- Reviewed pull request #6

🍀🍀 gh pr checks 🍀🍀

gh pr checksコマンドは、CIのステータスを取得できるコマンドです。

gh pr checks [flags]で実行します。

$ gh pr checks
All checks were successful
0 failing, 1 successful, and 0 pending checks

✓  ci/circleci: run    https://circleci.com/gh/JIIOryo/foo/2...

🍀🍀 gh pr view 🍀🍀

gh pr viewコマンドは、PRのタイトルやbodyの内容などの情報を表示するコマンドです。

gh pr view [<number> | <url> | <branch>] [flags]で実行します。
PRの指定方法はbranch, PR番号, urlの3種類あります。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-w --web ブラウザで開く

今回はブランチ名から指定します。

$ gh pr view feature/hogefuga

スクリーンショット 2020-09-20 12.45.06.png

ブラウザで開く

カレントブランチ(指定なし)のPRをブラウザで開きたいときは-wフラグを利用します。

$ gh pr view -w
Opening github.com/JIIOryo/foo/pull/9 in your browser.
(ブラウザが開く)

これは便利。使えそう。

🍀🍀 gh pr checkout 🍀🍀

gh pr checkoutコマンドは、指定したPR(ブランチ)にcheckoutするコマンドです。

gh pr checkout {<number> | <url> | <branch>} [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
--recurse-submodules 再帰的に全てのアクティブなサブモジュールを更新する

$ gh pr checkout feature/hogefuga
Switched to branch 'feature/hogefuga'
Already up to date.

ちなみに実装を見ると、ローカルにブランチがある場合、fetch checkout mergeを行い、そうでない場合はcheckout -bで新しいブランチを作成してくれているようですね。
https://github.com/cli/cli/blob/b2e36a0979a06b94bf364552a856c166cd415234/pkg/cmd/pr/checkout/checkout.go#L118-L133

\

🍎🍎 gh issue コマンド 🍎🍎

gh issueコマンドは、issueの作成や閲覧することができます。

gh issue <command> [flags]で実行し、<command>には以下の6個が利用できます。

close:      Close issue
create:     Create a new issue
list:       List and filter issues in this repository
reopen:     Reopen issue
status:     Show status of relevant issues
view:       View an issue

🍀🍀 gh issue create 🍀🍀

gh issue createコマンドは、issueを作成することができるコマンドです。

gh issue create [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-a --assignee assigneeを指定
-b --body bodyを指定
-l --label ラベルを指定
-m --milestone マイルストーンを指定
-p --project プロジェクトを指定
-t --title タイトルを指定
-w --web ブラウザで開く

対話形式でissueを作成

まずはタイトルを指定します。

$ gh issue create

Creating issue in JIIOryo/foo

? Title hoge bug 🐛

eを押すことで、エディタが開きます。

? Body [(e) to launch vim, enter to skip]

入力が完了。

? Body <Received>
? What's next?  [Use arrows to move, type to filter]
> Submit
  Continue in browser
  Add metadata
  Cancel

Add metadataで、assigneeやlabelを指定することができます。移動は上下ボタン、選択はスペースキーです。確定はEnter。

? What would you like to add?  [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
  [ ]  Assignees
> [x]  Labels
  [ ]  Projects
  [ ]  Milestone

Labelを選択すると、以下のようにラベル一覧が表示されます。同様に移動は上下ボタン、選択はスペースキーです。確定はEnter。

? Labels  [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
  [x]  bug
  [ ]  documentation
  [ ]  duplicate
> [ ]  enhancement
  [x]  fuga
  [ ]  good first issue
  [ ]  help wanted

Submitしましょう。

? What's next?  [Use arrows to move, type to filter]
> Submit
  Cancel
https://github.com/JIIOryo/foo/issues/11

issueができたみたいなので、みてみます。

スクリーンショット 2020-09-20 13.41.02.png

コマンドで一発でissueを作成する。

-tでタイトル、-bでbody、-lでラベル、-mでマイルストーンを選択してみました。

$ gh issue create -t 'fuga bug 🐛' -b 'fugafuga' -l hoge,fuga -m foo

Creating issue in JIIOryo/foo

https://github.com/JIIOryo/foo/issues/12

ちなみに、-wオプションをつけるとissueを作成する画面がブラウザで開きます。

🍀🍀 gh issue list 🍀🍀

gh issue listコマンドは、issueの一覧を表示することができます。

gh issue list [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-a --assignee assigneeでフィルタリング
-A --author authorでフィルタリング
-l --label ラベルでフィルタリング
-L --limit issueの最大表示件数を指定 (デフォルト30件)
-m --milestone マイルストーンをでフィルタリング
--mention メンションでフィルタリング
-p --project プロジェクトを指定
-s --state 状態でフィルタリング open,closed,allが指定できます。(デフォルトopen
-w --web ブラウザで開く

$ gh issue list

Showing 2 of 2 open issues in JIIOryo/foo

#12  fuga bug 🐛  (fuga, hoge)       about 5 minutes ago
#11  hoge bug 🐛  (bug, fuga, hoge)  about 9 minutes ago

フラグを付けて検索してみます。

$ gh issue list -l hoge,fuga -L 1 -s all

Showing 1 of 2 issues in JIIOryo/foo that match your search

#12  fuga bug 🐛  (fuga, hoge)  about 10 minutes ago

🍀🍀 gh issue status 🍀🍀

gh issue statusコマンドは、issueのステータスを表示するコマンドです。

gh issue status [flags]で実行する。
自分がアサインされたissue, メンションされたissue, 自分が作成したissueを確認することができます。

$ gh issue status

Relevant issues in JIIOryo/foo

Issues assigned to you
  #12  fuga bug 🐛  (fuga, hoge)  less than a minute ago

Issues mentioning you
  #12  fuga bug 🐛  (fuga, hoge)  less than a minute ago

Issues opened by you
  #12  fuga bug 🐛  (fuga, hoge)       less than a minute ago
  #11  hoge bug 🐛  (bug, fuga, hoge)  about 3 hours ago

🍀🍀 gh issue close 🍀🍀

gh issue closeコマンドは、issueをcloseすることができるコマンドです。

gh issue close {<number> | <url>} [flags]で実行する。
issueを選択する方法は、issue番号, issueのURLの2つがあります。

$ gh issue close 12
✔ Closed issue #12 (fuga bug 🐛)
$ gh issue close https://github.com/JIIOryo/foo/issues/12
✔ Closed issue #12 (fuga bug 🐛)

🍀🍀 gh issue reopen 🍀🍀

gh issue reopenコマンドは、closeしたissueを再び開くコマンドです。

gh issue reopen {<number> | <url>} [flags]で実行します。
issueを選択する方法は、issue番号, issueのURLの2つがあります。

$ gh issue reopen 12
✔ Reopened issue #12 (fuga bug 🐛)
$ gh issue reopen https://github.com/JIIOryo/foo/issues/12
✔ Reopened issue #12 (fuga bug 🐛)

🍀🍀 gh issue view 🍀🍀

gh issue viewコマンドは、issueを閲覧することができるコマンドです。

gh issue view {<number> | <url>} [flags]で実行する。
issueを選択する方法は、issue番号, issueのURLの2つがあります。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-w --web ブラウザで開く

$ gh issue view 11
$ gh issue view https://github.com/JIIOryo/foo/issues/11

スクリーンショット 2020-09-20 17.31.58.png

markdownがしっかり認識されて色付けされていてみやすいですが、ブラウザでしっかり確認したい場合もあります。

そのような場合は-wオプションを利用します。

$ gh issue view 11 -w
Opening github.com/JIIOryo/foo/issues/11 in your browser.

スクリーンショット 2020-09-20 17.34.34.png

🍎🍎 gh release コマンド 🍎🍎

gh releaseコマンドは、releaseの作成や削除ができるコマンドです。

gh release <command> [flags]で実行し、<command>には以下の6個が利用できます。

create:     Create a new release
delete:     Delete a release
download:   Download release assets
list:       List releases in a repository
upload:     Upload assets to a release
view:       View information about a release

🍀🍀 gh release create 🍀🍀

gh release createコマンドは、releaseを作成することができるコマンドです。

gh release create <tag> [<files>...] [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-d --draft ドラフトのリリースを作成
-n --notes Release notesを作成
-F --notes-file Release notesをファイルから指定して作成
-p --prerelease prerelease(不安定なバージョン)であることを知らせます。
-t --title リリースのタイトルを指定します。

対話形式でreleaseを作成

releaseを対話形式で作成してみます。まずはタイトルを入力。

$ gh release create v0.0.1
? Title (optional) hoge

Release noteを書くか選択します。
今回はWrite my ownを選択します。

? Release notes  [Use arrows to move, type to filter]
> Write my own
  Leave blank

prereleaseかどうか聞かれます。今回はyにします。

? Is this a prerelease? (y/N)

releaseをpublishするか、draftとして保存するかなどを選択できます。
今回はpublishします。

? Submit?  [Use arrows to move, type to filter]
> Publish release
  Save as draft
  Cancel

以上で完了です。

出力されたURLを開いてみると、v0.0.1のタグでリリースを作成することができました。

スクリーンショット 2020-09-20 17.47.18.png

🍀🍀 gh release list 🍀🍀

gh release listコマンドは、リリース一覧を表示するコマンドです。

gh release list [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-L --limit 一度に取得する上限数(デフォルト30)

以下で実行してみます。

$ gh release list

このように、releaseの一覧が取得できました。

スクリーンショット 2020-09-20 17.59.52.png

🍀🍀 gh release upload 🍀🍀

gh release uploadコマンドは、releaseのassetsをアップロードすることができるコマンドです。

gh release upload <tag> <files>... [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
--clobber 同名のassetsを上書きするか

試しに、v0.4.0にfoo.txt,bar.txtを追加してみましょう。

$ gh release upload v0.4.0 foo.txt bar.txt
Successfully uploaded 2 assets to v0.4.0

スクリーンショット 2020-09-21 0.54.28.png

ちなみに、同じ名前のassetsがすでにuploadされている場合は怒られます。

$ gh release upload v0.4.0 foo.txt
asset under the same name already exists: [foo.txt]

--clobberフラグを付ければ上書きできます。

$ gh release upload v0.4.0 foo.txt --clobber
Successfully uploaded 1 asset to v0.4.0

🍀🍀 gh release download 🍀🍀

gh release downloadコマンドは、releaseのassetsをダウンロードすることができるコマンドです。

gh release download [<tag>] [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-D --dir ダウンロードする先のディレクトリ(デフォルトで.
-p --pattern 特定のglobパターンにマッチするassetsをダウンロード

ダウンロード先はデフォルトでカレントディレクトリです。

$ gh release download v0.4.0

-Dフラグでダウンロード先の指定、-pフラグでglobのパターンを指定することができます。

$ gh release download v0.4.0 -D ~/Desktop/ -p '*.txt'

🍀🍀 gh release delete 🍀🍀

gh release deleteコマンドは、releaseを削除することができるコマンドです。

gh release delete <tag> [flags]で実行します。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-y --yes 削除の確認をスキップ

例えば、現在以下のようなreleaseがあり、v0.0.2のリリースを削除してみます。

$ gh release list
foo       Latest       (v0.4.0)  about 16 minutes ago
foo                    (v0.3.0)  about 26 minutes ago
add fuga  Draft        (v0.0.2)  about 46 minutes ago
foo       Pre-release  (v0.2.0)  about 34 minutes ago
fuga                   (v0.1.0)  about 37 minutes ago
hoge      Pre-release  (v0.0.1)  about 50 minutes ago

リリースを削除してもいいか質問されるのでyを選択。

$ gh release delete v0.0.2
? Delete release v0.0.2 in JIIOryo/foo? (Y/n) y
✓ Deleted release v0.0.2

ちなみに、-y オプションを選択することで確認なしで削除できる。

$ gh release delete v0.0.2 -y

🍀🍀 gh release view 🍀🍀

gh release viewコマンドは、releaseの情報を閲覧することができるコマンドです。

gh release view [<tag>] [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-w --web ブラウザで開く

スクリーンショット 2020-09-20 18.45.10.png

少しターミナルではみづらいと言う場合は、-wフラグを付けてブラウザで開くと良いでしょう。

$ gh release view v0.4.0 -w

スクリーンショット 2020-09-20 18.45.51.png

🍎🍎 gh gist コマンド 🍎🍎

gh gistコマンドは、gistの作成や削除などができるコマンドです。

gh gist <command> [flags]で実行し、<command>には以下の4個が利用できます。

create:     Create a new gist
edit:       Edit one of your gists
list:       List your gists
view:       View a gist

🍀🍀 gh gist create 🍀🍀

gh gist createコマンドは、gistを新規作成することができるコマンドです。

gh gist create [<filename>... | -] [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-d --desc gistの説明を指定
-f --filename ファイル名を指定 (標準入力から指定する場合)
-p --public gistを公開する (デフォルトprivate)

このようにファイル名を指定する方法を一番使うかと思います。

$ gh gist create hogefuga.txt
- Creating gist hogefuga.txt
✓ Created gist hogefuga.txt
https://gist.github.com/d09d42c7ef0643c432129f7085ffde9d

標準入力から内容を指定する場合、--filenameでファイル名を指定することができる。

$ echo hogehoge | gh gist create --filename hoge.txt
- Creating gist hoge.txt
✓ Created gist hoge.txt

もしくは、-を利用する。書き終わったらCtrl+Dで抜けることができる。

$ gh gist create - --filename hoge.js

const hoge = 'hoge';
console.log(hoge);

- Creating gist hoge.js
✓ Created gist hoge.js

🍀🍀 gh gist list 🍀🍀

gh gist listコマンドは、gistの一覧を取得できるコマンドです。

gh gist list [flags]で実行する。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-L --limit 表示最大件数を指定する(デフォルト 10)
--public publicのgistを表示する
--secret secretのgistを表示する

$ gh gist list
f6b19a5e7516b0bbadcba6e3b8732e62  hoge.js       1 file  secret  about 12 min...
08b23d0bc86a40cc74a7b2249259c7f8                1 file  secret  about 13 min...
1a564f0f1c176a7de2fff7738adc187c                1 file  secret  about 15 min...
c722167d04f9aa8528255f7db0f84e7f  hoge.txt      1 file  secret  about 17 min...
d09d42c7ef0643c432129f7085ffde9d  hogefuga.txt  1 file  secret  about 23 min...
8170566345795f3d330cef2fff57609e  hoge.txt      1 file  secret  about 19 hou...

🍀🍀 gh gist edit 🍀🍀

gh gist editコマンドは、自分のgistを編集することができるコマンドです。

gh gist edit {<gist ID> | <gist URL>} [flags]で実行する。
あらかじめgh gist listなどでIDを調べる必要があります。もしくはgistのURLでも指定することができます。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-f --filename ファイル名

以下を実行すると、エディタが開いて編集することができます。

$ gh gist edit f6b19a5e7516b0bbadcba6e3b8732e62

複数ファイルから構成されるgistの場合は、editするファイルを選択します。

$ gh gist edit d7f1cc09968c1064f42dfb92181ee983
? Edit which file?  [Use arrows to move, type to filter]
> bar.txt
  hogefuga.js
  hogefuga.txt

他のファイルも編集する場合はEdit another fileを選択します。終了したらSubmitする。

? What next?  [Use arrows to move, type to filter]
> Edit another file
  Submit
  Cancel

ちなみに--filenameフラグを利用して特定のファイルを指定することができます。

$ gh gist edit d7f1cc09968c1064f42dfb92181ee983 --filename hogefuga.txt

🍀🍀 gh gist view 🍀🍀

gh gist viewコマンドは、gistを閲覧するコマンドです。

gh gist view {<gist id> | <gist url>} [flags]で実行する。
あらかじめgh gist listなどでIDを調べる必要があります。もしくはgistのURLでも指定することができます。

フラグ

以下のフラグが利用できます。

flags short flags long 説明
-f --filename ファイル名を指定
-r --raw markdownをレンダリングしない
-w --web ブラウザで開く

これは、複数のファイルから構成されているケースです。

$ gh gist view d7f1cc09968c1064f42dfb92181ee983
bar.txt

bar


hogefuga.js

const hoge = 'hoge';
const fuga = 'fuga';
console.log(hoge, fuga);


hogefuga.txt

foo
bar
baz

指定したgistが複数のファイルから構成されている場合は特定のファイルのみを指定することもできます。

$ gh gist view d7f1cc09968c1064f42dfb92181ee983 --filename hogefuga.js
const hoge = 'hoge';
const fuga = 'fuga';
console.log(hoge, fuga);

最後に

GitHub CLIコマンドいかがだったでしょうか。

個人的には、さすがにPRのレビューなどをターミナル完結で行うのは厳しそうなので、どれも(issueやPRなど)listで一覧をみて探す→-wでブラウザで開くってのが使いやすそうだと思いました。
まだ紹介していないその他コマンドaliasapiなども随時更新、追加していく予定です!
当方まだGitHub CLIに精通していなくて基本的なコマンドしか紹介できませんでしたが、今後慣れてきたら便利なテクニックなどご紹介できればと思います!
もし記事に間違いや補足などあれば教えていただけると助かります🙏
最後まで読んでいただきありがとうございました。😊

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
53