ghコマンドでGitHub上にあるコードを検索
2023-01-10
はじめに
ghという GitHub 上の操作を CLI 上でできるツールがあります。例えばリポジトリの検索や、issue/PR の Open/Close などなど… そして、GitHub 上のコードを検索する機能もあります。今回は実際にどうやって検索するかについて書いています。
gh
のバージョンは以下のとおりです。
gh --version
gh version 2.21.2 (2023-01-03)
gh auth login
ですでにセットアップは終わっている前提で進めます。
検索に使うオプション
gh api
を使うことで実際に検索ができます。
sample
オーガナイゼーションにある、サンプル
という文字列が含まれている、拡張子がmd
になっているファイルを検索するコマンドです。ポイントはサンプル
をパーセントエンコーディングしている点です。自分は最初、パーセントエンコーディングをせずに試していたのでハマり続けました。
gh api \
-H "Accept: application/vnd.github+json" \
"/search/code?q=%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB+org:sample+extension:md"
ここで上げた例以外にも検索条件はたくさんあって、GitHub の公式ドキュメントに色々書いています。(参考 1、参考 2)
これだけでも検索自体はできます。ただし、検索結果が様々な情報を含んだ大きめな Json 形式で返ってくるので、目当てのパラメータを見つけるのが大変です。そんな時はjq
も一緒に使ってあげると任意のパラメータのみを抜き出すことが出来ます。
items配列
の中にあるhtml_url
を抜き出すコマンドです。
gh api \
-H "Accept: application/vnd.github+json" \
"/search/code?q=%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB+org:sample+extension:md" \
--jq '.items[].html_url'
jq
はすごく高機能で、ここで紹介した以外にも CSV に変換するオプションなどもあります。
最後に
gh api
を使うことで CLI 上から GitHub の検索結果を取得する方法について書いてみました。
業務でリポジトリ内を検索することがあったのですが、「gh コード 検索」でググっても GUI 上での検索ばかり引っかかってこの方法を探すのに苦労しました。gh api
自体は、このエンドポイントを呼んでいるっぽくて、こちらを参考にすれば色々できそうな気配は感じています。本当は、GitHub の wiki も検索したいのですがそのエンドポイントは なさそうなので、諦めました。知っている方がいたら教えて下さい。
gh
コマンドは無限の可能性があるなと思いました。もっと触っていきたいなと思います。