ghq + peco で GitHub リポジトリを選択しつつ、curl + jq で GitHub API を実行する


以前書いた記事で、curl + jq を使い、Github API で Pull Requestに関する base / head branch を取得できることを試しました。

Github の Pull Request に紐づく base / head branch を curl と jq で取得する

今回は、リポジトリの選択をより簡単にできるよう、ghq + peco でのリポジトリ選択を組み合わせてみることを試しました。

前提環境

※ ghq, peco, jq はいずれも HomeBrew でインストールできます。

準備方針

下記方針で準備していきます。

  • ghq でローカルに GitHub リポジトリの一覧を作成
  • peco で GitHub リポジトリの一覧をインクリメンタルサーチ可能に
  • curl で GitHub API を実行
  • jq でレスポンスを加工

事前準備

GitHub リポジトリのリストを作る

ghq で、Pull Request を確認したいリポジトリをローカルにクローンしておきます。

$ ghq get <repo URL>

ワンライナーを準備

下記ワンライナーをシェルの設定に追記します。
僕の場合は zsh を使っているので、.zshrc にエイリアス登録し、source ~/.zshrc などでロードしておきます。

alias pb='curl -sH "Authorization: token ${GITHUB_API_TOKEN}" "https://api.github.com/repos/$(ghq list | sed s#github.com\/##g | peco)/pulls" | jq ".[] | { number: .number, title: .title, base: .base.ref, head: .head.ref }"'

curl, jq の部分は、以前の記事 を踏襲しています。
追加した部分は、$(ghq list | sed s#github.com\/##g | peco) の部分で、:owner/:repo の部分を抽出してインクリメンタルサーチで選択できるようにしました。

GITHUB_API_TOKEN は、.zshrc にべた書きしたくなかったので、別ファイルgithub_credentialsに切り出し、ロードする形にしました。
※.github_credentials の中身を直接 Git 管理しないよう、.gitignore に指定しておくなど、注意してください!

~/.github_credentials
export GITHUB_API_TOKEN=xxx
GITHUB_CREDENTIAL_FILE=~/.github_credentials
if [ -e $GITHUB_CREDENTIAL_FILE ]; then
  source $GITHUB_CREDENTIAL_FILE
fi

利用方法

alias に登録しておいた pb を実行すると、

ghq でクローンしてきたリポジトリのリストをインクリメンタルサーチできるようになります。

そしてリポジトリを選択すると、リポジトリの Pull Request と source/head branches を確認できるようになります。

今回は facebook/react の Pull Request 一覧を表示してみました。

終わりに

peco + ghq の組み合わせで、 GitHub APi の実行がより便利になりました。
今回は Pull Request に関する API の実行を試しましたが、 Issues など、他の API でも応用できるなと思いました。

参考URL