Pull Request のレビュー状況を分析する¶
GitHub Actions 上で動くpull-request-analytics-actionを使い、Pull Request のレビュー時間とレビュー参加状況を可視化しました。ワークフローの設定例を示し、公式 README から辿れるサンプルレポートの読み方も解説します。
pull-request-analytics-action とは¶
以下は、公式 README にある機能説明を LLM で要約したものです。
この GitHub Action は、プルリクエストとコードレビューに関するメトリクスを計測し、レポートを issue として生成します。プルリクエストの作成・クローズ、レビューのリクエスト・実施、ディスカッション開始などのユーザーアクションに基づいて、コードレビュープロセスのボトルネック特定、トレンド追跡、重要な偏差検出、注目すべきプルリクエストの分析を支援します。
レポートには、プルリクエストのタイムライン、ワークロード、レビュー参加者視点からのディスカッションの活発さ、変更要求、コメント数、承認状況などが、表やグラフ、リストで表示されます。日付範囲、メトリクスの種類、グラフの種類、表示ユーザーなどをカスタマイズ可能です。出力形式は issue、markdown、JSON から選択できます。
主な機能は、レビュー段階の遅延箇所の特定、時間経過によるレビュー状況の変化分析、チームや開発者間のメトリクスの違いによる潜在的問題点の特定、重要なプルリクエストの分析簡素化です。 複数のリポジトリや組織からのデータ収集には、適切なスコープを持つ Personal Access Token の使用が推奨されます。
つまり、PR の作成からレビュー、クローズまでの一連のアクションを追跡するアクションです。レビュー段階の遅延箇所やチーム間の差を、Issue 上のレポートとして可視化できます。
使い方¶
公式 README の設定例をもとにワークフローを作成し、GitHub Actions のworkflow_dispatchから手動実行します。設定例に登場する入力とパラメータの役割は次のとおりです。
| 項目 | 役割 |
|---|---|
report_date_start / report_date_end | 手動実行時の入力。集計期間(d/MM/yyyy)を指定する |
REPORT_DATE_START / REPORT_DATE_END | 上の入力を受け取るパラメータ |
GITHUB_TOKEN | GitHub のトークン(必須)。Issues と Pull Requests の読み書き権限が要る |
GITHUB_REPO_FOR_ISSUE / GITHUB_OWNER_FOR_ISSUE | レポートを出力する Issue の作成先 |
GITHUB_OWNERS_REPOS | 集計対象のリポジトリ |
CORE_HOURS_START / CORE_HOURS_END | コアタイムの開始・終了時刻(HH:mm) |
TIMEZONE | アクションで使うタイムゾーン(既定は UTC) |
上表の設定を.github/workflows/配下のワークフローファイルに反映すると、次のようになります。
例¶
ワークフローを実行すると、GITHUB_REPO_FOR_ISSUEとGITHUB_OWNER_FOR_ISSUEで指定したリポジトリの Issue にレポートが生成されます。以下は、公式 README の Report Examples から辿れるサンプル(Last N PRs Report)の抜粋です。
timeline の例¶
サンプルの集計対象は、更新日時が新しい Pull Request 50 件です。サンプルの数値だけでチーム全体の優劣を判断せず、レビューの滞留箇所を探す材料として、2023 年 12 月分の集計を読んでいきます。
Pull Request report¶
This report based on 50 last updated PRs. To learn more about the project and its configuration, please visit Pull request analytics action.
Below are the settings applied for this report:
冒頭の設定ブロックのうち、レポートの読み方に関わるパラメータは次のとおりです。
| パラメータ | サンプルでの値 | 意味 |
|---|---|---|
GITHUB_OWNERS_REPOS | owner/repo | 集計対象のリポジトリ |
GITHUB_OWNER_FOR_ISSUE / GITHUB_REPO_FOR_ISSUE | issue-owner / issue-repo | レポートを出力する Issue の作成先 |
SHOW_STATS_TYPES | timeline, workload, pr-quality, code-review-engagement | 集計する統計の種類 |
TOP_LIST_AMOUNT | 3 | longest-pending などのリストに表示する PR の件数 |
AGGREGATE_VALUE_METHODS / PERCENTILE | percentile / 75 | timeline の集計方法 |
PERIOD_SPLIT_UNIT | months | 集計期間を区切る単位 |
Pull requests timeline(percentile75) 12/2023¶
Time to review - time from PR creation to first review. Time to approve - time from PR creation to first approval without requested changes. Time to merge - time from PR creation to merge.
user Time to review Time to approve Time to merge Total merged PRs dev1 3 hours 34 minutes 7 hours 32 minutes 14 hours 9 minutes 22 dev2 4 hours 4 hours 23 hours 1 minute 13 dev3 15 hours 16 minutes 24 hours 7 minutes 53 hours 43 minutes 2 dev4 2 hours 41 minutes 9 hours 15 minutes 47 hours 41 minutes 8 dev5 5 hours 59 minutes 18 hours 55 minutes 40 hours 7 minutes 2 total 4 hours 21 minutes 7 hours 36 minutes 26 hours 14 minutes 47 gantt title Pull requests timeline(percentile75) 12/2023 / minutes dateFormat X axisFormat %s section dev1 Time to review(3 hours 34 minutes) : 0, 214 Time to approve(7 hours 32 minutes) : 0, 452 Time to merge(14 hours 9 minutes) : 0, 849 section dev2 Time to review(4 hours) : 0, 240 Time to approve(4 hours) : 0, 240 Time to merge(23 hours 1 minute) : 0, 1381 section dev3 Time to review(15 hours 16 minutes) : 0, 916 Time to approve(24 hours 7 minutes) : 0, 1447 Time to merge(53 hours 43 minutes) : 0, 3223 section dev4 Time to review(2 hours 41 minutes) : 0, 161 Time to approve(9 hours 15 minutes) : 0, 555 Time to merge(47 hours 41 minutes) : 0, 2861 section dev5 Time to review(5 hours 59 minutes) : 0, 359 Time to approve(18 hours 55 minutes) : 0, 1135 Time to merge(40 hours 7 minutes) : 0, 2407 section total Time to review(4 hours 21 minutes) : 0, 261 Time to approve(7 hours 36 minutes) : 0, 456 Time to merge(26 hours 14 minutes) : 0, 1574longest-pending reviews¶
- Feature: PR Title(example) (7 hours 26 minutes)
- Feature: PR Title(example) (7 hours 20 minutes)
- Feature: PR Title(example) (7 hours 10 minutes)
longest-pending approvals¶
- Feature: PR Title(example) (2 hours 15 minutes)
- Feature: PR Title(example) (2 hours 7 minutes)
- Feature: PR Title(example) (2 hours 3 minutes)
longest-pending merge¶
workload の例¶
workload の表は、ユーザーごとの作業量の集計です。開いた PR 数やマージした PR 数に加えて、差分行数や PR サイズの内訳、コメント数、レビュー実施件数を並べています。2024 年 1 月時点の公式 README によれば、この表から個々の開発者とチーム全体の作業量をおおよそ測れます。
Workload stats 12/2023¶
Reviews conducted - number of reviews conducted. 1 PR may have only single review.
PR Size - determined using the formula:
additions + deletions * 0.5. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl
user Total opened PRs Total merged PRs Additions/Deletions PR size: xs/s/m/l/xl Total comments Reviews conducted dev1 24 22 +1448/-3110 14/5/4/0/1 41 8 dev2 14 13 +813/-2062 7/4/1/2/0 6 20 dev3 2 2 +15/-3 2/0/0/0/0 1 10 dev4 8 8 +5416/-4600 6/0/1/0/1 7 9 dev5 2 2 +838/-362 1/0/0/0/1 16 2 total 50 47 +8530/-10137 30/9/6/2/3 71 46
quality の例¶
quality の表では、マージした PR が受けた反応を作成者の視点で集計しています。変更要求(changes requested)を受けた件数、ディスカッションでの合意・不合意の件数、受け取ったコメント数がわかります。2024 年 1 月時点の公式 README によれば、コードレビューで問題が多い箇所を特定し、その程度を数量化するのに役立つ表です。表の後には、コメント数の多い PR へのリンク(The most commented PRs)が続きます。
Pull request quality 12/2023¶
Agreed - discussions with at least 1 reaction
.
Disagreed - discussions with at least 1 reaction
.
user Total merged PRs Changes requested received Agreed / Disagreed / Total discussions received Comments received dev1 22 3 0 / 0 / 10 20 dev2 13 1 0 / 0 / 2 3 dev3 2 0 0 / 0 / 1 1 dev4 8 1 0 / 0 / 4 4 dev5 2 1 3 / 2 / 8 9 total 47 6 3 / 2 / 25 37 The most commented PRs¶
code review engagement の例¶
code review engagement の表は、quality とは逆にレビューする側の視点で集計したものです。ユーザーごとに、レビューで始めたディスカッションの数やコメント数、レビューした PR のサイズ、変更要求・コメント・承認の件数がわかります。
Code review engagement 12/2023¶
PR Size - determined using the formula:
additions + deletions * 0.5. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xlChanges requested / Comments / Approvals - number of reviews conducted by user. For a single pull request, only one review of each status will be counted for a user.
Agreed - discussions with at least 1 reaction
.
Disagreed - discussions with at least 1 reaction
.
user Total merged PRs Agreed / Disagreed / Total discussions conducted Comments conducted PR size: xs/s/m/l/xl Changes requested / Commented / Approved dev1 22 0 / 0 / 0 0 5/2/0/1/0 0 / 0 / 8 dev2 13 3 / 2 / 22 33 10/3/4/0/3 5 / 8 / 20 dev3 2 0 / 0 / 2 3 4/2/1/2/1 1 / 1 / 10 dev4 8 0 / 0 / 0 0 6/2/1/0/0 0 / 0 / 9 dev5 2 0 / 0 / 1 1 2/0/0/0/0 0 / 1 / 2 total 47 3 / 2 / 25 37 30/9/6/2/3 6 / 12 / 46
レポートの構成¶
レポートの構成は、大きく次の区分に分かれます。
| 区分 | 内容 |
|---|---|
| timeline | PR 作成からレビュー・承認・マージまでにかかった時間をユーザーごとに集計し、表とガントチャートで示す |
| workload・quality | 開いた PR 数やコメント数、レビュー結果への合意・不合意といった作業量と反応を集計する |
| code review engagement | 逆にレビューする側として何件対応し、どのサイズの PR にどう反応したかを示す |
| longest-pending 各リスト・most commented PRs | それぞれの指標で滞留・反応が大きかった PR へのリンク集 |
サンプルでは、この 12/2023 単月の集計に続けて、集計期間全体(total)を対象にした同形式のセクションも載っています。表の見出しが「12/2023」から「total」に変わるだけで、行の意味や読み方は単月分と同じです。そのため、ここでは単月分の抜粋にとどめます。
まとめ¶
pull-request-analytics-action を使うと、公式 README の設定例どおりにワークフローを作成してworkflow_dispatchから手動実行するだけで、Pull Request のレビュー時間や参加状況を Issue 上のレポートとして可視化できます。GITHUB_OWNERS_REPOSなどの入力パラメータで集計対象を指定でき、出力する統計の種類や集計単位、percentile もカスタマイズできます。サンプルレポートを読むときは、timeline・workload・quality・code review engagement のどの観点の表かを意識してください。数値の優劣そのものよりも、レビューの滞留箇所を探す材料として扱うとよいです。