Files
2025-11-30 09:05:37 +08:00

4.8 KiB

PR Review

Pull Request の体系的レビューでコード品質とアーキテクチャの健全性を確保します。

使い方

# PR の包括的レビュー
gh pr view 123 --comments
「この PR を体系的にレビューしてコード品質、セキュリティ、アーキテクチャの観点からフィードバックしてください」

# セキュリティ特化レビュー
gh pr diff 123
「セキュリティリスクと脆弱性に焦点を当ててレビューしてください」

# アーキテクチャ観点のレビュー
gh pr checkout 123 && find . -name "*.js" | head -10
「レイヤー分離、依存関係、SOLID 原則の観点からアーキテクチャを評価してください」

基本例

# コード品質の数値的評価
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"
"レイヤー違反、循環依存、結合度の問題を評価してください"

コメント分類体系

🔴 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.
  • 問題: 明確に記述
  • コード例: 修正案を提示
  • 理由: なぜ必要か説明

例:

critical.must. パスワードが平文で保存されています

修正案:
const bcrypt = require('bcrypt');
const hashedPassword = await bcrypt.hash(password, 12);

セキュリティリスクを防ぐためハッシュ化が必須です。

パフォーマンス改善テンプレート

形式:

  • 重要度: high.imo.
  • 問題: パフォーマンス影響を説明
  • コード例: 改善案を提示
  • 効果: 期待される改善を記述

例:

high.imo. N+1 クエリ問題が発生します

改善案: Eager Loading
const users = await User.findAll({ include: [Post] });

クエリ数を大幅に削減できます。

アーキテクチャ違反テンプレート

形式:

  • 重要度: high.must.
  • 問題: アーキテクチャ原則違反を指摘
  • 推奨: 具体的な改善方法

例:

high.must. レイヤー違反が発生しています

ドメイン層がインフラ層に直接依存しています。
依存性逆転の原則でインターフェースを導入してください。

注意事項

  • 建設的トーン: 攻撃的ではなく協調的なコミュニケーション
  • 具体的提案: 問題の指摘だけでなく解決案を提示
  • 優先度付け: Critical → High → Medium → Low の順で対応
  • 継続改善: レビュー結果をナレッジベース化