GitHub Issue Timeline APIでProjectの状態にとどまった時間を取得する
GitHubにはIssueのタイムラインを取得できるTimeline APIがあります。Issueのコメントだけではなく、たとえば「いつ、どのラベルを付与したか」や「いつ、どのProject Columnに移動したか」などを取得できます。(GitHubドキュメント に記載の通り、GitHub Project に関する情報を Timeline APIで取得する機能は開発者プレビュー段階とのことで、 リクエストヘッダに Accept: application/vnd.github.starfox-preview+json
を付与することで取得できます)
たとえばこんなかんじのコマンドでリクエストできます。
curl \ -H "Accept: application/vnd.github.mockingbird-preview+json" \ -H "Accept: application/vnd.github.starfox-preview+json" \ "https://api.github.com/repos/{owner}/{repo}/issues/{issue_id}/timeline"
こんなレスポンスが返ってきます。(一部を抜粋しています)
[ { "id": 5272014742, "event": "converted_note_to_issue", "created_at": "2021-09-08T12:34:49Z", "project_card": { "id": 68365408, "url": "https://api.github.com/projects/columns/cards/68365408", "project_id": 13191782, "project_url": "https://api.github.com/projects/13191782", "column_name": "TODO" } }, { "id": 5272041752, "event": "moved_columns_in_project", "created_at": "2021-09-08T12:39:42Z", "project_card": { "id": 68365408, "url": "https://api.github.com/projects/columns/cards/68365408", "project_id": 13191782, "project_url": "https://api.github.com/projects/13191782", "column_name": "Doing", "previous_column_name": "TODO" } }, { "id": 915208714, "created_at": "2021-09-08T12:48:10Z", "updated_at": "2021-09-08T12:48:10Z", "author_association": "NONE", "body": "コメント", "performed_via_github_app": null, "event": "commented", }, { "id": 5287257709, "event": "labeled", "created_at": "2021-09-11T06:22:04Z", "label": { "name": "label1", "color": "EAA6C8" } }, { "id": 5287262270, "event": "closed", "created_at": "2021-09-11T06:29:45Z" } ]
event
パラメータによって「なにが行われたか」が分かります。たとえばこんなかんじ。
event | 何が行われたか |
---|---|
labeled | ラベルが付与された |
unlabeled | ラベルが外された |
added_to_project | プロジェクトに追加された |
converted_note_to_issue | プロジェクトカードをIssueにした |
moved_columns_in_project | プロジェクトカードを移動した |
また、各イベントのオブジェクトには created_at
パラメータが存在するので、eventパラメータと組み合わせると、ラベルが付与されていた時間や、プロジェクトのある状態にとどまった時間を集計することができます。
これらを行うGitHub Actionsを書いてみました。
たとえば、私は自身のGitHub Projectで趣味開発のタスク管理をしていたりしますが、このActionsを導入することで、なににどれくらい時間がかかっているかを簡単に確認できるようになります。
こんなかんじに使います。Issueが閉じられたタイミングで、ラベルが付与された時間やプロジェクトにかかった時間をコメントします。
name: issue-closed on: issues: types: - closed jobs: closed: runs-on: ubuntu-latest steps: - name: Report id: report uses: piyoppi/actions-labeled-duration@abf85a23b076409eb646c7319d72c3a9e7167e27 with: labels: label1,label2 # 集計対象のラベル(Optional) project_columns: TODO,Doing # 集計対象のプロジェクトカラム名(Optional) issue_comment: '⌛このIssueの作業にかかった時間は以下の通りです' # Issueのコメント(Optional)
実行するとこんなかんじ になります。
ちまちまと使いながら手を入れていこうと思っています。ではでは。