🐕

【GitHub CLI】ghコマンドで開発効率化

2023/12/17に公開

はじめに

この記事は【プロもくチャット Advent Calendar 2023】の17日目です。
https://qiita.com/advent-calendar/2023/puromoku

ghコマンドとは

GitHub CLI は、すべての作業を 1 か所で行うことができるように、pull request、issues、GitHub Actions、およびその他の GitHub 機能をターミナルに集めたコマンドライン ツールです。

https://docs.github.com/ja/github-cli/github-cli/about-github-cli
ターミナルからGitHubを操作できるとっても便利なコマンドラインツールです。

セットアップ

https://github.com/cli/cli#installation
上記READMEに従っていきます

$ brew install gh
$ gh auth login

こんな質問を聞かれるのでポチポチしていきます

? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser

最終的に以下ように出力されればセットアップは完了です!簡単ですね。

✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as mocchann
! You were already logged in to this account

早速使ってみる

GitHubにリポジトリを作る

以下コマンドで作成できます

$ gh repo create

あとは質問に答えていくだけでCLIからGitHubにリポジトリを作成することができます。

? What would you like to do? Create a new repository on GitHub from scratch
? Repository name gh_test
? Description gh command test repository
? Visibility Public
? Would you like to add a README file? No
? Would you like to add a .gitignore? No
? Would you like to add a license? No
? This will create "gh_test" as a public repository on GitHub. Continue? Yes
✓ Created repository mocchann/gh_test on GitHub
? Clone the new repository locally? Yes

また↑の最後の質問にYesと答えると、ローカル環境にも同名のリポジトリを作成することができます。
リポジトリ作成時点でremote URLも追加されているため、すぐにコード書いてcommitでき、とても快適に作業ができますね。

これをGUIでやろうとすると、ブラウザでGitHubを開いて、リポジトリ名を入力して、作成を押して、リポジトリのURIをコピーして、ローカルにも同じ名前でディレクトリを作って、、、と何手も操作が必要ですが、ghコマンドを使えばターミナル上ですべてが完結してしまいます。便利。

ちなみにGitHubに作成したリポジトリをブラウザで開きたいときは以下コマンドで実現できます。

$ gh browse

PRを作る

まずはtestファイルを作成してcommit → mainにpushしたあと、開発ブランチを切っておきます。
コードを適当に変更・commitして、以下コマンドを実行します。

$ gh pr create

以下のように質問に答えていくだけでPRを作れてしまいます。
※Draftにするかどうかも選べます

? Where should we push the 'feature/gh_create_pr' branch? mocchann/gh_test

Creating pull request for feature/gh_create_pr into main in mocchann/gh_test

? Title ghコマンドでPRを作成する
? Body <Received>
? What's next? Submit as draft
remote: 
remote: 
To https://github.com/mocchann/gh_test.git
 * [new branch]      HEAD -> feature/gh_create_pr
branch 'feature/gh_create_pr' set up to track 'origin/feature/gh_create_pr'.
https://github.com/mocchann/gh_test/pull/1

今回はDraftで作ってみました。

PRを編集する

編集もコマンドラインで可能です。

$ gh pr edit

上記コマンドを入力すると以下のように選択肢が出てきます。

? What would you like to edit?  [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
  [ ]  Title
> [×]  Body
  [ ]  Reviewers
  [ ]  Assignees
  [ ]  Labels
  [ ]  Projects
  [ ]  Milestone

spaceキーで編集したい項目を選択してenter
※オプションで --body "hogehoge" とかでも編集ができるそうです。
https://cli.github.com/manual/gh_pr_edit

すると以下のように出るのでeをポチッとして編集します

? What would you like to edit? Body
? Body [(e) to launch nano]

どうやらデフォルトエディタがnanoになっているので普段から使って手に馴染んでいるvimに変更します。

$ gh config set editor vim
? What would you like to edit? Body
? Body [(e) to launch vim] 

eを押すとvimでPRのBodyを編集できるようになります。
文字列を入力するには便利ですが、画像を載せたいときはGUIの方が簡単そうですね。

? What would you like to edit? Body
? Body <Received>
? Submit? Yes
https://github.com/mocchann/gh_test/pull/1

最後にsubmitするとPR編集完了です!
レビュワーの追加なども同じ要領でいけます。

PRを確認する

PRを確認したいときは以下コマンドを入力

// 1の部分はpullのnumberが入る
$ gh pr view 1

ブラウザで確認したいときは以下コマンドでいけます

$ gh pr view 1 --web

PRをDraftからReadyへ

これでPRをOpenできます。

gh pr ready

PRをmergeする

最後にmergeします

gh pr merge

ここでも質問に答えていくだけで、mergeだけでなく開発ブランチ(remote・local両方)の削除なども行ってくれます。

Merging pull request #1 (ghコマンドでPRを作成する)
? What merge method would you like to use? Create a merge commit
? Delete the branch locally and on GitHub? Yes
? What's next? Submit
✓ Merged pull request #1 (ghコマンドでPRを作成する)
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), 678 bytes | 678.00 KiB/s, done.
From https://github.com/mocchann/gh_test
 * branch            main       -> FETCH_HEAD
   e30728d..7c344c0  main       -> origin/main
Updating e30728d..7c344c0
Fast-forward
 test.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
✓ Deleted local branch feature/gh_create_pr and switched to branch main
✓ Deleted remote branch feature/gh_create_pr

おわりに

調べれば調べるほど、「ghコマンド、何でもできるやん」となっています。
ただ、ghコマンドでリポジトリシークレットを登録したりすると、GUIではシークレットを触れなくてもghコマンドなら触れる。みたいなこともあるので、権限周りと操作には気をつける必要があるな。という温度感です。
ただ使いこなせると開発効率が上がることは間違いないのでうまく取り入れていきたいですね。

あと、この記事を書いたあとでふと調べたのですが、zennの記事をVSCodeで書く方法が良さそうでした。
https://zenn.dev/ctrlkeykoyubi/articles/e7d91c5286a409
↑GitHubにリポジトリ作って管理する方法ですし、後日設定しようと思います。

Discussion