## PR Review Pull Request の体系的レビューでコード品質とアーキテクチャの健全性を確保します。 ### 使い方 ```bash # PR の包括的レビュー gh pr view 123 --comments 「この PR を体系的にレビューしてコード品質、セキュリティ、アーキテクチャの観点からフィードバックしてください」 # セキュリティ特化レビュー gh pr diff 123 「セキュリティリスクと脆弱性に焦点を当ててレビューしてください」 # アーキテクチャ観点のレビュー gh pr checkout 123 && find . -name "*.js" | head -10 「レイヤー分離、依存関係、SOLID 原則の観点からアーキテクチャを評価してください」 ``` ### 基本例 ```bash # コード品質の数値的評価 find . -name "*.js" -exec wc -l {} + | sort -rn | head -5 "コードの複雑度、関数サイズ、重複度を評価して改善点を指摘してください" # セキュリティ脆弱性チェック grep -r "password\|secret\|token" . --include="*.js" | head -10 "機密情報の漏洩、ハードコーディング、認証バイパスのリスクをチェックしてください" # アーキテクチャ違反の検出 grep -r "import.*from.*\.\./\.\." . --include="*.js" "レイヤー違反、循環依存、結合度の問題を評価してください" ``` ### コメント分類体系 ```text 🔴 critical.must: 致命的問題 ├─ セキュリティ脆弱性 ├─ データ整合性問題 └─ システム障害リスク 🟡 high.imo: 高優先度改善 ├─ 機能不全のリスク ├─ パフォーマンス問題 └─ 保守性の大幅低下 🟢 medium.imo: 中優先度改善 ├─ 可読性の向上 ├─ コード構造改善 └─ テスト品質向上 🟢 low.nits: 軽微な指摘 ├─ スタイル統一 ├─ タイポ修正 └─ コメント追加 🔵 info.q: 質問・情報提供 ├─ 実装意図の確認 ├─ 設計判断の背景 └─ ベストプラクティスの共有 ``` ### レビュー観点 #### 1. コード正確性 - **ロジックエラー**: 境界値、Null チェック、例外処理 - **データ整合性**: 型安全性、バリデーション - **エラーハンドリング**: 網羅性、適切な処理 #### 2. セキュリティ - **認証・認可**: 適切なチェック、権限管理 - **入力検証**: SQL インジェクション、XSS 対策 - **機密情報**: ログ出力禁止、暗号化 #### 3. パフォーマンス - **アルゴリズム**: 時間計算量、メモリ効率 - **データベース**: N+1 クエリ、インデックス最適化 - **リソース**: メモリリーク、キャッシュ活用 #### 4. アーキテクチャ - **レイヤー分離**: 依存方向、適切な分離 - **結合度**: 疑結合、インターフェース活用 - **SOLID 原則**: 単一責任、開放閉鎖、依存性逆転 ### レビューフロー 1. **事前確認**: PR 情報、変更差分、関連 Issue 2. **体系的チェック**: セキュリティ → 正確性 → パフォーマンス → アーキテクチャ 3. **建設的フィードバック**: 具体的な改善案とコード例 4. **フォローアップ**: 修正確認、CI 状態、最終承認 ### コメントテンプレート #### セキュリティ問題テンプレート **形式:** - 重要度: `critical.must.` - 問題: 明確に記述 - コード例: 修正案を提示 - 理由: なぜ必要か説明 **例:** ```text critical.must. パスワードが平文で保存されています 修正案: const bcrypt = require('bcrypt'); const hashedPassword = await bcrypt.hash(password, 12); セキュリティリスクを防ぐためハッシュ化が必須です。 ``` #### パフォーマンス改善テンプレート **形式:** - 重要度: `high.imo.` - 問題: パフォーマンス影響を説明 - コード例: 改善案を提示 - 効果: 期待される改善を記述 **例:** ```text high.imo. N+1 クエリ問題が発生します 改善案: Eager Loading const users = await User.findAll({ include: [Post] }); クエリ数を大幅に削減できます。 ``` #### アーキテクチャ違反テンプレート **形式:** - 重要度: `high.must.` - 問題: アーキテクチャ原則違反を指摘 - 推奨: 具体的な改善方法 **例:** ```text high.must. レイヤー違反が発生しています ドメイン層がインフラ層に直接依存しています。 依存性逆転の原則でインターフェースを導入してください。 ``` ### 注意事項 - **建設的トーン**: 攻撃的ではなく協調的なコミュニケーション - **具体的提案**: 問題の指摘だけでなく解決案を提示 - **優先度付け**: Critical → High → Medium → Low の順で対応 - **継続改善**: レビュー結果をナレッジベース化