【GitHub CLI】ghコマンドで開発効率化
はじめに
この記事は【プロもくチャット Advent Calendar 2023】の17日目です。
ghコマンドとは
GitHub CLI は、すべての作業を 1 か所で行うことができるように、pull request、issues、GitHub Actions、およびその他の GitHub 機能をターミナルに集めたコマンドライン ツールです。
ターミナルからGitHubを操作できるとっても便利なコマンドラインツールです。
セットアップ
上記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" とかでも編集ができるそうです。
すると以下のように出るので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で書く方法が良さそうでした。
↑GitHubにリポジトリ作って管理する方法ですし、後日設定しようと思います。
Discussion