😎

今更ながら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の作成はコマンドからできると場合によっては楽かなと思い、今回使ってみることにします。

https://docs.github.com/ja/github-cli/github-cli/about-github-cli

実際に使ってみましょう

インストール方法

公式にインストール方法がまとめられておりますので、そちらを参照しました。私はMacbookを利用しているので以下のコマンドを実行してインストールしました。

brew install gh

https://github.com/cli/cli#installation

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"

より詳細な使い方についてはこちらを参照してください。

https://docs.github.com/ja/issues/tracking-your-work-with-issues/using-issues/creating-an-issue

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フラグを使用

そのほか、レビュアーの設定やラベルの指定なども可能です。詳しくはこちらを参照ください。

https://docs.github.com/ja/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request?tool=cli

まとめ

今回はGitHubのCLIであるghを使って、基礎的なコマンド操作を紹介しました。今回言及したもの以外にもさまざまなオプションが用意されており、ブラウザで操作することと同じことがコマンドでも実行できるようになります。GitHubをターミナルから操作したいと考えていたけど使ったことがないというひとか、これを機会に使ってみてもらえたら嬉しいです。

Discussion