| name | code-reviewer |
| description | Automated code review with security, performance, and best practices analysis. Use when reviewing pull requests or analyzing code for vulnerabilities, performance issues, or maintainability concerns. |
Code Reviewer Skill
コードレビューを自動化し、包括的なフィードバックを提供するスキルです。
概要
このスキルは、プルリクエストや個別のコードファイルに対して、プロフェッショナルなコードレビューを実施します。セキュリティ、パフォーマンス、保守性、ベストプラクティスの観点から詳細な分析を行い、具体的な改善提案を提供します。
主な機能
- 包括的なコード分析: セキュリティ、パフォーマンス、可読性、保守性の多角的レビュー
- 言語別ベストプラクティス: 各プログラミング言語の規約とパターンに基づく評価
- 具体的な改善提案: コード例を含む実装可能な修正案
- 重大度レベル付け: Critical、High、Medium、Lowの4段階で問題を分類
- 自動検出: バグ、セキュリティ脆弱性、パフォーマンスボトルネックの特定
- コードメトリクス: 複雑度、重複、テストカバレッジの分析
- アーキテクチャ評価: 設計パターンとSOLID原則の適用状況
サポート言語
- JavaScript/TypeScript: React, Node.js, Next.js, Vue.js, Angular
- Python: Django, Flask, FastAPI, データ分析ライブラリ
- Java: Spring Boot, Jakarta EE, Android
- Go: 標準ライブラリ、主要フレームワーク
- Rust: Cargo、非同期プログラミング
- C#: .NET, ASP.NET Core, Unity
- PHP: Laravel, Symfony, WordPress
- Ruby: Rails, Sinatra
- Swift: iOS、macOS開発
- Kotlin: Android、JVM
その他50以上の言語に対応
使用方法
基本的なコードレビュー
このファイルをレビューしてください:
[ファイルパスまたはコード]
プルリクエストレビュー
以下のPRをレビュー:
変更内容: [変更の説明]
ファイル: [変更されたファイルのリスト]
重点項目:
- セキュリティ
- パフォーマンス
- コードの可読性
特定観点のレビュー
セキュリティの観点からこのコードをレビュー:
- SQL インジェクション
- XSS 脆弱性
- 認証・認可の問題
- 機密情報の漏洩
レガシーコードの改善提案
このレガシーコードのリファクタリング提案:
- モダンな書き方への変換
- パフォーマンス改善
- テスタビリティ向上
レビュー観点
1. セキュリティ
チェック項目:
- OWASP Top 10脆弱性
- インジェクション攻撃(SQL、コマンド、XSS等)
- 認証・認可の実装
- データ検証と衛生化
- 暗号化とハッシュの適切な使用
- 機密情報のハードコーディング
- セッション管理
- CSRF、CORS設定
- 依存関係の脆弱性
出力例:
## セキュリティ問題
### [CRITICAL] SQL インジェクション脆弱性
**場所**: user_controller.py:45
**問題**: ユーザー入力を直接SQLクエリに連結しています
**影響**: データベースの不正アクセス、データ漏洩の可能性
**現在のコード**:
```python
query = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(query)
推奨される修正:
query = "SELECT * FROM users WHERE username = ?"
cursor.execute(query, (username,))
### 2. パフォーマンス
**チェック項目**:
- アルゴリズムの時間計算量
- 不要なループやネスト
- データベースクエリの最適化(N+1問題)
- メモリリークの可能性
- 非効率なデータ構造
- キャッシュの活用
- 遅延読み込み
- バッチ処理の機会
- 非同期処理の活用
**出力例**:
```markdown
## パフォーマンス改善
### [HIGH] N+1クエリ問題
**場所**: blog_service.ts:78-85
**問題**: ループ内でデータベースクエリを実行しています
**影響**: 100記事で101回のクエリが実行され、レスポンス時間が大幅に増加
**現在のコード**:
```typescript
for (const post of posts) {
post.author = await db.users.findById(post.authorId);
}
推奨される修正:
const authorIds = posts.map(p => p.authorId);
const authors = await db.users.findByIds(authorIds);
const authorMap = new Map(authors.map(a => [a.id, a]));
posts.forEach(post => post.author = authorMap.get(post.authorId));
効果: クエリ数が101回→2回に削減、レスポンス時間50-90%改善
### 3. コード品質
**チェック項目**:
- 命名規則の一貫性
- 関数の単一責任原則
- DRY原則(重複の排除)
- マジックナンバーの除去
- コメントの適切性
- エラーハンドリング
- 型安全性
- null/undefined チェック
- コードの複雑度(サイクロマティック複雑度)
**出力例**:
```markdown
## コード品質
### [MEDIUM] 関数が長すぎる(単一責任原則違反)
**場所**: order_processor.java:120-280
**問題**: processOrder() が160行あり、複数の責務を持っています
**リファクタリング提案**:
```java
// 現在: 1つの長い関数
public void processOrder(Order order) {
// 検証ロジック (20行)
// 在庫チェック (30行)
// 支払い処理 (40行)
// 通知送信 (25行)
// ロギング (15行)
// データベース更新 (30行)
}
// 推奨: 分割された関数
public void processOrder(Order order) {
validateOrder(order);
checkInventory(order);
processPayment(order);
sendNotifications(order);
updateDatabase(order);
logOrderProcessing(order);
}
効果: テスタビリティ向上、保守性改善、再利用性向上
### 4. アーキテクチャとデザインパターン
**チェック項目**:
- SOLID原則の適用
- デザインパターンの適切な使用
- レイヤーの分離(関心の分離)
- 依存性注入
- インターフェースの設計
- モジュール性
- スケーラビリティ
- 拡張性
### 5. テスト
**チェック項目**:
- テストの存在
- テストカバレッジ
- テストの品質(AAA パターン)
- エッジケースのカバー
- モックの適切な使用
- テストの独立性
- テストの可読性
### 6. エラーハンドリングとロギング
**チェック項目**:
- 適切な例外処理
- エラーメッセージの明確性
- スタックトレースの保持
- リソースのクリーンアップ
- ロギングレベルの適切性
- 機密情報の非ログ化
### 7. ドキュメンテーション
**チェック項目**:
- コメントの適切性
- API ドキュメント
- 複雑なロジックの説明
- TODO/FIXME の管理
- README の充実度
## レビュー出力形式
### 標準レビューレポート
```markdown
# コードレビュー結果
## サマリー
- **総合評価**: B+ (良好)
- **Critical問題**: 0件
- **High問題**: 2件
- **Medium問題**: 5件
- **Low問題**: 8件
- **改善提案**: 12件
## 重要な問題
### [HIGH] セキュリティ: CSRF保護の欠如
**ファイル**: api/routes.py:45-67
**説明**: POSTエンドポイントにCSRF保護がありません
**推奨**: FlaskのCSRF保護を有効化
**優先度**: 即時対応推奨
### [HIGH] パフォーマンス: 同期的なファイルI/O
**ファイル**: upload_handler.js:89
**説明**: 大きなファイルを同期的に読み込んでいます
**影響**: サーバーブロッキング、タイムアウトの可能性
**推奨**: 非同期I/Oまたはストリーミング処理に変更
## 改善提案
### コード重複の削減
3つのコントローラーで類似の検証ロジックが重複しています。
共通のバリデーターユーティリティの作成を推奨します。
### 型安全性の向上
TypeScriptの`any`型が15箇所で使用されています。
適切な型定義またはインターフェースの作成を推奨します。
## ベストプラクティス
✅ 適切に実装されている点:
- エラーハンドリングが適切
- 一貫した命名規則
- ユニットテストのカバレッジ良好(85%)
## 推奨アクション
1. **即時対応** (Critical/High):
- CSRF保護の実装
- 非同期I/Oへの変更
2. **短期対応** (Medium):
- コード重複の削減
- 型安全性の向上
- 複雑な関数のリファクタリング
3. **長期改善** (Low):
- ドキュメント拡充
- テストカバレッジ向上
- コードコメント改善
言語別チェックリスト
JavaScript/TypeScript
==の代わりに===を使用varの代わりにconst/letを使用- Promise の適切なエラーハンドリング
- async/await の適切な使用
- TypeScript:
anyの過度な使用回避 - React: useEffect の依存配列
- メモリリーク(イベントリスナー、タイマー)
Python
- PEP 8 スタイルガイド準拠
- list/dict comprehension の適切な使用
with文によるリソース管理- 型ヒントの使用(Python 3.5+)
- グローバル変数の回避
- 例外の適切なキャッチ(broad exceptの回避)
Java
- ストリーム API の活用
- Optional の適切な使用
- リソースの try-with-resources
- equals() と hashCode() のオーバーライド
- 不変オブジェクトの推奨
- スレッドセーフティ
Go
- エラーハンドリングの徹底
- defer による リソースクリーンアップ
- goroutine リーク の回避
- context の適切な使用
- ポインタ vs 値のレシーバー
- race condition の回避
カスタムルール
プロジェクト固有のルールを定義可能:
カスタムレビュールール:
- すべてのAPI エンドポイントにレート制限を実装
- データベース移行はロールバック可能に
- すべての公開関数にJSDocコメント必須
- エラーレスポンスは標準フォーマットに従う
自動化との統合
CI/CD パイプライン
# .github/workflows/code-review.yml
name: Automated Code Review
on: [pull_request]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Code Review
run: |
# Claude による自動レビュー
claude-code review --pr ${{ github.event.pull_request.number }}
pre-commit hook
#!/bin/bash
# .git/hooks/pre-commit
claude-code review --staged --quick
使用例
例1: 新機能の追加PR
入力:
以下のPRをレビューしてください:
タイトル: ユーザー認証機能の追加
変更ファイル:
- src/auth/login.ts (新規)
- src/auth/jwt.ts (新規)
- src/middleware/auth.ts (新規)
- src/routes/api.ts (変更)
変更内容:
- JWT ベースの認証を実装
- ログインエンドポイントを追加
- 認証ミドルウェアを作成
出力: セキュリティ、トークン管理、エラーハンドリングの包括的レビュー
例2: バグ修正のレビュー
入力:
このバグ修正をレビュー:
問題: ユーザーリストの読み込みが遅い
修正内容: クエリの最適化とキャッシング追加
出力: パフォーマンス改善の検証、キャッシュ戦略の評価、エッジケースの確認
例3: リファクタリング
入力:
このリファクタリングをレビュー:
変更: 500行の関数を10個の小さな関数に分割
目的: 保守性とテスタビリティの向上
出力: SOLID原則の適用状況、命名の適切性、モジュール分割の妥当性
ベストプラクティス
レビュー実施のタイミング
- プルリクエスト作成時: 変更の全体像を把握
- コミット前: 早期の問題発見
- 定期的なコード監査: 既存コードの改善機会発見
- リファクタリング前: 改善優先順位の決定
効果的なレビューのコツ
- コンテキストを提供: 変更の目的と背景を説明
- 重点項目を指定: 特に注目してほしい観点を明示
- 段階的にレビュー: 大きな変更は小さな単位に分割
- フィードバックを活用: 指摘事項を次のコードに反映
レビュー結果の活用
- 優先順位付け: Critical → High → Medium → Low の順に対応
- チームで共有: レビュー結果をチームの学習材料に
- 自動化: 繰り返し指摘される問題は linter ルール化
- メトリクス追跡: 問題発生率の推移を監視
制限事項
- 実行テストは不可: コードの静的分析のみ(実際の実行は行わない)
- ビジネスロジックの正確性: 要件との整合性は人間の判断が必要
- 完全性の保証なし: すべてのバグや問題を検出できるわけではない
- プロジェクト固有のルール: デフォルトでは一般的なベストプラクティスのみ
統合ツール
- GitHub/GitLab: PR コメントとして自動投稿
- Linters: ESLint, Pylint, RuboCop等との併用推奨
- Static Analyzers: SonarQube, CodeClimate等の補完
- Security Scanners: Snyk, OWASP Dependency-Check との併用
バージョン情報
- スキルバージョン: 1.0.0
- 最終更新: 2025-01-22
使用例:
このPRをレビューしてください:
ファイル: src/payment/processor.py
変更内容: クレジットカード決済処理の実装
重点チェック項目:
- セキュリティ(カード情報の取り扱い)
- エラーハンドリング
- トランザクション管理
- PCI DSS 準拠
このプロンプトで、包括的なコードレビューレポートが生成されます!