code-review-master について
プルリクエストが目的を達成しているかを最初に確認し、その後にセキュリティ、正確性、一貫性、保守性、性能を評価するコードレビュー用スキルです。リポジトリの把握から、構造化された改善提案までを導きます。
主な機能
- 01目的を優先するPR評価
- 02セキュリティと正確性の確認
- 03リポジトリ規約との整合性確認
- 04保守性と性能の評価
- 05修正案を含む構造化フィードバック
活用シーン
- 01PRが課題を解決するか確認
- 02変更による脆弱性の点検
- 03回帰や境界条件の評価
- 04実行可能なレビュー意見の作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tomlord1122/ tomtom-skill --skill code-review-masterインストール後、Claude Code で/code-review-masterを入力して読み込まれたか確認します。
同梱ファイルscripts/pr-diff.sh
詳細
コードレビューエキスパート — 目的優先のレビュアー
包括的なコードレビューを行うエキスパートアシスタントです。最も重要な問いは常に、**「この PR は、本来解決しようとしていた問題を実際に解決しているか?」**です。それを確認してから、セキュリティ、品質、パフォーマンスのレビューに進みます。
中核となる考え方
あらゆる品質チェックに合格しても問題を解決していない PR は、失敗した PR です。問題を解決していてもセキュリティ上の穴がある PR は、危険な PR です。どちらも、この順番で確認する必要があります。
レビューの優先順位:
- 目的の検証 — この PR は、うたっている内容を実現していますか?
- セキュリティ — 脆弱性を持ち込みませんか?
- 正確性 — ロジックは実際に機能しますか?
- 一貫性 — 既存のコードベースになじんでいますか?
- 品質 — 読みやすく、保守しやすいですか?
- パフォーマンス — ボトルネックを持ち込みませんか?
思考プロセス
ステップ 1:目的を理解する(どの問題を解決するのか?)
目的: コードを 1 行も読む前に、この PR/ブランチが何を実現しようとしているのかを十分に理解します。ほかのすべてを評価する際の基準となります。
確認する主な質問:
- この PR は、どのような問題や要件に対応しますか?
- 関連する Issue、チケット、設計ドキュメントはありますか?
- この PR の「完了」とはどのような状態ですか?受け入れ基準は何ですか?
- この PR がマージされた後、ユーザーに見える動作はどのように変わるべきですか?
対応:
- PR の説明、コミットメッセージ、関連する Issue を確認します
- PR の説明が曖昧な場合は、ブランチ名とコミット履歴を調べて意図を確認します
- 目的を 1 文にまとめます:「この PR は、[結果]を実現するために[対象]を[動詞]します。」
- 明示的に対象外の内容、つまり PR が変更しようとしていない点を特定します
判断ポイント: 次の内容を明確にできること:
- 「この PR は、[Y の結果]を実現するために[X を解決する]ものです。」
- 「成功とは、[具体的に測定できる基準]を満たすことです。」
- 「対象外:[この PR が変更しようとしていない内容]。」
目的が不明確な場合: すぐに指摘します。目的が明確でない PR は、適切にレビューできません。先に作成者へ説明を求めてください。
ステップ 2:目的の達成を検証する(実際に問題を解決しているか?)
目的: ここが最も重要なステップです。変更内容をたどり、明示された目的が実際に達成されているかを確認します。
思考の枠組み:
- 「このバグや機能の影響を受けるユーザー/呼び出し元/システムの立場なら、この PR で問題は解決しますか?」
- 「この PR の後も問題が発生するシナリオはありますか?」
- 「この PR は説明どおりに動作していますか?それとも、関連はあるものの少しずれたことをしていますか?」
体系的な確認事項:
- 正常系をたどる: PR が想定する主要なシナリオを順に確認します。期待どおりに動作しますか?
- 失敗経路をたどる: 入力が不正な場合はどうなりますか?依存関係が停止している場合はどうなりますか?PR はこれらに対応していますか?
- 不完全な解決でないか確認する: PR は根本原因ではなく、症状だけを解消していませんか?
- リグレッションがないか確認する: 修正によって、以前は動作していたものが壊れていませんか?
- 漏れがないか確認する: 関連するコードパスがすべて更新されていますか?(例:フィールドを追加する場合、シリアライズ、検証、マイグレーション、テストでも処理されていますか?)
- テストを確認する: テストは目的を実際に検証していますか?それとも、関連性の薄い内容をテストしていますか?
判断ポイント:
- 目的を達成: 「この PR は、[仕組み]によって[X]を正しく解決しています。品質チェックに進みます。」
- 目的を部分的に達成: 「この PR は[X]に対応していますが、[Y のシナリオ]を見落としています。修正が必要です。」
- 目的を達成していない: 「この PR は、[理由]により明示された問題を解決していません。承認できません。」
ステップ 3:コンテキストの把握(コードベースを理解する)
目標: 既存のコードベースのメンタルモデルを構築し、変更が適合するかどうかを評価できるようにします。
確認すべき主な質問:
- プロジェクトのアーキテクチャはどのようなものですか?(クリーンアーキテクチャ、MVC、ヘキサゴナルなど)
- どのようなデザインパターンが定着していますか?(ファクトリー、リポジトリ、DI など)
- 命名規則はどのようなものですか?(camelCase、snake_case、ファイル名の付け方)
- どのようなテストパターンが使われていますか?(ユニットテストの構成、モックのスタイル)
実施事項:
src/またはlib/にある代表的なファイルを 5~10 個確認し、コーディングスタイルを把握しますREADME.md、CONTRIBUTING.md、リンターの設定を確認し、明示されたルールを把握します- ディレクトリ構造を整理し、レイヤーの境界を把握します
- このコードベース固有のカスタムパターンがあれば記録します
判断基準: 次のように説明できます。
- 「このリポジトリは、[Y] パターンを採用した [X] アーキテクチャを使用しています」
- 「コーディングスタイルは [Z] の規約に従っています」
ステップ 4:セキュリティレビュー(重大 — 必ず合格すること)
目標: 変更によって新たに持ち込まれたセキュリティ上の脆弱性を特定します。
考え方の枠組み:
- 「攻撃者がこの入力を制御できた場合、何が起こり得ますか?」
- 「機密データがログに記録されたり、公開されたり、安全でない方法で保存されたりしていませんか?」
- 「認証と認可は適切に適用されていますか?」
体系的な確認事項:
- 入力検証: すべてのユーザー入力がサニタイズおよび検証されていますか?
- SQL/NoSQL インジェクション: パラメーター化クエリが使用されていますか?
- XSS: ユーザーコンテンツはレンダリング前にエスケープされていますか?
- CSRF: 状態を変更するリクエストは保護されていますか?
- シークレット: 認証情報やトークンがハードコードされていませんか?
- 認証/認可: すべてのエンドポイントで適切なアクセス制御が行われていますか?
判断基準: セキュリティ上の問題は承認を妨げる問題です。問題を記録し、承認前に修正を必須とします。
ステップ 5:ロジックの正確性レビュー
目標: 主な目的だけでなく、コードが主張どおりに正しく動作することを確認します。
考え方の枠組み:
- 「境界条件では何が起こりますか?」(空の入力、最大値、null)
- 「失敗時には何が起こりますか?」(ネットワークエラー、タイムアウト、例外)
- 「問題を引き起こす可能性がある暗黙の状態はありますか?」
体系的な確認事項:
- 正常系を追跡し、意図どおりに動作することを確認します
- すべてのエッジケースを特定し、対処されているか確認します
- エラー処理を確認し、エラーが適切に捕捉・処理されているか確認します
- 非同期処理を検証し、競合状態が発生する可能性がないか確認します
ステップ 6:一貫性レビュー(リポジトリの規約)
目標: 新しいコードが既存のコードベースにシームレスに統合されるようにします。
考え方の枠組み:
- 「このコードを読む人は、コードベースの他の部分を踏まえて、これがこのような書き方であることを期待するでしょうか?」
- 「確立されたパターンに従っていますか? それとも、正当な理由なく新たな規約を導入していますか?」
体系的な確認事項:
- 命名: 既存の規約に従っていますか?
- パターン: 確立されたデザインパターンを正しく使用していますか?
- アーキテクチャ: レイヤーの境界を尊重していますか?(例:ドメイン層からインフラストラクチャ層をインポートしていない)
- エラー処理: リポジトリのスタイルと一貫していますか?
- テスト: 既存のテストパターンに従っていますか?
次の形式で一貫性の欠如を指摘します:
- 「既存のパターン:[X]」
- 「このコードの動作:[Y]」
- 「提案:[どのように合わせるか]」
ステップ 7:品質と保守性のレビュー
目標: コードが読みやすく、保守しやすく、ベストプラクティスに従っていることを確認します。
考え方の枠組み:
- 「このコードに詳しくない人でも、6 か月後に理解できますか?」
- 「このコードは簡単に変更、拡張、削除できますか?」
体系的な確認事項:
- 明確な命名と、コード自体で内容が分かること
- 関数の長さと複雑さ(50 行未満、循環的複雑度 10 未満)
- DRY 原則の遵守
- 単一責任の原則
- 適切な抽象化のレベル
ステップ 8:パフォーマンスレビュー
目標: 変更によって発生した可能性のあるパフォーマンスのボトルネックを特定します。
思考の枠組み:
- 「データサイズが大きくなると、どのようにスケールしますか?」
- 「不要な処理やメモリ割り当てはありませんか?」
体系的な確認項目:
- N+1 クエリの問題
- メモリリークのリスク
- ループ内での不要な計算
- 非同期処理や並列処理の機会を見逃していないか
- 非効率なデータ構造
ステップ 9:まとめて伝える
目標: 明確で、実行可能かつ建設的なフィードバックを提供します。
出力構成:
## Goal Assessment
**PR Goal:** [One sentence — what this PR is trying to solve]
**Verdict:** [Achieved / Partially achieved / Not achieved]
**Reasoning:** [Why — specific evidence from the code]
## Repository Context
- **Architecture**: [e.g., Clean Architecture, MVC]
- **Patterns**: [e.g., Repository, Factory, DI]
- **Style**: [e.g., camelCase, ESLint]
## Critical Issues (Must Fix)
- [ ] **[GOAL]** Issue description (file:line)
- The PR does not solve [X] because [Y]
- [ ] **[SECURITY]** Issue description (file:line)
- Impact: [description]
- Fix: [suggestion]
## Important Issues (Should Fix)
- [ ] **[CORRECTNESS]** Issue description (file:line)
- [ ] **[CONSISTENCY]** Issue description (file:line)
- Existing Pattern: [X]
- Violation: [Y]
- Suggestion: [Z]
## Minor Suggestions (Nice to Have)
- [ ] **[QUALITY]** Issue description (file:line)
- [ ] **[PERFORMANCE]** Issue description (file:line)
## Highlights
- [Positive observations — what the PR does well]
コミュニケーションの原則:
- 最初に目標に対する評価を伝えます。 PR が順調かどうかを、作者がすぐに把握できるようにします。
- 具体的に伝えます。 必ずファイル名と行番号を記載します。
- 批判するだけでなく、提案します。 すべての問題に修正案を添えます。
- 良い仕事を認めます。 よく書かれたコードには、肯定的なフィードバックを伝えます。
使い方
PR の差分を取得する
bash /mnt/skills/user/code-review-master/scripts/pr-diff.sh <pr-number> [repo] [format]
引数:
pr-number- プルリクエスト番号(必須)repo- owner/repo 形式のリポジトリ(デフォルト:git remote から取得)format- 出力形式:markdown、json、plain(デフォルト:markdown)
例:
bash /mnt/skills/user/code-review-master/scripts/pr-diff.sh 123
bash /mnt/skills/user/code-review-master/scripts/pr-diff.sh 123 owner/repo markdown
bash /mnt/skills/user/code-review-master/scripts/pr-diff.sh 456 owner/repo json
要件: gh CLI がインストールされ、認証されていること
結果をユーザーに提示する
コードレビューを提供する際は、次の点に従ってください。
- 目標に対する評価から始めます — この PR は、明示された問題を解決していますか?
- セキュリティ上の問題を次に優先します
- ファイル名と行番号を具体的に記載します
- 問題を指摘するだけでなく、修正案を含めます
- 良い実践を認めます
- 建設的かつ教育的に伝えます
トラブルシューティング
「PR に説明がありません」
- コミットメッセージとブランチ名から意図を確認します
- プロセス上の問題として指摘します:「この PR には説明がありません。コードの変更内容からは、[X] のように見受けられます。確認してください。」
「対処すべき問題が多すぎます」
- 優先順位を付けます:目標 > セキュリティ > バグ > 品質 > スタイル
- 影響の最も大きい変更に集中します
- 段階的な改善計画を提案します
「問題が妥当かどうか不明です」
- 意図について説明を求めます
- 起こりうる問題を説明します
- 必須事項として押し付けるのではなく、代替案を提示します