AI を使わない PR 自動ラベリングツール「PR Insights Labeler」を公開した
GitHub Actions で PR を自動分類し、レビューの手間を減らすツールを Vibe Coding で作り、Marketplace でも公開しました。
AI を使えば簡単に実現できますが、トークン管理や API コストを気にせず使えるよう、あえて静的解析による実装を選びました。当初は「PR Labeler」という名前でしたが、既存ツールと被っていたため「PR Insights Labeler」にリネームしました。
TL;DR
- PR サイズ・カテゴリ・リスク・複雑度をルールベースで自動ラベリング(AI 不使用)
- GitHub Actions のワークフローに 1 ジョブ追加するだけで導入完了
- サイズやファイル数の品質ゲートで「デカすぎる PR」を防止
- CI Summary にメトリクスと違反を集約し、レビュー前の見通しを向上
- Github Marketplace で公開中:PR Insights Labeler
PR レビューで積み上がっていた課題
- PR サイズがバラバラで、レビュー時間の見積もりが困難
- 変更内容の把握に時間がかかり、テスト有無やドキュメント更新が抜け落ちがち
- リスクの高い変更を見逃す(テストなしのコア変更など)
- 変更量が大きい PR に対して「分割してほしい」と伝えづらい
これらの課題を、自動ラベルと簡易な品質ゲートで先回りすることで、レビュー前の「見通しを良くする」のが狙いです。
PR Insights Labeler とは
GitHub Actions で動く PR ラベリングツールです。
PR が更新されるたびに、変更のサイズ・カテゴリ・リスクを判定してラベルを付けます。
AI には頼らず、すべてルールベースで判定しています。
変更ファイルが多すぎる場合などは、auto/too-many-files や auto/large-files といった警告ラベルも自動で追加します。
こだわりポイント
- ルールベース:毎回同じ結果が得られるように設計
- 導入 2 分:
actions/checkoutの後に 1 ステップ差し込むだけ - ノイズ抑制:ロックファイルや生成物は自動除外
- 日本語/英語ラベル両対応(
language: "ja"で日本語サマリー)
実際に付与されるラベル
このツールでは、以下のようなラベルが自動的に PR に付与されます:
※PR可, Review effortは別ツールの付与です
-
サイズラベル:
size/small〜size/xxlargeで PR の規模を 5 段階表示 -
カテゴリラベル:
category/tests,category/documentation,category/ci-cdなど、変更内容を分類 -
リスクラベル:
risk/high,risk/mediumで注意すべき変更を警告 -
違反ラベル:
auto/too-many-lines,auto/large-filesで品質基準違反を明示
GitHub Actions Summary でレビュー前の全体像を把握
ジョブ完了時に Summary を生成し、メトリクスや違反を 1 画面に集約しています。
コメントに出してましたが、ノイズになりうるので Summary にまとめるようにしました。
実際の導入方法(2 分で完了)
基本設定
pull_request トリガーで動かし、PR/Issues への書き込み権限を付けるだけです。
name: PR Insights Labeler
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
label:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: write
steps:
- uses: actions/checkout@v4
- uses: jey3dayo/pr-insights-labeler@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
プロジェクトに合わせたカスタマイズ例
- uses: jey3dayo/pr-insights-labeler@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# サイズ制限
file_size_limit: "100KB"
pr_additions_limit: "5000"
# ラベル制御
size_enabled: "true"
category_enabled: "true"
risk_enabled: "true"
complexity_enabled: "false" # デフォルトは無効
# 品質ゲートと出力
fail_on_pr_size: "xlarge" # xlarge以上でジョブ失敗
enable_summary: "true"
# 出力言語
language: "ja" # 日本語サマリー
まとめ
PR Insights Labeler は、レビュー前に PR の「見通しを良くする」前処理ツールです。
- 再現性重視:AI ではなくルールベースで、誰でも同じ基準で判定
- 導入コスト最小:ワークフローに 1 ジョブ追加するだけ
- 段階的な活用:まずはラベリングから始めて、必要に応じて品質ゲートを追加可能
PR レビューの効率化は、一度きりの大改善ではなく、小さな改善の積み重ねです。
このツールが、あなたのチームの PR レビューを少しでも楽にする一助になれば幸いです。
付録:詳細な仕様
サイズ判定の詳細
追加行数とファイル数から PR を 5 段階で分類します。ロックファイル、生成ファイル、テストスナップショットは自動的に除外されます。
| ラベル | 追加行数 | 用途 |
|---|---|---|
size/small |
< 200 | クイックレビュー |
size/medium |
200-499 | 通常レビュー |
size/large |
500-999 | 集中レビュー |
size/xlarge |
1000-2999 | 分割推奨 |
size/xxlarge |
≥ 3000 | ほぼ分割必須 |
カテゴリ分類の詳細
拡張子やパスでカテゴリを自動判定し、レビュー観点を明示します。
| ラベル | マッチ対象 | 例 |
|---|---|---|
category/tests |
テスト | **/*.test.ts |
category/ci-cd |
CI/CD 設定 | .github/workflows/** |
category/documentation |
ドキュメント |
docs/**, *.md
|
category/config |
設定ファイル | *.config.js |
category/spec |
仕様書 | .kiro/specs/** |
category/dependencies |
依存管理 | package-lock.json |
リスク評価と複雑度
-
risk/high:CI 失敗時、または新機能追加でテストなしのコア変更時に付与 -
risk/medium:設定・インフラ変更など、軽くでも目を通したいもの - 複雑度チェック(オプトイン):ESLint の複雑度を見て
complexity/highを追加可能
品質ゲート機能
「大きすぎる PR をレビューに載せない」ためのオプション:
-
fail_on_pr_size:指定サイズ以上ならジョブを失敗させる -
fail_on_large_files:ファイルサイズ上限を超えたら失敗 -
fail_on_too_many_files:変更ファイル数が多すぎる場合に失敗

