🐯

GitHub CLIのすヽめ&オレオレ関数で効率化していく

2020/12/11に公開
2

どうも。トラハックです。
普段はReactなどフロントエンドの学習講座やネタ動画をYouTubeにアップしている者です。

この記事は、実務でもっとGitHub CLIを触ってみたら、随時updateしていきます。

GitHub CLIとは

GitHub CLI 1.0 release

2020/09/18にGitHub CLI 1.0がリリースされました。
GitHub公式のCLIが遂に登場したということですね。

従来のGitHub用CLIはhubが有名でしたが、せっかくなら公式のCLIを使いたいよね?ということで試行錯誤した結果を残します。

GitHub CLIを使うと嬉しいこと


そもそもなぜGitHubのCLIを使うのか?
CLIということは、ブラウザではなくターミナルで全ての操作を完結できるということです。

私が感じるメリットは以下です。

  1. 複数のブラウザ操作をワンライナーのコマンドで代替できる
  2. 手順を覚える必要がない
  3. シェルスクリプトの関数と組み合わせることでさらに効率up

例えば「リポジトリの作成」をしたいとき、ブラウザでGitHubを開き、ぽちぽちとマウス操作して必要な情報を入力し、何度もページ遷移する必要がありますよね。

それがCLIならgh repo createのようなワンライナーのコマンドで完結します。

さらにGitHub CLIは対話モードで必要な情報を確認してくれるので、手順を覚える必要がありません。

この記事の最後で紹介するような、シェルスクリプトのオレオレ関数を作ることで、繰り返し何度も実行するような処理を効率化することも可能です。

ということでGitHub CLIを使ってみましょう。

GitHub CLIの使い方

GitHub CLIを使うためには以下の準備が必要です。

  1. GitHub CLIのインストール
  2. GitHubアカウントの認証
    ということで準備を済ませましょう。

GitHub CLIのインストール

Homebrewで簡単にインストールできます。

$ brew install gh

CLIからGitHubアカウントにログインしよう

インストールしたら認証を済ませましょう。

$ gh auth login

以下のように聞かれるので、GitHub.comを選ぶ。

? What account do you want to log into?  [Use arrows to move, type to filter]
> GitHub.com
  GitHub Enterprise Server

今回はブラウザからログインしてみます。

? How would you like to authenticate?  [Use arrows to move, type to filter]
> Login with a web browser
  Paste an authentication token

以下の表示が出るので、8桁のワンタイムコードをコピーしてEnterを押下。

! First copy your one-time code: XXXX-XXXX
- Press Enter to open github.com in your browser... 

ワンタイムコードを貼り付けて進めます。

そのままAuthorizationを進めてPasswordを入力するとブラウザ上での操作は完了です。

ターミナルに戻ってEnterを押します。

✓ Authentication complete. Press Enter to continue...

Gitリポジトリにアクセスする際の通信プロトコルを選択します。お好みでどうぞ。

? Choose default git protocol  [Use arrows to move, type to filter]
> HTTPS
  SSH

認証完了です!

✓ Configured git protocol
✓ Logged in as deatiger

GitHub CLIのコマンドを試し打ちしてみる

認証が完了したことで、ghから始まる魔法のコマンドが実行できるようになりました。
試し打ちしてみましょう。

なお、詳しいコマンドの使い方は公式マニュアルから確認するのが良いでしょう。
今回はいくつかピックアップしてご紹介します。

GitHub CLIでissueの一覧表示

現在のディレクトリのリポジトリのissueを一覧表示できます。

$ gh issue list

GitHub CLIでリポジトリを作成

ブラウザ上でぽちぽちとリポジトリ作成をする手間が無くなります。

$ gh repo create <REPO_NAME> [flags]

オプションで色々指定できますね。

FLAGS
  -y, --confirm              Confirm the submission directly
  -d, --description string   Description of repository
      --enable-issues        Enable issues in the new repository (default true)
      --enable-wiki          Enable wiki in the new repository (default true)
  -h, --homepage string      Repository home page URL
      --internal             Make the new repository internal
      --private              Make the new repository private
      --public               Make the new repository public
  -t, --team string          The name of the organization team to be granted access
  -p, --template string      Make the new repository based on a template repository

GitHub CLIで使用するエディターをnanoからVimに変更

GitHub CLIのエディターはデフォルトではnanoになっています。
みんなもちろんエディターはVimだよな?ってことで変更

$ gh config set editor vim

GitHub CLIでプルリクエストを作成

プルリクエスト関連のコマンドは一番使いそうですね。
プルリクエストの作成は、オプションを指定しなかった場合、対話モードで色々聞いてくれます。

$ gh pr create
Creating pull request for feature-pr3-test into develop in deatiger/gh-test

? Title Add a file for PR#3
? Body [(e) to launch vim, enter to skip] 
? What's next?  [Use arrows to move, type to filter]
> Submit
  Continue in browser
  Add metadata
  Cancel

Body(プルリクエストの説明文)は、先ほど設定したエディターで編集可能です。
そのままSubmitするか、ブラウザで確認するかも尋ねてくれます。

GitHub CLIでエイリアスを設定する

以下のコマンドで設定できます。

$ gh alias set <ALIAS_NAME> "<COMMANDS>"

試しに、「カレントディレクトリのリポジトリをブラウザで開く」コマンドがgh repo view --webと長ったらしいのでエイリアスに設定してみます。

$ gh alias set rvw "repo view --web"

gh rvwを実行すると開いてくれるようになりました。

GitHub CLIでオレオレ関数を作る

GitHub CLIを組み込んだオレオレ関数をシェルスクリプト内に作っちまいましょう。
私はzshを使っているので、編集するファイルは.zshrcです。

プルリクエストの一覧を確認してチェックアウト

プルリクエストされたブランチにチェックアウトしてファイルを確認したいときに使う

.zshrc
prco () {
    gh pr list;
    echo "Type the number of PR to checkout: " && read number;
    gh pr checkout ${number};
}

プルリクエストの一覧を確認して差分を表示

カレントブランチとの差分をターミナルで確認したいときに使う

.zshrc
prdiff () {
    gh pr list;
    echo "Type the number of PR to checkout: " && read number;
    gh pr diff ${number};
}

git initからのFirst commitからのリポジトリ作成からのデフォルトブランチの切り替えまで一気に終える関数

プロジェクトごとに必ずやる作業ですよね。
地味に面倒なので関数で一気にやる。

.zshrc
gcre() {
    git init && git add . && git status && git commit -m "First commit"
    echo "Type repository name: " && read name;
    echo "Type repository description: " && read description;
    gh repo create ${name} --description ${description}
    git remote add origin https://github.com/deatiger/${name}.git
    git checkout -b develop;
    git push -u origin develop;
}

1行ずつ解説すると...

  1. ローカルリポジトリ作って全部addしてcommit
  2. 対話モードでリポジトリ名を入力
  3. 対話モードでリポジトリの説明を入力
  4. gh repo createコマンドの登場!2.と3.で入力した変数を使って設定
  5. 4.で作成したリモートリポジトリをoriginに設定
  6. developブランチを作成してチェックアウト
  7. developをデフォルトブランチに変更してpush

なお、4.のコマンド実行後に対話モードでいくつか聞かれます

  1. 公開状態をPublic, Private, Intenalのいずれにするか
  2. カレントディレクトリに作成するか

gh repo create --publicのように公開状態をオプションで指定することもできます。場合によって公開状態を変えることが多いので、私は対話モードで尋ねてもらうようにしています。

以上、GitHub CLIのすヽめでした。

最後に、toraco株式会社では2024年11月1日にエンジニア向けのコミュニティを立ち上げました。
Discord のサーバーで運営しており、以下のリンクから無料で参加できます。コミュニティ内では以下のような投稿・活動がされます!

https://discord.gg/bga8nEfjfD

  • もくもく会・作業ラジオ・雑談部屋などオンライン上での交流
  • オフラインイベントの案内
  • 代表の稲垣(トラハック)が公開するコンテンツの説明・質問回答
  • toraco株式会社からの副業や案件の紹介
  • フロントエンド関連技術の情報共有および議論
  • 生成AI関連技術のキャッチアップ
  • その他、技術領域にこだわらない情報共有および議論
toraco株式会社のテックブログ

Discussion

akiosmakiosm

とても参考になる記事ありがとうございます。
・ プルリクエストの一覧を確認してチェックアウト
・プルリクエストの一覧を確認して差分を表示
のコードが同じみたいです。