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などをターミナルから快適に操作できます。
主な特徴
-
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 に対象リポジトリと計測期間を指定します。
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のメトリクス機能を活用することで、以下のような改善に繋げられます。
- レビュープロセスの可視化: どこがボトルネックかを定量的に把握
- 滞留PRの早期発見: 放置されているPRを定期的に確認
- PR品質の向上: 大規模PRや説明不足PRを自動検出
- 曜日パターンの把握: デプロイ戦略やレビュー体制の最適化
- 継続的な改善: 週次比較で改善トレンドを追跡
メトリクスは「測定すること」が目的ではなく、「改善すること」が目的です。tig-ghを使えば、ターミナルからサクサクとGitHubを操作しながらメトリクスを確認し、チームのレビュープロセスを継続的に改善できます。
個人開発でありながらKyashのバックエンドに合わせた要件定義にしているため、万人向けを想定してはいません。チームメンバーからは「計測ブランチを絞りたい」「もっと気軽に見れるようにしたい」といった意見をもらっており、改善を進めています。今後はメトリクスの定期Slack通知なども検討中です。
チーム定例でもこのツールを使ってPRの整理や状態の確認を行い、レビュープロセスの最適化とリリース頻度の向上を目指しています。
フィードバックやコントリビューションをお待ちしています!
それでは、良いレビューライフを!
仲間を募集しています!
Kyashではサーバーサイド と SREのポジションを募集しています。 興味のある方は X のDM か YOUTRUST から気軽にご連絡ください!
Kyash 求人一覧 : https://herp.careers/v1/kyash
デジタルウォレットアプリ「Kyash」を開発・運用しています。 もっとKyashを知りたいぞという方は、こちらもぜひご覧ください → blog.kyash.co/
Discussion