本文へ移動
cccskills
無料GitHub で公開

review-learn

PRレビューで受けた指摘をCLAUDE.mdのルールとして蓄積するスキル。`/review-learn` または `/review-learn #123` で使用。レビュアーの知見をチーム全体の資産に変換し、同じ指摘を繰り返さないコードベースを実現する。

インストール方法を見る

含まれるファイル(2)

  • SKILL.md12.5 KB
  • README.md5.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Review Feedback Learner

PRレビューで受けた指摘をCLAUDE.mdのルールとして蓄積するスキル。レビュアーの知見をチーム全体の資産に変換する。

目的

Boris Cherny氏のTip #3「CLAUDE.mdへの投資」の拡張版:

  • PRレビューで指摘されたパターンをCLAUDE.mdに自動蓄積
  • 同じ指摘を繰り返し受けることを防止
  • レビュアーの暗黙知をチーム全体で共有

lessons-md-managerとの補完関係

スキル学びの源泉タイミング
/lessons自分で気づいた失敗・修正セッション終了時
/review-learn他者からの指摘PRマージ後

両方使うと、個人の気づき+チームの知見が蓄積される。

トリガー

  • /review-learn - 直近のマージ済みPRから学ぶ
  • /review-learn #123 - 指定PRのレビューコメントから学ぶ
  • /review-learn --my-prs - 自分が作成したPRのレビューから学ぶ(直近5件)
  • 「PRレビューから学んで」「レビュー指摘をまとめて」等の自然言語

System Instructions

ステップ1: 対象PRの特定

引数がある場合(PR番号指定)

# PR番号からレビューコメントを取得
gh pr view {PR番号} --json number,title,author,reviewDecision,reviews,comments

引数がない場合(直近のマージ済みPR)

# 直近にマージされた自分のPRを取得
gh pr list --author @me --state merged --limit 5 --json number,title,mergedAt

ユーザーに対象PRを確認する:

直近のマージ済みPR:
1. #123 - Fix animation flickering (2日前)
2. #120 - Add user authentication (5日前)
3. #118 - Refactor API client (1週間前)

どのPRのレビューから学びますか?(番号 or 全て)

ステップ2: レビューデータの取得(GraphQL + REST ハイブリッド)

変更理由: isResolved / isOutdated は REST API では取得できず、GraphQL でのみ取得可能。 対応済み判定に必須のため、GraphQL をメインのデータ取得手段として使用する。

# GraphQL でレビュースレッド・コミット・レビューを一括取得
gh api graphql -f query='
query($owner: String!, $repo: String!, $pr: Int!) {
  repository(owner: $owner, name: $repo) {
    pullRequest(number: $pr) {
      author { login }
      commits(last: 100) {
        nodes {
          commit {
            committedDate
            message
            additions
            deletions
          }
        }
      }
      reviewThreads(first: 100) {
        nodes {
          isResolved
          isOutdated
          path
          comments(first: 10) {
            nodes {
              author { login }
              body
              createdAt
            }
          }
        }
      }
      reviews(first: 50) {
        nodes {
          author { login }
          state
          body
        }
      }
    }
  }
}
' -f owner='{owner}' -f repo='{repo}' -F pr={pr_number}

取得データの用途:

  • reviewThreads: 各スレッドの isResolved / isOutdated で対応済み判定
  • commits: コメント後の同一ファイルへのコミット有無を確認
  • reviews: APPROVED レビューの body から具体的指摘を抽出
  • author: PR作者の特定(返信の判別に使用)

ステップ2.5: 対応済みフィルタリング

目的: 「対応した指摘のみをナレッジ化する」ためのフィルタ。 Bot の的外れな指摘や、未対応のコメントをノイズとして除外する。

2a. コメント著者の分類

著者種別判定方法デフォルト扱い
Botlogin が [bot] で終わる or GitHub API の is_bot蓄積対象外
人間上記以外蓄積候補

2b. 「対応済み」判定ロジック(信頼度順)

以下の順で判定し、最初にマッチした条件を採用する:

対応済み判定(thread):
  1. thread.isResolved == true → 対応済み(確定)
  2. thread.isOutdated == true かつ
     thread.comments[0].createdAt 以降に同一ファイル(thread.path)へのコミットあり
     → 対応済み(高確度)
  3. PR作者からの返信に対応キーワードあり
     ("対応しました", "修正しました", "fixed", "done", "updated")
     → 対応済み(中確度)
  4. いずれにも該当しない → 未対応

2c. 著者種別 × 対応状況のマトリクス

対応済み未対応
Bot蓄積候補に昇格除外(デフォルト)
人間蓄積候補(高優先)除外
  • Bot でも対応した指摘は有用なため蓄積候補に含める
  • 人間でも未対応(放置)の指摘は的外れだった可能性があるため除外

2d. APPROVED レビュー body の特別処理

レビュー state: APPROVED の body に具体的な指摘(番号付きリスト等)が含まれる場合:

  • APPROVED = レビュアーが対応を確認済みという強いシグナル
  • body 内の各ポイントを個別の蓄積候補として扱う
  • これらは「対応済み(確定)」として扱う

例: APPROVED レビューの body が以下の場合

LGTMです。以下の修正ありがとうございました:
1. LifecycleResumeEffectの追加
2. トリガーイベントの送信タイミング修正

→ 2つの個別の蓄積候補として抽出

ステップ3: コメントの分類

レビューコメントを以下のカテゴリに分類:

カテゴリ判定基準例
命名規則変数名、関数名、クラス名への指摘「fetchではなくgetを使う」
アーキテクチャレイヤー構造、依存方向への指摘「ViewModelからRepositoryを直接呼ばない」
エラーハンドリング例外処理、Resultパターンへの指摘「Resultでラップして呼び出し元で処理」
テストテストコード、カバレッジへの指摘「エッジケースのテストを追加」
パフォーマンス効率、最適化への指摘「N+1クエリに注意」
セキュリティ脆弱性、認証への指摘「入力値のサニタイズ」
コードスタイルフォーマット、可読性への指摘「早期リターンを使う」
ドキュメントコメント、READMEへの指摘「公開APIにはdocstringを」

ステップ4: ルール化可能な指摘の抽出

以下の基準で「ルール化すべき指摘」を抽出:

抽出対象:

  • 繰り返し適用できる一般的なパターン
  • プロジェクト固有の規約・慣習
  • 「〜すべき」「〜しないこと」という形式化できる指摘

除外対象:

  • タイポの指摘(1回限り)
  • 特定のバグ修正(再現性なし)
  • 好みの問題(「私なら〜する」)
  • 曖昧なコメント(「ここ気になる」)
  • 未対応のコメント(ステップ2.5のフィルタで除外済みだが、明示的に除外)
  • Bot コメントで対応していないもの
  • resolve せずに放置されたスレッドで対応コミットもないもの

ステップ5: 既存ルールとの重複チェック

  1. CLAUDE.mdを読み込む
  2. 既存の Lessons Learned / Review Learnings セクションを確認
  3. 意味的に重複する指摘は除外
  4. 既存ルールを補強・具体化する指摘は更新案として提示

ステップ6: ルール案の生成

以下のフォーマットでルール案を生成:

### {カテゴリ名}
- {具体的なルール}。{理由や背景}
  - 📝 PR #{PR番号} で @{レビュアー} さんが指摘

記述の品質基準:

  • 肯定形で記述(「〜しないこと」より「〜を使うこと」)
  • 具体的なコード例やパターンを含める
  • なぜそうすべきかの理由を添える
  • 元の指摘者をクレジット

良い例:

### 命名規則
- Repository層のメソッドは `fetchXxx` ではなく `getXxx` を使う。fetchは非同期を暗示するが、Repositoryは同期/非同期を抽象化するため
  - 📝 PR #123 で @tanaka さんが指摘

### エラーハンドリング
- API呼び出しでは `Result<T, E>` でラップし、呼び出し元で処理する。例外を投げると呼び出し側でtry-catchが必要になり、漏れやすい
  - 📝 PR #120 で @suzuki さんが指摘

ステップ7: ユーザー確認と追記

蓄積候補を対応確度別にグループ化して表示する:

## 蓄積候補(対応済み指摘から抽出)

### 確実に対応した指摘(resolved / APPROVED body)
1. {指摘の要約} → {対応内容}
   - 📝 PR #{PR番号} で @{レビュアー} さんが指摘
   → ルール案: 「{具体的なルール文}」

### おそらく対応した指摘(outdated + コミットあり)
2. ...(該当があれば表示)

---
除外した指摘: Bot未対応 {N}件 / 人間未対応 {N}件
(詳細を見たい場合は「除外した指摘を見せて」と伝えてください)
  1. 上記の形式で蓄積候補を提示
  2. ユーザーに追記するか確認(個別に選択可能)
  3. 承認されたらCLAUDE.mdに追記
  4. 「除外した指摘を見せて」と言われた場合は除外理由付きで一覧表示

追記先セクション:

  • ## Review Learnings セクションがあればそこに追記
  • なければ ## Lessons Learned の後に作成
  • どちらもなければCLAUDE.md末尾に新規作成

ステップ8: CLAUDE.mdへの書き込み

## Review Learnings

このセクションはPRレビューで受けた指摘から自動生成されました。
`/review-learn` コマンドで更新できます。

### 命名規則
- Repository層のメソッドは `fetchXxx` ではなく `getXxx` を使う
  - 📝 PR #123 で @tanaka さんが指摘

### エラーハンドリング
- API呼び出しでは `Result<T, E>` でラップする
  - 📝 PR #120 で @suzuki さんが指摘

エラーハンドリング

エラー1: GitHubリポジトリではない

  • gitルートを確認し、GitHub remoteがあるかチェック
  • ない場合はエラーメッセージを表示

エラー2: gh CLIが未認証

GitHub CLIが認証されていません。
以下のコマンドで認証してください:
$ gh auth login

エラー3: PRにレビューコメントがない

  • 「このPRにはレビューコメントがありませんでした」と表示
  • 別のPRを選択するよう促す

エラー4: 自分のPRがない

  • 「マージ済みのPRが見つかりませんでした」と表示
  • PR番号を直接指定するよう促す

複数人リポジトリでの価値

シナリオ効果
新メンバー参加過去のレビュー指摘が蓄積済み。同じミスをしない
レビュアー同じ指摘を繰り返す手間が減る
チーム全体暗黙知が形式知化され、コード品質が均一に
オンボーディング「なぜこのルール?」の背景(PR番号)が追跡可能

重要事項

  • CLAUDE.mdはプロジェクト全体で共有されるファイル。慎重に編集すること
  • 既存の内容は変更しない(追記のみ)
  • レビュアーへのクレジットを必ず残す(敬意+追跡可能性)
  • 追記・変更は必ずユーザーの承認を得てから実行する
  • プラットフォーム非依存: あらゆるGitHubリポジトリで使用可能

バージョン

v1.1 - 対応済みフィルタリング (2026-02-16)

  • Bot vs 人間のコメント自動分類
  • GraphQL API で isResolved / isOutdated を取得
  • 「対応した指摘のみ蓄積」フィルタ導入
  • APPROVED レビュー body の解析対応
  • 確度別グループ表示

v1.0 - 初回リリース (2026-02-07)

  • PRレビューコメントからルールを抽出
  • カテゴリ自動分類
  • 重複チェック
  • レビュアークレジット付きでCLAUDE.mdに追記
  • lessons-md-managerとの補完設計

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

android-api-client

無料日本語概要

Retrofit + OkHttpを使用したAPIクライアント実装のベストプラクティスを提供する。 「API実装」「APIクライアント」「Retrofit」「OkHttp」「ネットワーク」と言われたら使う。

xtone/ai_development_tools32026年10月7日 更新

android-architecture

無料日本語概要

Androidプロジェクトのアーキテクチャ設計を支援。プロジェクト特性に応じてMVI/MVVM/シンプルComposeから最適なパターンを提案し、パッケージ構造の設計と既存プロジェクトの分析を行う。

xtone/ai_development_tools32026年10月7日 更新

android-crash-analyzer

無料日本語概要

Firebase Crashlyticsのスタックトレースを解析し、トリアージ分類→根本原因分析→修正提案を出力するスキル。/crash-analyze コマンド、クラッシュ解析、スタックトレース分析、ANR分析、Crashlytics、クラッシュレポート、またはFirebase crashに関連するリクエストで使用される。クラッシュ対応のワークフローを標準化し、対応品質と速度を向上させる。ANR/Non-fatal/Fatal全タイプ対応。

xtone/ai_development_tools32026年10月7日 更新

Android data layer implementation guide. Provides comprehensive patterns for Room Database (Entity, DAO, Migration), DataStore (Preferences), Repository layer design, and common pitfalls. Use when implementing local data storage, cache strategies, or data source integration in Android projects.

日本語の概要は準備中です。原文の説明を表示しています。

xtone/ai_development_tools32026年10月7日 更新

android-test-runner

無料日本語概要

重要: ユーザーがAndroidテスト実行をリクエストした場合、常にこのスキルを最初に使用してください。以下の場合に必ず使用: run TestName, execute test, テストを実行, 結果を分析, run all tests, analyze test failures, fix failing tests、または Android unit test, instrumentation test, Gradle test コマンドに関連する任意のリクエスト。./gradlew test や Bash コマンドを直接使用しないでください - 常にこのスキルに委譲してください。Multi-variantプロジェクト、JAVA_HOME セットアップ、一般的なテストパターンに対応しています。

xtone/ai_development_tools32026年10月7日 更新

android-ui-guidelines

無料日本語概要

Jetpack ComposeでUIを実装する時に参照するコーディングガイドライン。 「Android UI」「Compose」「Jetpack」「画面実装」「UIコンポーネント」「レイアウト」と言われたら使う。 Android/Kotlin UI実装のベストプラクティス、アンチパターン、実装パターンを提供する。

xtone/ai_development_tools32026年10月7日 更新

xtone のスキルをすべて見る

このスキルの問題を報告する