GitHub CLIでIssuesを日付絞りで取得してみる

GitHub CLIのコマンドヘルプを見た限り、オプション検索では日付指定ができないのかと思いきや、ドキュメントにはきっちり記載されていたので試してみました。
2021.04.16

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

GitHubは普段ブラウザベースで操作を行っているのですが、Issue一覧をコピーしてきての振り返りを行う場合にはブラウザベースだと中々手間がかかります。代わりにとGitHub REST APIを用いてみましたが、利用したtokenの発行アカウント由来のIssueに限定されると分かり、やむなくブラウザベースでのコピペに戻りました。

GitHub CLIをアップデートしたついでにと何か使えないかと調べてみた結果、期待した動作となりました。パラメータ指定で若干不便な感じもありましたが、対策も踏まえての使い方を書いてみます。macOS環境前提となります。

インストール手続き

以下の記事に従って操作することで完了します。

Issue一覧の取得

これ自体は特に特別な操作も要りません。

% gh issue list

Showing 29 of 29 open issues in xxx/yyy

#401  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                                           about 4 days ago
#400  YYYYYYYYYYYYYYYYYYYYYYYYYYYY                                                                (refactor)         about 7 days ago
#395  ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ                                                     (enhancement)      about 9 days ago

コツはオプション指定にての絞り込みです。これはブラウザ上から行える操作と同一になります。

% gh issue list -h

List and filter issues in this repository

For more information about output formatting flags, see `gh help formatting`.

USAGE
  gh issue list [flags]

FLAGS
  -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)

INHERITED FLAGS
      --help                     Show help for command
  -R, --repo [HOST/]OWNER/REPO   Select another repository using the [HOST/]OWNER/REPO format

EXAMPLES
  $ gh issue list -l "bug" -l "help wanted"
  $ gh issue list -A monalisa
  $ gh issue list -a @me
  $ gh issue list --web
  $ gh issue list --milestone "The big 1.0"
  $ gh issue list --search "error no:assignee sort:created-asc"

LEARN MORE
  Use 'gh <command> <subcommand> --help' for more information about a command.
  Read the manual at https://cli.github.com/manual

日付指定でIssueを取得する

上記ヘルプのポイントは、EXAMPLESに日付指定例が含まれていないところです。ドキュメントに記載はされています。

option detail
language:c# created:>2011-01-01 state:open C# で記述されたリポジトリの 2011 年より前に作成されたオープンな Issue にマッチします。
weird in:body updated:>=2013-02-01 2013 年 2 月以降に更新された、本文に「weird」という単語を含む Issue にマッチします。

ネックなのは、日付が固定指定になってしまうところです。そこで一工夫して実行時から数日遡ってのIssueを拾う形にします。

gh issue list --search "updated:>=`date -d "now 7days ago"  "+%Y-%m-%d"`"

これで7日前から現在までのIssue一覧が取得できるようになります。

以下は更にMarkdownで整形したい場合の一例です。

% gh issue list --search "updated:>=`date -d "now 7days ago"  "+%Y-%m-%d"`" | awk '{print "- [" $3 "](https://github.com/USER/REPONAME/issues/" $1 ")"}'

あとがき

コマンドのヘルプ例に日付指定が記載されていなかったため使い物にならないと思い込んでいましたが、ドキュメント側には記載があったので一工夫してみました。

PullRequestも同じ様に取得できるようなので、少し頑張ってみようと思います。