10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI を使わない PR 支援ツール「PR Insights Labeler」を公開した

Last updated at Posted at 2025-12-01

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-filesauto/large-files といった警告ラベルも自動で追加します。

こだわりポイント

  • ルールベース:毎回同じ結果が得られるように設計
  • 導入 2 分:actions/checkout の後に 1 ステップ差し込むだけ
  • ノイズ抑制:ロックファイルや生成物は自動除外
  • 日本語/英語ラベル両対応(language: "ja" で日本語サマリー)

実際に付与されるラベル

このツールでは、以下のようなラベルが自動的に PR に付与されます:
PR可, Review effortは別ツールの付与です

  • サイズラベルsize/smallsize/xxlarge で PR の規模を 5 段階表示
  • カテゴリラベルcategory/tests, category/documentation, category/ci-cd など、変更内容を分類
  • リスクラベルrisk/high, risk/medium で注意すべき変更を警告
  • 違反ラベルauto/too-many-lines, auto/large-files で品質基準違反を明示

labels-sample.png

GitHub Actions Summary でレビュー前の全体像を把握

ジョブ完了時に Summary を生成し、メトリクスや違反を 1 画面に集約しています。
コメントに出してましたが、ノイズになりうるので Summary にまとめるようにしました。

summary-sample.png

実際の導入方法(2 分で完了)

基本設定

pull_request トリガーで動かし、PR/Issues への書き込み権限を付けるだけです。

.github/workflows/pr-insights-labeler.yaml
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:変更ファイル数が多すぎる場合に失敗

リンク

10
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?