LoginSignup
9
5

More than 3 years have passed since last update.

Github APIでリポジトリのIssue一覧をCSV出力

Posted at

開発・運用にてGithubのIssueで問題・課題を管理している場合、
上司や顧客への定例報告などで、特定の期間に発生またはクローズしたIssueを提出・報告する必要があるかもしれません。
そんなときに一括でCSV出力する方法です。

基本コマンド

以下コマンドで30件Issueを取得可能

curl -u ":username" "https://api.github.com/repos/:owner/:repos/issues?state=open" jq -r '["number","title","html_url"], (.[] | [.number,.title,.html_url]) | @csv' > issues.csv

ご参考
GitHub issuesからCSV出力するコマンド

  • :username→githubの自身のアカウント名
  • :owner→owner名
  • :repo→リポジトリ名

例:11月1日以降にクローズしたIssueを更新日付の降順で取得。取得項目はnumber、タイトル、URL、クローズ日

curl -u "yamada" "https://api.github.com/repos/githubtest/testrepo/issues?state=closed&per_page=100&sort=updated&direction=desc&since=2020-11-01" | jq -r '["number","title","html_url","closed_at"], (.[] | [.number,.title,.html_url,.closed_at]) | @csv' > issues.csv

トラブルシューティング

jqのインストール

jqをインストールしていない場合以下エラーが発生

jq: command not found

jqをインストールすれば解決。私の場合Mac環境なのでHomebrewでインストール

brew install jq

github認証エラー

コマンド実行後にパスワードを求められる。認証失敗した場合、404のjsonレスポンスが返ってきてnumberが見つからず以下エラー表示となる。

jq: error (at <stdin>:4): Cannot index string with string "number"
  • ユーザ名とパスワードを確認する
  • githubアカウントに二段階認証が有効になっている場合、Personal Access Tokenを設定し、パスワードにトークン文字列を入力する必要がある。トークンの設定方法は以下参照
    GitHub「Personal access tokens」の設定方法

主なパラメータ

state

  • オープンかクローズかフィルター
  • state=open またはstate=closed と指定
curl -u ":username" "https://api.github.com/repos/:owner/:repos/issues?state=closed" jq -r '["number","title","html_url"], (.[] | [.number,.title,.html_url]) | @csv' > issues.csv

page

  • Issueが複数ページに渡る場合、ページ番号を指定可能
  • page=2 のように指定
curl -u ":username" "https://api.github.com/repos/:owner/:repos/issues?state=closed&page=2" jq -r '["number","title","html_url"], (.[] | [.number,.title,.html_url]) | @csv' > issues.csv

per_page

  • 1ページあたりの取得件数
  • デフォルトで30件。最大100件まで指定可能
  • per_page=100 のように指定
curl -u ":username" "https://api.github.com/repos/:owner/:repos/issues?state=closed&per_page=100" jq -r '["number","title","html_url"], (.[] | [.number,.title,.html_url]) | @csv' > issues.csv

sort

  • 取得するIssueのソートに使うパラメータを指定。デフォルトはcreated
  • created→作成日時
  • updated→更新日時
  • comments→コメントされた日時

direction

  • sortの昇順、降順を指定。デフォルトは降順
  • asc→昇順
  • desc→降順
curl -u ":username" "https://api.github.com/repos/:owner/:repos/issues?state=closed&per_page=100&sort=updated&direction=desc" jq -r '["number","title","html_url"], (.[] | [.number,.title,.html_url]) | @csv' > issues.csv

since

  • 指定した日付以降のIssueを取得
  • since=YYYY-MM-DD で指定
    • YYYY-MM-DDTHH:MM:SSZでの指定も可能
curl -u ":username" "https://api.github.com/repos/:owner/:repos/issues?state=closed&per_page=100sort=updated&direction=desc&since=2020-11-01" jq -r '["number","title","html_url"], (.[] | [.number,.title,.html_url]) | @csv' > issues.csv

その他

その他のGETパラメータは以下docsを参照。取得されるjsonのサンプルがあるため、表示項目を増やすのにも参考になる。
https://developer.github.com/v3/issues/#list-repository-issues

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5