開発・運用にて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