📊

tig-ghのメトリクス機能でPRレビュープロセスを可視化・改善する

に公開

この記事は Kyash Advent Calendar 2025 の5日目の記事です。

昨日はtamadonさんの モバイルエンジニアのAI活用事例紹介 でした

はじめに

KyashでBackend Engineering Managerをしているa1yamaです。

チーム開発をしていく上で、PRの書きぶりが人によって違っていたり、PRが長時間放置されたりと、レビュープロセスやリリース頻度に課題を感じることがありました。

もともと個人でGitHubの内容をターミナルで気軽に見れる tig-gh というツールの作成をしていたのですが、上記の課題の解決をしたく、メトリクス機能を追加しました。本記事では、メトリクス機能でレビュープロセスを可視化し、開発フローを改善する方法を紹介します。

tig-gh

tig-ghは、tigライクな操作感でGitHubを管理できるTUIツールです。Issue、Pull Request、Commitなどをターミナルから快適に操作できます。

https://github.com/a1yama/tig-gh

主な特徴

  • tigライクな操作感: j/kでリスト移動、Enterで詳細表示など、tigユーザーに馴染みのあるキーバインディング
  • 複数ビュー対応: Issues、Pull Requests、Commits、Search、Review Queue、Metricsの各ビュー
  • 高速なキャッシュ機構: GitHub API呼び出し結果のメモリ+ファイルキャッシュ
  • (New!!) メトリクス機能: 複数リポジトリのレビュープロセス分析

本記事では、特にメトリクス機能にフォーカスします。

メトリクス機能の詳細

メトリクスビューでは、複数リポジトリのレビュープロセスを多角的に分析できます。以下は実際の表示例です(GoogleのOSSリポジトリを対象にした例)。

1. Overall Lead Time / Review Phase Breakdown

 Lead Time Metrics
Period: 2025-11-20 ~ 2025-12-04 (14 days)
Last updated: 2025-12-04 10:28:13

 Overall Lead Time
Average: 2d 16h 28m  Median: 1d 5h 20m  PRs: 42

 Review Phase Breakdown
  PR Created → First Review:     avg 19h 18m (8 PRs)
  First Review → Approval:       avg 2d 10m (8 PRs)
  Approval → Merge:              avg 1d 3h 42m (8 PRs)
  ─────────────────────────────────────────────
  Total Lead Time:               avg 3d 23h 11m

レビュープロセスを以下のフェーズに分解し、各フェーズの平均所要時間を可視化します。

PR作成 → 初回レビュー → 承認 → マージ

表示内容

  • Created to First Review: PR作成から最初のレビューまでの時間
  • First Review to Approval: 最初のレビューから承認までの時間
  • Approval to Merge: 承認からマージまでの時間
  • Total Lead Time: PR作成からマージまでの全体のリードタイム

活用方法

各フェーズの所要時間を比較して、ボトルネックを特定します。
リードタイムの短縮は、マージ頻度の向上、ひいてはリリース頻度の向上に直結します。

:

  • 「Created to First Review」が長い → レビュアーアサインの自動化やSlack通知の強化を検討
  • 「First Review to Approval」が長い → PRの分割やレビュー観点の明確化を検討
  • 「Approval to Merge」が長い → マージ権限の委譲やCI/CDの高速化を検討

2. Activity by Day of Week

 Activity by Day of Week
         Mon  Tue  Wed  Thu  Fri  Sat  Sun
Merges     5   8  21   6   2   0   0
Reviews    5   0   1   1   0   0   1

曜日ごとのレビュー数とマージ数を可視化します。

表示内容

  • Review Count: 曜日ごとのレビュー数
  • Merge Count: 曜日ごとのマージ数

活用方法

曜日パターンを把握して、デプロイ戦略、リリース頻度やレビュー体制を最適化します。

:

  • 金曜日のマージが多い → 週末前のマージを避けるルールを検討
  • 月曜日のレビューが少ない → 週初めのレビュー促進施策を検討
  • 水曜日のマージが多い → リリース日として適切か評価

3. Weekly Comparison

 Weekly Review Activity (This Week vs Last Week)
Period                       Reviews     Merges
This Week (last 7 days)            3         19
Last Week (8-14 days ago)          3         23
Change                         +0.0%     -17.4%

今週と先週の主要メトリクスを比較し、増減率を表示します。

表示内容

  • This Week: 今週のレビュー数・マージ数
  • Last Week: 先週のレビュー数・マージ数
  • Change Percent: 増減率(%)

活用方法

週次でメトリクスの変化を追跡して、改善トレンドを確認します。

:

  • レビュー数が増加 → レビュー文化が定着している
  • マージ数が減少 → 停滞しているPRの調査が必要
  • 両方とも増加 → チームの開発速度が向上

4. PR Quality Issues

 PR Quality Issues (5 issues)
High Priority:
Repo                            #       Type             Details          Title
google/closure-templates        #205    no_description   0 lines, 0 files Fix "type expression reference" link URL
google/closure-templates        #206    no_description   0 lines, 0 files fix link url to plugins.md
google/closure-templates        #217    no_description   0 lines, 0 files Fixing invalid links
google/guava                    #3617   no_description   0 lines, 0 files fix duplicate words typos in comments
google/guava                    #4034   no_description   0 lines, 0 files google#1409 Add poll() and offer()

PRの品質に関する問題を自動検出します。

検出項目(Type)

  • no_description: PR本文が空のPR
  • short_description: PR本文が50文字未満のPR
  • large_pr: 変更行数が500行以上のPR
  • many_commits: コミット数が15以上のPR
  • large_single_commit: コミット数が1つで変更行数が500行以上のPR

活用方法

品質問題のあるPRを早期に発見して、改善を促します。

:

  • no_description / short_description → 背景や影響範囲の追記を依頼
  • large_pr → PRの分割を推奨
  • many_commits → squashで整理を推奨

5. Stagnant PRs

 Stagnant PRs (Open > 3d)
Total stagnant PRs:  235
Longest waiting PRs:
   1. google/guava #2100 (3801d): UnsignedShort patch as pull request
   2. google/guava #2148 (3744d): byte array searches with start and end limits
   3. google/guava #2180 (3709d): Add tryParse methods to UnsignedBytes...
   4. google/guava #2210 (3690d): Add Futures.getUnchecked with timeout
   5. google/guava #2242 (3654d): preserve the laziness of incoming iterators

3日以上オープンになっているPRを「滞留PR」として検出し、放置されているPRを可視化します。

表示内容

  • Total Stagnant: 滞留PR総数
  • Longest Waiting: 最も古い滞留PRの情報(リポジトリ、PR番号、経過時間)

活用方法

定期的に確認して、放置PRにアクションを促します。

:

  • 毎週月曜日にメトリクスビューで滞留PRを確認
  • 1週間以上経過しているPRはチーム会で状況を共有
  • 不要になったPRはクローズし、必要なPRはレビュアーを追加

6. Per Repository

 Per Repository
Repository                                        Avg       Median    PRs
google/closure-templates                   1d 16h 54m      11h 56m      6
google/go-github                           3d 23h 11m   1d 13h 36m      8
google/guava                                      44m          27m      4
google/meridian                            2d 22h 45m   1d 13h 56m     24

各リポジトリの平均リードタイム、中央値、PR数を表示します。

活用方法

リポジトリ間のパフォーマンスを比較して、改善が必要なリポジトリを特定します。

:

  • リードタイムが長いリポジトリ → レビュー体制やCI/CDの見直し
  • PR数が多いリポジトリ → 開発が活発、または小さすぎるPRが多い可能性
  • リードタイムが短いリポジトリ → 良いプラクティスを他リポジトリに展開

設定方法

メトリクス機能を使用するには、~/.config/tig-gh/config.yaml に対象リポジトリと計測期間を指定します。

~/.config/tig-gh/config.yaml
github:
  token: ghp_xxxxxxxxxxxx
  repositories:
    - your-org/repo1
    - your-org/repo2
    - your-org/repo3

metrics:
  enabled: true
  lead_time_enabled: true
  calculation_period: 720h  # 30日間(720h=30日, 2160h=90日)
  show_review_phases: true
  show_day_of_week: true
  show_weekly_comparison: true
  show_quality_issues: true
  show_stagnant_prs: true
  show_repository_stats: true

まとめ

tig-ghのメトリクス機能を活用することで、以下のような改善に繋げられます。

  1. レビュープロセスの可視化: どこがボトルネックかを定量的に把握
  2. 滞留PRの早期発見: 放置されているPRを定期的に確認
  3. PR品質の向上: 大規模PRや説明不足PRを自動検出
  4. 曜日パターンの把握: デプロイ戦略やレビュー体制の最適化
  5. 継続的な改善: 週次比較で改善トレンドを追跡

メトリクスは「測定すること」が目的ではなく、「改善すること」が目的です。tig-ghを使えば、ターミナルからサクサクとGitHubを操作しながらメトリクスを確認し、チームのレビュープロセスを継続的に改善できます。

個人開発でありながらKyashのバックエンドに合わせた要件定義にしているため、万人向けを想定してはいません。チームメンバーからは「計測ブランチを絞りたい」「もっと気軽に見れるようにしたい」といった意見をもらっており、改善を進めています。今後はメトリクスの定期Slack通知なども検討中です。

チーム定例でもこのツールを使ってPRの整理や状態の確認を行い、レビュープロセスの最適化とリリース頻度の向上を目指しています。

フィードバックやコントリビューションをお待ちしています!

https://github.com/a1yama/tig-gh

それでは、良いレビューライフを!

仲間を募集しています!

Kyashではサーバーサイド と SREのポジションを募集しています。 興味のある方は X のDMYOUTRUST から気軽にご連絡ください!

Kyash 求人一覧 : https://herp.careers/v1/kyash

GitHubで編集を提案
株式会社Kyash

Discussion