mcpField
C
code-reviewer

code-reviewer

github.com/womendefiningaiテスト・品質1036 回インストール49 週間前に更新
リポジトリ

code-reviewer について

code-reviewerは、コード変更をセキュリティ、パフォーマンス、品質の観点から構造的に確認するスキルです。利用可能な自動スキャン結果と手動チェックを組み合わせ、重要度別のレポートを作成します。

主な機能

  1. 01利用可能なSASTスクリプトを実行し結果を解釈
  2. 02OWASPのセキュリティリスクを手動確認
  3. 03N+1クエリなどの性能問題を検出
  4. 04コード品質と命名規則を確認
  5. 05重要度別のレビュー報告を作成

活用シーン

  1. 01マージ前のプルリクエスト確認
  2. 02セキュリティ関連変更の監査
  3. 03デプロイ前の性能と品質の確認
  4. 04SASTツールの検出結果の検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/womendefiningai/claude-code-skills --skill code-reviewer

インストール後、Claude Code で/code-reviewerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

EXAMPLES.md
FORMS.md
README.md
REFERENCE.md
resources/examples/
bad-review-example.md
good-review-example.md
resources/templates/
code-review-report.md
performance-review-template.md
quick-checklist.md
security-review-template.md
scripts/
quick-audit.bat
quick-audit.sh

詳細

コードレビュースキル

自動化されたセキュリティチェック、パフォーマンス分析、品質基準の適用を備えた、2025年の研究に裏付けられたベストプラクティスを実装する包括的なコードレビュースキルです。

基本理念

品質とセキュリティのバランスの取れたアプローチ:

  • セキュリティに50%注力(OWASP Top 10、脆弱性、認証)
  • コード品質に30%注力(保守性、標準、重複)
  • パフォーマンスに20%注力(N+1クエリ、アルゴリズムの計算量、バンドルサイズ)

研究結果: 継続的にコードレビューを行うチームは、従来の一括レビューを行うチームよりも92%速く脆弱性を修正します。


このスキルを使うタイミング

ユーザーが以下のように言及した場合に自動的に呼び出されます:

  • 「このコードをレビューして」
  • 「バグがないか確認して」
  • 「セキュリティ監査」
  • 「このPRを分析して」
  • 「コードレビュー」
  • 「コード品質を確認して」
  • 「変更内容をレビューして」
  • 「脆弱性を見つけて」
  • 「パフォーマンスを確認して」

手動での呼び出し:

  • 重要な変更をコミットする前
  • デプロイ前の検証
  • セキュリティに関わる機能を実装した後
  • SASTツールの結果を取り込むとき

コアレビューのワークフロー

コードレビューが初めてですか? EXAMPLES.mdを参照してください。良いレビューと悪いレビューの例を含む、手順全体を確認できます。

フェーズ1:自動分析(最初に実行)

ステップ1:レビュー対象のコードを特定する

  • 特定のファイルをレビューする場合:対象のファイルを読みます
  • PRや変更をレビューする場合:git diffを使って変更内容を確認します
  • 機能全体をレビューする場合:grep/globを使って影響を受けるファイルを特定します

ステップ2:利用可能であれば自動SASTツールを実行する

scripts/ディレクトリ内のスクリプトを使用します:

# Quick security audit
bash scripts/quick-audit.sh

# Or run individual tools:
npm audit                    # Dependency vulnerabilities
npm run lint                 # ESLint code quality
npx prettier --check .       # Code formatting

# Advanced (if installed):
sonar-scanner               # SonarQube
codeql database analyze     # CodeQL
snyk test                   # Snyk security

ステップ3:SASTの結果を解析する

  • 深刻度(Critical/High/Medium/Low)ごとに検出結果を分類します
  • 誤検知を除外します(判断理由を記録してください)
  • 手動チェックの結果と照合します
フェーズ2:手動によるセキュリティ分析

OWASP Top 10 2021(現行標準)を確認します:

  1. A01:2021 – アクセス制御の不備

    • 保護対象のすべてのルートに認証チェックがありますか?
    • 認可の判断を行う前に、ユーザー入力を検証していますか?
    • 直接オブジェクト参照は保護されていますか(IDORの防止)?
  2. A03:2021 – インジェクション(SQL、NoSQL、コマンド)

    • 文字列連結の代わりに、パラメーター化クエリを使用していますか?
    • データベースクエリを実行する前に、ユーザー入力をサニタイズしていますか?
    • ORMを正しく使用していますか(ユーザー入力を含む生のクエリを使っていませんか)?
  3. A03:2021 – クロスサイトスクリプティング(XSS)

    • HTMLに描画する前に、ユーザー入力をエスケープしていますか?
    • Content Security Policyヘッダーを設定していますか?
    • dangerouslySetInnerHTMLの使用を避けるか、適切にサニタイズしていますか?
  4. A07:2021 – 識別と認証の不備

    • パスワードはbcrypt/argon2でハッシュ化されていますか(MD5/SHA1ではなく)?
    • セッション管理は安全ですか(httpOnly Cookie、CSRFトークン)?
    • ログインエンドポイントにレート制限を実装していますか?
  5. A02:2021 – 暗号化の失敗

    • 機密データは保存時と転送時に暗号化されていますか?
    • APIキーやシークレットは環境変数に保存されていますか(ハードコードされていませんか)?
    • すべての外部通信でHTTPSを強制していますか?

OWASP Top 10の完全なチェックリストについては、REFERENCE.mdを参照してください

フェーズ3:パフォーマンスパターンの検出

よくあるパフォーマンスの問題を確認します:

  1. N+1クエリ問題

    // 🔴 BAD: N+1 queries
    users.forEach(user => {
      db.query("SELECT * FROM posts WHERE user_id = ?", user.id)
    })
    
    // ✅ GOOD: Single query with JOIN
    db.query("SELECT * FROM users LEFT JOIN posts ON users.id = posts.user_id")
    
  2. O(n²)以上のアルゴリズム

    • 大規模なデータセットに対するネストされたループ
    • 非効率なソートや検索
    • メモ化されていない再帰関数
  3. データベースインデックスの不足

    • インデックスのないカラムに対するクエリ
    • 対応するインデックスがないWHERE句
    • インデックスのない外部キーを使ったJOIN操作
  4. メモリーリーク

    • クリーンアップされていないイベントリスナー
    • 大きなオブジェクトを保持するクロージャ
    • サイズに上限のないキャッシュ
  5. 大きなバンドルサイズ

    • 必要な関数だけでなく、ライブラリ全体をインポートしている
    • 最適化されていない画像
    • コード分割の不足

パフォーマンスパターンの一覧については、REFERENCE.mdを参照してください

フェーズ 4:コード品質基準

TypeScript/JavaScript の基準を確認します:

  • 正当な理由を示すコメントのない any 型を使用していない
  • 適切なエラー処理を行っている(空の catch ブロックがない)
  • console.log 文を使用していない(適切なロギングを使用する)
  • 関数が 50 行未満である(長い場合は切り出す)
  • 循環的複雑度が 10 未満である
  • コメントアウトされたコードがない
  • インポートの順序が規約に従っている(React → サードパーティ → 内部 → 相対)

命名規則を確認します:

  • ファイル:kebab-case(user-service.ts)
  • コンポーネント:PascalCase(UserProfile.tsx)
  • 関数/変数:camelCase(getUserData)
  • 定数:UPPER_SNAKE_CASE(MAX_RETRIES)

基準の完全なチェックリストは REFERENCE.md を参照してください

フェーズ 5:レビュー報告書の作成

resources/templates/ のテンプレートを使用して、構造化された出力を作成します:

  • 包括的なレビュー: resources/templates/code-review-report.md を使用
  • セキュリティ監査: resources/templates/security-review-template.md を使用
  • パフォーマンスレビュー: resources/templates/performance-review-template.md を使用
  • クイックチェック: resources/templates/quick-checklist.md を使用

報告書の形式例:

# Code Review Report

**Verdict:** ✅ APPROVED | ⚠️ APPROVED WITH RESERVATIONS | ❌ REQUIRES REVISION
**Files Reviewed:** [List]
**Review Date:** [ISO Date]

## Critical Issues (Must Fix Before Merge)
[None or list with code snippets]

## High Priority Issues (Fix Within 48h)
[None or list with recommendations]

## Medium Priority Issues (Fix This Sprint)
[None or list]

## Low Priority / Suggestions
[Optional improvements]

## Strengths & Good Practices
[What was done well]

## Metrics
- **Lines Changed:** X
- **Files Modified:** Y
- **Estimated Risk:** Low/Medium/High
- **Test Coverage:** Z%

SAST ツールとの統合

SonarQube との統合

SonarQube の結果が利用可能な場合:

  1. sonar-report.json を読み込むか、SonarQube API にアクセスします
  2. SonarQube が見逃した問題を中心に手動レビューを行います:
    • ビジネスロジックの脆弱性
    • コンテキスト固有のセキュリティ上の問題
    • 認可ロジック
  3. SonarQube の検出結果を検証します(誤検知を確認します)

確認すべき主な SonarQube メトリクス:

  • セキュリティホットスポット: 手動での検証が必要です
  • コードの不備: 保守性に関する問題(しきい値:グレード A または B)
  • 重複: 3% 未満に抑えます
  • カバレッジ: 80% 超を目標にします
CodeQL との統合

CodeQL スキャンが利用可能な場合:

  1. GitHub の Security タブで CodeQL のアラートを確認します
  2. 重大度に応じてアラートに優先順位を付けます:
    • クリティカル/高: マージ前に必ず修正します
    • 中: スプリント内に修正します
    • 低: バックログに追加します
  3. 利用可能な場合は、CodeQL が提案する修正を使用します
  4. 次の項目を手動でレビューします:
    • 認証フロー
    • 認可の判断
    • 暗号処理

CodeQL の強み(精度 88%):

  • SQL インジェクションの検出
  • パストラバーサルの脆弱性
  • コマンドインジェクション
  • 安全でないデシリアライゼーション
Snyk との統合

Snyk の結果が利用可能な場合:

  1. 依存関係の脆弱性を調べるために snyk test を実行します
  2. コードレベルの問題を調べるために snyk code test を実行します
  3. 次の基準で優先順位を付けます:
    • クリティカル: 直ちに修正します
    • 高: 7 日以内に修正します
    • 中: 30 日以内に修正します
  4. 利用可能なパッチを確認します:snyk wizard

Snyk の強み:

  • 依存関係の脆弱性(リアルタイムの CVE データベース)
  • ライセンスコンプライアンス
  • コンテナーセキュリティ
  • Infrastructure as Code(IaC)スキャン
ESLint + Prettier + npm audit

基本的なセキュリティスタック(常に実行):

# Run these three commands ALWAYS
npm audit --audit-level=high    # Dependency vulnerabilities
npm run lint                    # Code quality (ESLint)
npx prettier --check .          # Code formatting

解釈:

  • npm audit: 重大度が高またはクリティカルな脆弱性をすべて修正します
  • ESLint: エラー 0 件で通過する必要があります(警告は記録されていれば許容されます)
  • Prettier: npx prettier --write . で自動修正します

重大度の分類

すべての検出事項を分類するには、次の基準を使用します:

🔴 クリティカル(デプロイをブロック)
  • SQL インジェクションの脆弱性
  • XSS の脆弱性(エスケープされていないユーザー入力)
  • 認証の回避
  • ハードコードされたシークレット/API キー
  • リモートコード実行(RCE)のリスク
  • 平文で記録された機密データ

対応: 停止します。先に進む前に直ちに修正する必要があります。

🟠 高(48 時間以内に修正)
  • 認証チェックの不足
  • 安全でないセッション管理
  • CSRF の脆弱性
  • 機密性の高いエンドポイントでのレート制限の不足
  • 脆弱な暗号化(MD5、SHA1)
  • 重要な処理経路における N+1 クエリの問題
  • 本番コードのメモリーリーク

対応: ブロッカーのチケットを作成します。次回のデプロイ前に修正します。

🟡 中(今スプリントで修正)
  • 入力検証の不足(重要度の低いフィールド)
  • 非効率なアルゴリズム(小規模なデータセットで O(n²))
  • データベースインデックスの不足(1000 行未満)
  • コードの重複(5 箇所超)
  • エラー処理の不足
  • アクセシビリティ違反(WCAG AA)

対応: チケットを作成します。現在のスプリント内に修正します。

🔵 低(バックログ/あれば望ましい)
  • コードスタイル違反(リンターで強制されていない場合)
  • 複雑なコードへのコメント不足
  • 軽微なパフォーマンス最適化
  • リファクタリングの機会
  • ドキュメントの改善

対応: 任意です。今後の改善に向けてバックログに追加します。


追跡すべき主要指標

2025 年の調査より:

  1. 修正までの平均時間(MTTR)

    • 目標:重大度の高い問題は 7 日未満
    • 重大な問題:24 時間未満
  2. 欠陥密度

    • 計算式:(バグの数)/(コード 1000 行)
    • 目標:1000 LOC あたり 1.0 件未満の欠陥
  3. レビュー対象範囲

    • 目標:変更された行の 100% をレビュー
    • クリティカルパス:100% を手動でレビュー(自動化だけに頼らない)
  4. 誤検知率

    • CodeQL:約 5%(業界最高水準)
    • SonarQube:約 8~10%
    • Snyk:約 8%
    • 信頼度を調整できるよう、プロジェクトの誤検知率を追跡します

よくある落とし穴と回避方法

  1. 自動化への過度な依存

    • 自動化ツールが検出できるセキュリティ上の問題は 60~70% です
    • ビジネスロジック、認可、コンテキスト固有の問題には手動レビューが不可欠です
  2. セキュリティを優先してパフォーマンスを無視する

    • 安全でも使いものにならないアプリは安全とはいえません(パフォーマンスによる DoS)
    • セキュリティチェックとパフォーマンスへの影響のバランスを取ります
  3. 些細な問題をすべてブロックする

    • 重大度分類を使って優先順位を付けます
    • 完璧を求めて進捗を妨げないようにします
  4. 木を見て森を見ず

    • 一歩引いて、全体的なアーキテクチャをレビューします
    • アプローチが根本的に妥当かどうかを確認します
  5. テストカバレッジを確認しない

    • テストされていないコードは、レビューされていないコードです
    • セキュリティ上重要なすべてのパスにテストを必須とします

クイックリファレンスチェックリスト

コードレビューを承認する前に確認します。

セキュリティ:

  • SQL インジェクションの脆弱性がない(パラメーター化クエリを使用)
  • XSS の脆弱性がない(ユーザー入力をエスケープ)
  • 保護されたルートに認証チェックがある
  • シークレットは環境変数に保存されている(ハードコードされていない)
  • 外部 API で HTTPS が強制されている
  • 状態を変更するエンドポイントに CSRF 対策がある

パフォーマンス:

  • N+1 クエリパターンがない
  • 大規模なデータセットに対して O(n²) 以上に遅いアルゴリズムがない
  • クエリ対象のカラムにデータベースインデックスがある
  • メモリリークがない(イベントリスナーをクリーンアップ)
  • 画像が最適化され、遅延読み込みされる

コード品質:

  • TypeScript の strict モードに準拠している(正当な理由のない any がない)
  • エラー処理がある(空の catch ブロックがない)
  • console.log 文がない
  • 関数が 50 行未満
  • テストカバレッジが 80% を超えている
  • コメントアウトされたコードがない

ドキュメント:

  • 複雑なロジックに説明コメントがある
  • 公開 API に JSDoc コメントがある
  • 動作を変更した場合、README が更新されている
  • 環境変数がドキュメントに記載されている

レビュー後の次のステップ

承認された場合(✅):

  1. PR をマージします
  2. デプロイ後に問題がないか監視します
  3. テストカバレッジの指標を更新します

条件付きで承認された場合(⚠️):

  1. 中/低優先度の問題についてチケットを作成します
  2. 重大/高優先度の問題が修正されていればマージします
  3. フォローアップレビューを予定します

修正が必要な場合(❌):

  1. コードスニペットを含む詳細なフィードバックを提供します
  2. 重大な問題が解決するまでマージをブロックします
  3. 必要に応じて、修正のペアプログラミングを提案します

サポートファイル

詳しくは、以下をご覧ください。

  • EXAMPLES.md - エンドツーエンドのコードレビュー例(良い例、悪い例、セキュリティ重視の例)
  • REFERENCE.md - OWASP Top 10 の完全なチェックリスト、パフォーマンスパターン、CWE リファレンス
  • FORMS.md - レビューレポートテンプレートの概要とガイダンス
  • resources/templates/ - すぐに使えるレビューテンプレート
    • code-review-report.md - 包括的なレビューテンプレート
    • security-review-template.md - セキュリティ重視の監査テンプレート
    • performance-review-template.md - パフォーマンス分析テンプレート
    • quick-checklist.md - 3 分で確認できる簡易レビュー用チェックリスト
  • resources/examples/ - 実際のレビュー例
    • good-review-example.md - 綿密なレビューの例
    • bad-review-example.md - 避けるべきレビュー(形式だけのレビュー)
  • scripts/ - SAST ツールの自動統合スクリプト
    • quick-audit.sh - 簡易セキュリティ監査(Linux/Mac)
    • quick-audit.bat - 簡易セキュリティ監査(Windows)

調査資料:


覚えておいてください: コードレビューは欠点を探すことではなく、品質、セキュリティ、保守性を確保することです。建設的かつ具体的に指摘し、問題を挙げるときは必ず解決策も提案してください。

コメント