GitHub Issuesの進捗一覧をワンライナーでサクッと取ってみた

GitHub Issuesベースで始めたチケット管理での進捗報告をするに当たって、issuesの一覧化する方法をなんとかすべくAPIを使ってこしらえてみました。
2020.03.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

GitHub Issuesでのチケット管理を始めてから幾日か経ち、Pull-Requestのmergeと同時にissueが自動完了する手軽さはすごいなと感じているところです。

ただ、これまでの進捗報告用のマクロが流用できず、望んだ通りのフォーマットで都合いい感じにデータが取れるようなスニペットもなかなか落ちておらず、止む無くこしらえてみました。

GitHub Issuesへのapiアクセス

Issuesを一覧で取得するAPIが存在しており、今回はそれを利用しました。

Issues | GitHub Developer Guide

必要なのはPersonal Access Tokenの発行のみです。

今回欲しかったデータ

大体以下のデータさえ取っておけば振り返りには問題ないとしました。番号も取っているのは長いタイトルの読み上げを防ぐためです。

  • number
  • title
  • state
  • url

スニペット

6日前までに更新があったissueを取得しています。

% curl -X GET -u "$USERNAME:$PERSONAL_ACCESS_TOKEN" -H "Time-Zone: Asia/Tokyo" https://api.github.com/repos/:user/:repos/issues\?state=all | \
   jq -r '.[] | if (.updated_at|fromdate) > now - (60 * 60 * 24 * 6) then .title = "- (" + .state + (if .pull_request == null then "-pr" else "-issue" end) + ") No." + (.number|tostring) + " " + .title + " " + .html_url else empty end | .title'
- (open-issue) No.142 ワンライナーをこしらえる https://github.com/repos/USER/REPOS/issues/111
- (closed-pr) No.139 READMEを書き直す https://github.com/repos/USER/REPOS/issues/110

このAPIで気をつける点はissuepull-requestをひとまとめにして返しているところです。issueには.pull_requestのKeyが存在しないため、null判定となるかどうかでprissueの出し分けをしています。

また、state=allを付けることでOpen状態のみ取れる状況を回避しています。パラメータ部分のクエスチョンをエスケープさせないとエラーとなるため要注意です。

あとがき

色々と想定外のハマりどころはあったものの、大体求めていたフォーマットに出来ました。jqが色々な加工に対応していることに驚きつつも、あれこれひねる程可読性が落ちていくのは課題だなと感じています。

markdown形式でサクッと一覧を作りたい人の参考になれば幸いです。