GitHub CLI 1.0 がリリースされたので使ってみた
GitHub CLI 1.0 がリリースされました。Zenn へと投稿するのは初めてなので、Zenn と連携するリポジトリを gh
コマンドを通じて操作することで、gh
コマンドの使用感の確認と Zenn への投稿を同時におこなってみます。
Zenn での記事の作成方法については以下の記事を参考にしました:
gh
のインストール
Mac の場合は Homebrew または MacPorts からインストールすることが可能です:
$ brew install gh
あるいは
$ sudo port install gh
Linux 環境へインストールする場合はこちらを参考にしてください。たとえば Ubuntu 20.04 にインストールするには以下のコマンドを実行します:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0
$ sudo apt-add-repository -u https://cli.github.com/packages
$ sudo apt install gh
コマンドの補完
gh
コマンドの補完を有効にするために、シェルの設定ファイルへと追記します。たとえば、使用しているシェルが bash であれば、.bash_profile
に以下の行を追記します:
eval "$(gh completion -s bash)"
補完が有効になっていれば、ターミナルで gh
と入力したあとに Tab を押下することで、以下のようなサブコマンドの候補が表示されるはずです:
$ gh
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
gist -- Create gists
help -- Help about any command
issue -- Manage issues
pr -- Manage pull requests
release -- Manage GitHub releases
repo -- Create, clone, fork, and view repositories
認証
gh
コマンドから GitHub 上のリソースを操作できるようにするために、認証用のコマンドを実行する必要があります。以下のコマンドにより認証プロセスが開始されます:
$ gh auth login
インタラクティブセッションが開始されるので、指示に従って認証を完了させてください。問題が発生しなければ、gh auth status
コマンドにより認証状態を確認することができるはずです:
$ gh auth status
github.com
✓ Logged in to github.com as morinokami (~/.config/gh/hosts.yml)
✓ Git operations for github.com configured to use ssh protocol.
ここまでで gh
コマンドを使用するための準備は整いました。ここからは Zenn と連携するリポジトリを作成・操作してみます。
リポジトリの作成
まずはリポジトリを作成します。gh
は Docker の CLI などと同様に、サブコマンドで操作対象のリソースを指定し、それに続いて操作内容を記述するようなスタイルです。リポジトリに対する操作は repo
サブコマンドを通じておこないます。repo
に対する可能な操作は以下のようになります:
$ gh repo
clone -- Clone a repository locally
create -- Create a new repository
fork -- Create a fork of a repository
view -- View a repository
非常に明快です。今はリポジトリを作成したいため、create
を使用します。create
の使い方を調べるために gh repo create --help
を実行すると後半に EXAMPLES
という項目が見つかります。ここから、gh repo create my-repo
というコマンドを実行すれば、自分のアカウントに紐づく my-repo
というコマンドが作成されることがわかります。また、--public
フラグによりリポジトリをパブリックに設定できることもわかります。早速実行してみましょう:
$ gh repo create --public zenn-docs
? This will create 'zenn-docs' in your current directory. Continue? Yes
✓ Created repository morinokami/zenn-docs on GitHub
? Create a local project directory for morinokami/zenn-docs? Yes
Initialized empty Git repository in /home/shf0811/dev/zenn-docs/.git/
✓ Initialized repository in './zenn-docs/'
コマンドの出力から、GitHub 上にリポジトリが作成され、またそれに紐づくディレクトリがカレントディレクトリに作成されたことがわかります。ただ、質問の内容と実行内容が微妙に食い違っているように思えますし、また出力内容が冗長であるようにも感じますね。
リポジトリが作成されたことは以下のコマンドからも確認可能です:
$ cd zenn-docs
$ gh repo view
morinokami/zenn-docs
No description provided
This repository does not have a README
View this repository on GitHub: https://github.com/morinokami/zenn-docs
あるいは、--web
フラッグを用いることでブラウザからも確認することができます。
この時点で Zenn との連携が可能となるので、リポジトリを以下のコマンドで初期化した上で Zenn の Deploys からレポジトリを連携しておきます。
echo "# zenn-docs" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin git@github.com:morinokami/zenn-docs.git
git push -u origin master
イシューの作成
続いてイシューを作成してみます。イシュー関連の操作に対応するのは gh issue
です。これについても可能な操作を確認してみます:
$ gh issue
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
これまた明快です。create
を使用してイシューを作成することができるようなので、ヘルプで使用方法を調べてみると、一番最初の使用例として gh issue create --title "I found a bug" --body "Nothing works"
というものがあります。他にもラベルやアサイン先を指定することもできるようですが、今回はシンプルに行きます:
$ gh issue create --title "Add an article" --body "This issue was created by gh."
Creating issue in morinokami/zenn-docs
https://github.com/morinokami/zenn-docs/issues/1
作成されたイシューを確認してみます。リポジトリに関連するイシューをざっくり確認したい場合は status
を使うようです:
$ gh issue status
Relevant issues in morinokami/zenn-docs
Issues assigned to you
There are no issues assigned to you
Issues mentioning you
There are no issues mentioning you
Issues opened by you
#1 Add an article about 1 hour ago
ラベルやアサイン先によってイシューを絞り込みたいような場合には、list
コマンドを使用します。
個別のイシューについて詳細を確認したいような場合には、view
コマンドを使用します。たとえば先ほど作られたばかりのイシューを確認するためには、イシュー番号が 1 であることから、次のようにコマンドを実行します:
$ gh issue view 1
Add an article
Open • morinokami opened less than a minute ago • 0 comments
This issue was created by gh.
View this issue on GitHub: https://github.com/morinokami/zenn-docs/issues/1
問題なくイシューが作成されていることが確認できました。続いてプルリクエストを作成してみます。
プルリクエストの作成
まず新しいブランチを作成し、そこで記事を作成していきます:
$ git switch -c first-article
$ mkdir articles
$ vim articles/hello-github-cli.md
なお、もともとは Zenn の CLI により記事を作成しようとしたのですが、次のようなエラーが出て作成できなかったため手動で作成しています。
$ npx zenn new:article
npx: installed 9 in 1.424s
command not found: zenn
zsh: exit 1 npx zenn new:article
さて、記事が作成できたらコミットをおこない、プルリクエストをおこないます。プルリクエストに対応するサブコマンドは pr
です。例のごとく可能な操作について列挙してみます:
$ gh pr
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
プルリクエストに対する操作は比較的たくさんあるようです。今はシンプルにプルリクエストを作成したいので create
を指定します。create
のヘルプを読むと、--title
と --body
でタイトルと本文を、--base
でマージ先のブランチを指定できるようなので、これらも指定してみます:
$ git add articles
$ git commit -m "Add my first article on Zenn"
$ git push -u origin first-article
$ gh pr create --base master --title "Add my first article on Zenn close #1" --body "This pull request was created by gh"
Creating pull request for first-article into master in morinokami/zenn-docs
https://github.com/morinokami/zenn-docs/pull/2
作成されたプルリクエストは、イシューと同様に、status
や view
により確認することができます:
$ gh pr status
Relevant pull requests in morinokami/zenn-docs
Current branch
#2 Add my first article on Zenn close #1 [first-article]
Created by you
#2 Add my first article on Zenn close #1 [first-article]
Requesting a code review from you
You have no pull requests to review
$ gh pr view 2
Add my first article on Zenn close #1
Open • morinokami wants to merge 1 commit into master from first-article
This pull request was created by gh
View this pull request on GitHub: https://github.com/morinokami/zenn-docs/pull/2
レビュー
最後に、自分自信で先ほどのプルリクエストをレビューしマージしてみます。まずは diff の確認をしてみます:
$ gh pr diff
diff --git a/articles/hello-github-cli.md b/articles/hello-github-cli.md
new file mode 100644
index 0000000..aa14ce9
--- /dev/null
+++ b/articles/hello-github-cli.md
@@ -0,0 +1,300 @@
+---
+title: "GitHub CLI 1.0 がリリースされたので使ってみた" # 記事のタイトル
+emoji: "😸" # アイキャッチとして使われる絵文字(1文字だけ)
+type: "tech" # tech: 技術記事 / idea: アイデア記事
+topics: ["gh", "GitHub CLI"] # タグ。["markdown", "rust", "aws"]のように指定する
+published: true # 公開設定(falseにすると下書き)
+---
+
...
続いてマージします:
$ gh pr merge -m 2
✔ Merged pull request #2 (Add my first article on Zenn close #1)
✔ Deleted branch first-article and switched to branch master
これにより自動的にマージ元のブランチは削除されるようです。そして見事、GitHub 上でプルリクエストがおこなわれ、Zenn において記事が公開されました!
終わりに
この記事では GitHub CLI の使用感を確かめるために、いくつかのサブコマンドを実際に使用した様子をレポートしました。自分は hub
コマンドはこれまで使っておらず、ブラウザ上で GitHub を操作していたため、ターミナルからの操作がいかに楽か実感することができました。サブコマンドに対する操作も一貫性があり明確で、かつヘルプなども充実しているため、これからは GitHub CLI をどんどん使っていきたいと思います。
Discussion