今更ながらghコマンド入門してみた
今回はGitHubをCLIから扱うことができるghコマンドについて入門してみましたので、自分の備忘録もかねてコマンドとかまとめてみようと思います。
ghとは?
公式ドキュメントを引用すると、
GitHub CLI は、コンピューターのコマンド ラインから GitHub を使用するためのオープン ソース ツールです。 コマンドラインから作業しているときは、GitHub CLI を使用して時間を節約し、コンテキストの切り替えを回避できます。
GitHub CLI には、次のような GitHub 機能が含まれています。
リポジトリの表示、作成、複製、フォーク
Issue と pull request の作成、クローズ、編集、一覧表示
プルリクエストのレビュー、diff、マージ
ワークフローの実行、表示、一覧表示
リリースの作成、一覧表示、表示、削除
gist の作成、編集、一覧表示、表示、削除
codespace の一覧表示、作成、削除、接続
GitHub API から情報を取得します
ということで、GitHubで作業することの大体の内容をカバーできる内容となっています。
私自身、GitHubは基本的にWebページ上で作業していましたが、Issueの作成やPull Requestの作成はコマンドからできると場合によっては楽かなと思い、今回使ってみることにします。
実際に使ってみましょう
インストール方法
公式にインストール方法がまとめられておりますので、そちらを参照しました。私はMacbookを利用しているので以下のコマンドを実行してインストールしました。
brew install gh
GitHubの認証を行う
ghを利用するためには、GitHubの認証を行う必要があります。認証を行うには以下のコマンドを実行します。
gh auth login
すると以下のような選択肢が表示されます。
? Where do you use GitHub? [Use arrows to move, type to filter]
> GitHub.com
Other
私は一つ目のGitHub.com
を選択しました。
次に、利用するプロトコルの確認があります。私はSSHを利用しているので`SSHを選択しました。
? What is your preferred protocol for Git operations on this host? [Use arrows to move, type to filter]
> HTTPS
SSH
その後、SSHを選択したので公開鍵を選択するように求められます。私はすでにアカウント認証が済んでいますのでSkipしましたが、まだ公開鍵をアップロードしていない方は公開鍵を作成したのちアップロードしてください。
? Upload your SSH public key to your GitHub account? [Use arrows to move, type to filter]
> /Users/.../.ssh/github.pub
Skip
公開鍵の登録が完了すると認証の方法を聞かれます。手っ取り早いので一つ目のLogin with a web browser
を選びました。これを選択するとワンタイムコードが発行されるので、これを利用して認証を完了させてください。
? How would you like to authenticate GitHub CLI? [Use arrows to move, type to filter]
> Login with a web browser
Paste an authentication token
リポジトリの作り方
認証が終わったら、ghを使ってみます。まず初めに、この記事で利用するレポジトリを作ってみます。gh_test_repo
という名前でレポジトリを作成します。これを実現するためには以下のコマンドを利用します。
gh repo create gh_test_repo --public
--public
フラグは公開レポジトリとして利用する場合につけるフラグとなっており、それ以外に--private
と--internal
の二つがあります。必ずどれかを指定してください。実行するとgh_test_repo
という名前の公開レポジトリが作成されているはずです。
リポジトリのclone
それでは先ほど作成したgh_test_repo
をローカルPCにcloneします。cloneする場合は以下のコマンドで対応できます。ユーザ名はご自身のアカウントの名前を設定します。これを実行すると実行したフォルダにgh_test_repo
が複製されます。
gh repo clone <ユーザ名>/gh_test_repo
ブランチの作成
検証をするためにmainブランチを作成しておきましょう。ブランチの作成は通常通りgitコマンドを用いて以下のようにします。
git checkout -b main
touch README.md
git add README && git commit -m "add: README.md"
git push origin main
イシューの作成
それではイシューも作ってみましょう。イシューは以下のコマンドで作ることができます。まずはこのコマンドを実行してもらうとイシューが作成できているのが確認できると思います。
gh issue create --title "My new issue" --body "Here are more details."
これは最もシンプルな方法ですが、例えばAssigneeやラベルを付与したい場合は以下のようにすることで対応できます。
gh issue create --title "My new issue" --body "Here are more details." --assignee @me --label "bug,high priority"
なお、high priority
はラベルとしてデフォルトでは存在しないですが、以下のようにするトラベルを作ることができます。
gh label create "high priority"
より詳細な使い方についてはこちらを参照してください。
Pull Requestの作成
次はPull Request(以下、PR)を作成してみましょう。PRも他のコマンドと同じように直感的にコマンドを利用することで作れます。
まずPRを作るために、以下のようにしてデフォルトのmainブランチからdevelopブランチを作成しておきます。また、変更点を作成するためにREADMEファイルを追加しておきます。
git checkout -b develop
echo "HELLO" >> README.md
git add README.md && git commit -m "update: README.md"
ではPRを作成しましょう。最もシンプルなコマンドは以下になります。
gh pr create
これを実行すると以下のような質問が表示されます。
? Where should we push the 'develop' branch? [Use arrows to move, type to filter]
> <ユーザ名>/gh_test_repo
Skip pushing the branch
Cancel
まだdevelopブランチをpushしていなかったので1番目を選択します。すると以下のようにPRのタイトルが聞かれますので、タイトルを入力します(今回はTest PR via gh
としました)。
Creating pull request for develop into in Akasan/gh_test_repo
? Title (required) Test PR via gh
すると次はPRのBodyの入力が聞かれます。
? Body [(e) to launch nano, enter to skip]
今回はSample PR's body
と入力してみたいと思います。デフォルトのテキストエディタがnanoとなっているようなので今回はnanoで編集してみます。e
を押した後にSample PR's body
と入力し、保存します。
すると次は以下のような質問がされます。今回はオープンなPRを作ってみるので一番上のSubmit
を選択します。
? What's next? [Use arrows to move, type to filter]
> Submit
Submit as draft
Continue in browser
Add metadata
Cancel
するとPRが作成されます。ブラウザからアクセスすると、こちらのようなPRが作成されていると思います。
なお、今回は特別指定しませんでしたが、PRを作成する時のブランチの指定方法は以下になります。
- マージするブランチを指定するには、
--base
または-B
フラグを使用 - 変更を含むブランチを指定するには、
--head
または-H
フラグを使用
そのほか、レビュアーの設定やラベルの指定なども可能です。詳しくはこちらを参照ください。
まとめ
今回はGitHubのCLIであるghを使って、基礎的なコマンド操作を紹介しました。今回言及したもの以外にもさまざまなオプションが用意されており、ブラウザで操作することと同じことがコマンドでも実行できるようになります。GitHubをターミナルから操作したいと考えていたけど使ったことがないというひとか、これを機会に使ってみてもらえたら嬉しいです。
Discussion