ghコマンドめちゃ便利

ghというGitHubをCLIから操作できるコマンドラインツールがある。

割と昔からあったような気がするので、存在だけは知っていたのだが、仕事してて使ってみたらめっちゃ便利だったのでここに書いておく。


仕事をしていたら、複数のリポジトリに対して同じ操作をしたいという要求が発生した。

対象のリポジトリの数は10個以下とかだったので手動でやっても頑張れないこともないくらいの数だったが、ふと思い立ってCLIで一括でやってみた。

今回やりたかったのは

  1. ブランチを切る

  2. 各リポジトリ内の特定のファイルを変更

  3. 変更をcommit & push

  4. default branchに取り込むためのPR作る

という4つの作業だった。それぞれ以下のような感じでやってみたら結構楽だった。(ちなみに肝心のghコマンドの話は4まで出てきません)

1. ブランチ切る

対象のリポジトリをxargsコマンドに入力して操作していく。

echo -e "hoge\nfuga\npiyo" | xargs -I DIR -n 1 git -C DIR checkout -b feature/something

のような感じで実行した。hoge fuga piyoは今回変更したいリポジトリのパスに置き換えるイメージ。

gitのCオプションを使うと対象のリポジトリ配下にいなくても、指定したパスのリポジトリを操作できるので、こういった操作やシェルスクリプトからのgit操作をしたいときに良いらしい。

2. 各リポジトリ内の特定のファイルを変更

1と同じような手順でやっていく。今回はあるところにあるファイルをそのまま対象リポジトリの配下にコピーすればいいだけだったので

echo -e "hoge\nfuga\npiyo" | xargs -I DIR -n 1 sh -c "cat $TARGET > DIR/path/to/target"

という感じで済ませた。

3. 変更をcommit

これも1とほとんど同じ

commitして

echo -e "hoge\nfuga\npiyo" | xargs -I DIR -n 1 git -C DIR commit -m "meccha iikanji no commit"

pushする

echo -e "hoge\nfuga\npiyo" | xargs -I DIR -n 1 git -C DIR push origin HEAD

4. PRを作る

これが本題。ここまでで作ったブランチに紐づくPRを作る。

echo -e "hoge\nfuga\npiyo" | xargs -I DIR -n 1 sh -c "cd DIR && gh pr create --title 'pr title' --body 'description of this pr' -a '@me'"

「pr title」というタイトルのPRで、bodyは「description of this pr」というPRを作って自分をassignする、というのがこれだけでできちゃいます。

ghコマンドにはgitコマンドのCオプションのような、コンテキストを指定するためのオプションが(多分)なさそうだったので、新しくシェルを立ち上げてカレントディレクトリを移動してから実行するようにしています。

実行されて、PRが作成されると標準出力にPRのURLが出力されます。

おまけ

ちなみにgh prコマンドにはviewというサブコマンドもあるのでこれを使うと一気に作ったPRをWebブラウザで開いたりもできます。

echo -e "hoge\nfuga\npiyo" | xargs -I DIR -n 1 sh -c "cd DIR && gh pr view --web"

他のCLIツールとの組み合わせがかなり強いことを実感しました、という話。

ヘルプ見ていると他にもたくさんコマンドが用意されていてほとんど日常的にやる操作だったらCLIで完結できてしまいそうな勢いです。

シェル芸に長けている人とかだと、僕が4つに分けてやった作業とかももっと上手くやっちゃうんだろうなという気がしていますが、何かの参考になれば幸いです。

もしもサポートをいただいたら全額趣味に使います!🚲🧑‍💻📷