マルチレビュアー PR レビューを実行
Analyzes PR changes to dynamically generate appropriate reviewers and execute a multi-reviewer review. Use it for comprehensive code review before merging complex PRs.
/plugin marketplace add B16B1RD/cc-zen-workflow/plugin install b16b1rd-zen-workflow@B16B1RD/cc-zen-workflowpr/PR の変更内容を分析し、適切なレビュアーを動的に生成してマルチレビュアーレビューを実行する
このコマンドを実行したら、以下のフェーズを順番に実行してください。
| 引数 | 説明 |
|---|---|
[pr_number] | PR 番号(省略時は現在のブランチの PR) |
引数で PR 番号が指定されている場合:
gh pr view {pr_number} --json number,title,body,state,isDraft,additions,deletions,changedFiles,headRefName,baseRefName,url
引数が省略された場合、現在のブランチから PR を特定:
git branch --show-current
gh pr view --json number,title,body,state,isDraft,additions,deletions,changedFiles,headRefName,baseRefName,url
PR が見つからない場合:
エラー: 現在のブランチに関連する PR が見つかりません
現在のブランチ: {branch}
対処:
1. `/zen:pr:create` で PR を作成
2. PR 番号を直接指定して再実行
処理を終了。
PR がクローズ/マージ済みの場合:
エラー: PR #{number} は既に{state}されています
レビューは実行できません。
処理を終了。
PR の diff を取得:
gh pr diff {pr_number}
変更ファイル一覧を取得:
gh pr view {pr_number} --json files --jq '.files[].path'
PR ブランチ名または本文から Issue 番号を抽出:
ブランチパターン: {type}/issue-{number}-{slug}
本文パターン: Closes #XX, Fixes #XX, Resolves #XX
zen-config.yml から lint/build コマンドを取得:
commands:
build: null # 自動検出
lint: null # 自動検出
AskUserQuestion で実行を確認:
レビュー前に品質チェックを実行しますか?
検出されたコマンド:
- lint: {lint_command}
- build: {build_command}
オプション:
- すべて実行(推奨)
- スキップしてレビュー開始
品質チェックでエラーがある場合:
警告: 品質チェックでエラーが検出されました
{error_output}
エラーを修正してから再度レビューすることを推奨します。
このままレビューを続行しますか?
オプション:
- 続行する
- キャンセル
変更ファイルのパターンから必要な専門知識を判定:
| ファイルパターン | 推奨レビュアー | 専門領域 |
|---|---|---|
**/security/**, **/auth/**, auth*, crypto*, **/middleware/auth* | セキュリティ専門家 | 脆弱性、認証、暗号化、OWASP |
.github/**, Dockerfile*, docker-compose*, *.yml (CI), Makefile | DevOps 専門家 | CI/CD、インフラ、デプロイ、コンテナ |
**/*.md, docs/**, README*, CHANGELOG* | テクニカルライター | ドキュメント品質、一貫性、読みやすさ |
**/*.test.*, **/*.spec.*, **/test/**, **/tests/**, **/__tests__/** | テスト専門家 | テスト品質、カバレッジ、テストパターン |
**/api/**, **/routes/**, **/handlers/**, **/controllers/** | API 設計専門家 | REST設計、エラーハンドリング、バージョニング |
**/*.css, **/*.scss, **/styles/**, **/components/** | フロントエンド専門家 | UI/UX、アクセシビリティ、パフォーマンス |
**/db/**, **/models/**, **/migrations/**, **/*.sql | データベース専門家 | スキーマ設計、クエリ最適化、マイグレーション |
package.json, **/package.json, yarn.lock, pnpm-lock.yaml | 依存関係専門家 | 依存関係、セキュリティ、バージョン互換性 |
diff の内容を分析し、追加の専門知識が必要かを判断:
解析観点:
ファイルパターンと内容解析の結果から、レビュアー候補リストを作成:
検出された専門領域:
- {reviewer_type_1}: {files_count} ファイル
- {reviewer_type_2}: {files_count} ファイル
...
PR の統計情報から変更規模を算出:
追加行数: {additions}
削除行数: {deletions}
変更ファイル数: {changedFiles}
総変更行数: {additions + deletions}
zen-config.yml の設定と変更規模に基づいてレビュアー数を決定:
review:
min_reviewers: 1
max_reviewers: 5
criteria:
- file_types
- content_analysis
決定ロジック:
| 条件 | レビュアー数 |
|---|---|
| 単一ファイル かつ 変更10行以下 | 1人(最小) |
| 複数ファイル かつ 変更100行以下 | 2-3人 |
| 変更100行超 または 10ファイル超 | 3-4人 |
| セキュリティ関連の変更を含む | +1人(セキュリティ専門家必須) |
| 大規模変更(500行超、20ファイル超) | 最大数(5人) |
AskUserQuestion でレビュアー構成を確認:
以下のレビュアー構成でレビューを実行します:
変更規模:
- 変更ファイル: {changedFiles} 件
- 追加: +{additions} 行 / 削除: -{deletions} 行
選定されたレビュアー ({count}人):
1. {reviewer_type_1} - {reason}
2. {reviewer_type_2} - {reason}
...
オプション:
- この構成でレビュー開始
- レビュアーを追加
- レビュアーを減らす
- キャンセル
各レビュアーには以下のプロファイルを適用:
あなたはセキュリティ専門家として PR をレビューします。
重点チェック項目:
- 入力検証の妥当性
- 認証・認可の実装
- 機密情報の取り扱い
- OWASP Top 10 に該当する脆弱性
- SQLインジェクション、XSS、CSRF 対策
- 暗号化の適切な使用
評価基準:
- 重大: セキュリティ脆弱性が存在
- 警告: 潜在的なリスクあり、改善推奨
- 可: セキュリティ上の問題なし
あなたは DevOps 専門家として PR をレビューします。
重点チェック項目:
- CI/CD パイプラインへの影響
- Docker 構成の最適化
- 環境変数・シークレットの取り扱い
- ビルド・デプロイへの影響
- インフラ変更の安全性
評価基準:
- 重大: デプロイに影響する問題
- 警告: 改善の余地あり
- 可: DevOps 観点で問題なし
あなたはテクニカルライターとして PR をレビューします。
重点チェック項目:
- ドキュメントの正確性
- 文章の明確さと一貫性
- コード例の動作確認
- リンク切れの有無
- 対象読者への適切さ
評価基準:
- 重大: 誤った情報を含む
- 警告: 改善の余地あり
- 可: ドキュメントとして問題なし
あなたはテスト専門家として PR をレビューします。
重点チェック項目:
- テストカバレッジの妥当性
- エッジケースのテスト
- テストの信頼性(Flaky test の可能性)
- テストコードの可読性
- モック・スタブの適切な使用
評価基準:
- 重大: テストが不足、または信頼性に問題
- 警告: カバレッジ改善の余地あり
- 可: テストとして問題なし
あなたは API 設計専門家として PR をレビューします。
重点チェック項目:
- RESTful 原則への準拠
- エラーレスポンスの一貫性
- API バージョニング
- レスポンス形式の適切さ
- 認証・認可の設計
評価基準:
- 重大: API 設計に重大な問題
- 警告: 改善の余地あり
- 可: API 設計として問題なし
あなたはフロントエンド専門家として PR をレビューします。
重点チェック項目:
- コンポーネント設計の妥当性
- アクセシビリティ(WCAG 準拠)
- パフォーマンス(レンダリング、バンドルサイズ)
- レスポンシブデザイン
- ブラウザ互換性
評価基準:
- 重大: UX に重大な影響
- 警告: 改善の余地あり
- 可: フロントエンドとして問題なし
あなたはデータベース専門家として PR をレビューします。
重点チェック項目:
- スキーマ設計の妥当性
- クエリパフォーマンス(N+1 問題など)
- インデックスの適切な使用
- マイグレーションの安全性
- データ整合性
評価基準:
- 重大: データ損失・パフォーマンス問題
- 警告: 最適化の余地あり
- 可: データベース観点で問題なし
あなたは依存関係専門家として PR をレビューします。
重点チェック項目:
- 新規依存関係の妥当性
- セキュリティ脆弱性(既知の CVE)
- ライセンス互換性
- バージョン互換性
- 依存関係の重複・競合
評価基準:
- 重大: セキュリティリスク・ライセンス問題
- 警告: 改善の余地あり
- 可: 依存関係として問題なし
Task tool を使用して並列レビューを実行:
各レビュアーに対して Task tool を起動し、以下の情報を提供:
- PR の diff 内容
- レビュアープロファイル
- 評価フォーマット
重要: すべてのレビューを並列で実行し、効率化を図る。
各レビュアーへの指示:
PR #{number}: {title} のレビューを実行してください。
## レビュー対象
{diff_content}
## あなたの役割
{reviewer_profile}
## 出力フォーマット
以下の形式で評価を出力してください:
### 評価: [可 / 条件付き / 要修正]
### 所見
[レビュー結果のサマリー]
### 詳細
[具体的な指摘事項(ファイル名:行番号 形式で)]
### 推奨事項
[改善提案があれば]
すべてのレビュアーの結果を集約:
総合評価の決定ロジック:
- 全員「可」→ マージ可
- 「条件付き」あり、「要修正」なし → 条件付きマージ可
- 「要修正」あり → 修正必要
## 🧘 zen レビュー結果
### 総合評価
- **推奨**: {マージ可 / 条件付きマージ可 / 修正必要}
- **レビュアー数**: {count}人
- **変更規模**: {additions}+ / {deletions}- ({changedFiles} files)
### サマリー
{overall_summary}
---
### 各レビュアーの評価
#### {Reviewer 1 Type}
- **評価**: {可 / 条件付き / 要修正}
- **所見**: {summary}
- **詳細**:
{details}
#### {Reviewer 2 Type}
- **評価**: {可 / 条件付き / 要修正}
- **所見**: {summary}
- **詳細**:
{details}
...
---
### 指摘事項一覧
| 重要度 | ファイル | 行 | 内容 | レビュアー |
|--------|----------|-----|------|------------|
| {重大/警告/軽微} | {file} | {line} | {comment} | {reviewer} |
---
### 次のステップ
{next_steps}
レビュー結果を PR コメントとして投稿:
gh pr comment {pr_number} --body "{review_result}"
関連 Issue がある場合、作業メモリを更新:
# コメント ID を取得
gh api repos/{owner}/{repo}/issues/{issue_number}/comments --jq '.[] | select(.body | contains("zen 作業メモリ")) | .id'
# 更新内容
### レビュー履歴
- {timestamp}: /zen:pr:review 実行
- 結果: {recommendation}
- 指摘: {issue_count} 件
PR #{number} のレビューを完了しました
総合評価: {recommendation}
レビュアー: {reviewer_count}人
指摘事項: {issue_count}件
{recommendation に応じた次のステップ}
詳細はPRコメントを確認してください:
{pr_url}
エラー: PR #{number} が見つかりません
考えられる原因:
- PR 番号が間違っている
- PR が削除されている
- リポジトリが異なる
対処:
1. `gh pr list` で PR 一覧を確認
2. 正しい PR 番号で再実行
警告: {reviewer_type} のレビュー実行中にエラーが発生しました
エラー: {error_message}
オプション:
- このレビュアーをスキップして続行
- 再試行
- キャンセル
警告: PR へのコメント投稿に失敗しました
考えられる原因:
- ネットワークエラー
- 権限不足
- レートリミット
レビュー結果は以下に表示します:
{review_result}
zen-config.yml から以下の設定を参照:
review:
min_reviewers: 1 # 最小レビュアー数
max_reviewers: 5 # 最大レビュアー数
criteria:
- file_types # ファイル種類による判断
- content_analysis # 内容解析による判断
commands:
lint: null # 品質チェック用
build: null # 品質チェック用
gh pr view, gh pr diff, gh pr comment