# コードレビュー基準

## 目的

コードレビューは、コードがマージされる前に品質、セキュリティ、保守性を確保します。このルールは、コードレビューの実施タイミングと方法を定義します。

## レビューのタイミング

**必須レビュートリガー:**

- コードの作成または修正後
- 共有ブランチへのコミット前
- セキュリティに関わるコードが変更された場合（認証、決済、ユーザーデータ）
- アーキテクチャの変更時
- プルリクエストのマージ前

**レビュー前の要件:**

レビューを依頼する前に、以下を確認してください：

- すべての自動チェック（CI/CD）が通過している
- マージコンフリクトが解決されている
- ブランチがターゲットブランチと最新状態である

## レビューチェックリスト

コードを完了とマークする前に：

- [ ] コードが読みやすく、適切に命名されている
- [ ] 関数が焦点を絞っている（50行未満）
- [ ] ファイルが凝集している（800行未満）
- [ ] 深いネストがない（4レベル以上）
- [ ] エラーが明示的に処理されている
- [ ] ハードコードされたシークレットや認証情報がない
- [ ] console.logやデバッグ文がない
- [ ] 新機能にテストが存在する
- [ ] テストカバレッジが最低80%を満たしている

## セキュリティレビュートリガー

**以下の場合はsecurity-reviewerエージェントを使用してください：**

- 認証または認可コード
- ユーザー入力の処理
- データベースクエリ
- ファイルシステム操作
- 外部APIコール
- 暗号化操作
- 決済または金融コード

## レビュー重大度レベル

| レベル | 意味 | アクション |
|--------|------|------------|
| CRITICAL | セキュリティ脆弱性またはデータ損失リスク | **BLOCK** - マージ前に修正必須 |
| HIGH | バグまたは重大な品質問題 | **WARN** - マージ前に修正すべき |
| MEDIUM | 保守性の懸念 | **INFO** - 修正を検討 |
| LOW | スタイルまたは軽微な提案 | **NOTE** - 任意 |

## エージェントの使用

コードレビューには以下のエージェントを使用してください：

| エージェント | 目的 |
|-------------|------|
| **code-reviewer** | 一般的なコード品質、パターン、ベストプラクティス |
| **security-reviewer** | セキュリティ脆弱性、OWASP Top 10 |
| **typescript-reviewer** | TypeScript/JavaScript固有の問題 |
| **python-reviewer** | Python固有の問題 |
| **go-reviewer** | Go固有の問題 |
| **rust-reviewer** | Rust固有の問題 |

## レビューワークフロー

```
1. git diffを実行して変更を理解する
2. セキュリティチェックリストを最初に確認する
3. コード品質チェックリストをレビューする
4. 関連するテストを実行する
5. カバレッジ >= 80%を検証する
6. 詳細レビューに適切なエージェントを使用する
```

## よくある問題の検出

### セキュリティ

- ハードコードされた認証情報（APIキー、パスワード、トークン）
- SQLインジェクション（クエリでの文字列連結）
- XSS脆弱性（エスケープされていないユーザー入力）
- パストラバーサル（未サニタイズのファイルパス）
- CSRF保護の欠如
- 認証バイパス

### コード品質

- 大きな関数（50行超）- より小さく分割
- 大きなファイル（800行超）- モジュールを抽出
- 深いネスト（4レベル超）- 早期リターンを使用
- エラー処理の欠如 - 明示的に処理
- ミューテーションパターン - イミュータブルな操作を優先
- テストの欠如 - テストカバレッジを追加

### パフォーマンス

- N+1クエリ - JOINまたはバッチングを使用
- ページネーションの欠如 - クエリにLIMITを追加
- 制約のないクエリ - 制約を追加
- キャッシュの欠如 - 高コスト操作をキャッシュ

## 承認基準

- **承認**: CRITICALまたはHIGHの問題なし
- **警告**: HIGHの問題のみ（注意してマージ）
- **ブロック**: CRITICALの問題が検出

## 他のルールとの統合

このルールは以下と連携します：

- [testing.md](testing.md) - テストカバレッジ要件
- [security.md](security.md) - セキュリティチェックリスト
- [git-workflow.md](git-workflow.md) - コミット規約
- [agents.md](agents.md) - エージェント委任
