ghコマンドでGitHub上にあるコードを検索

2023-01-10

はじめに

ghという GitHub 上の操作を CLI 上でできるツールがあります。例えばリポジトリの検索や、issue/PR の Open/Close などなど… そして、GitHub 上のコードを検索する機能もあります。今回は実際にどうやって検索するかについて書いています。

ghのバージョンは以下のとおりです。

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を抜き出すコマンドです。

jqで任意のパラメータを抜き出す例
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コマンドは無限の可能性があるなと思いました。もっと触っていきたいなと思います。

参考サイト

Tatsumi0000

Written by Tatsumi0000 モバイル開発が好きなエンジニアのブログです. GitHub

Copyright © 2023, Tatsumi0000 All Rights Reserved.