GitHub公式が提供しているCLI. IssueやPull RequestをCLIから取得できる。
$ gh pr list --state all Showing 25 of 25 pull requests in suusan2go/kotlin-fill-class that match your search #50 Add IntelliJ v2021.1 as a target for the plugin renatomrcosta:target-version-2021.1 #49 Introduce options t-kameyama:introduce_options #45 Updating dependencies & target IntelliJ version steinhauer-software:fix/44-add-support-for-2020-3
簡単にIssueやPRを引っ張ってこれるだけかと思いきや、listコマンドにはかなりの数のオプションがある。
-a, --assignee string Filter by assignee -A, --author string Filter by author -q, --jq expression Filter JSON output using a jq expression --json fields Output JSON with the specified fields -l, --label strings Filter by labels -L, --limit int Maximum number of issues to fetch (default 30) --mention string Filter by mention -m, --milestone number Filter by milestone number or `title` -S, --search query Search issues with query -s, --state string Filter by state: {open|closed|all} (default "open") -t, --template string Format JSON output using a Go template -w, --web Open the browser to list the issue(s)
--json
オプションでJSONとして出力できるのは想像の範囲内だけど、-q
オプションではなんとjq
のシンタックスでJSONの操作ができる。これと --search
なりのオプションを組み合わせることで、特定のラベルをもつIssueを月毎に集計するなんてことも可能になる。
以下は foo
ラベルをもつIssueを月毎に集計する例です。jq自体はそんなにガッツリやったことがなく、ググリながら組み立てたのでもっと効率がいい方法があるかもしレません。
gh issue list --search "label:foo" --limit 100 -s all --json "id,title,labels,createdAt" \ -q 'map({month: .createdAt | .[0:7]}) | group_by(.month)[] | {month: .[0].month, count: length} | [.month, .count] | @csv'
GraphQLのAPIを使った簡単なプログラムを作ろうかなと思ったけど、全然これで十分だった。流石にもうちょっと詳しい集計をしたくなったら自前で何か組んだ方が良いとは思う。