name: xs:code-reviewer description: 複数のAI(Claude/Codex/Gemini)でPRをレビューするスキル。GitHub PRの差分を取得し、各AIの視点を統合した詳細レビューを提供。「PRレビューして」「コードレビューして」「PR#123をチェック」で使用。
プルリクエスト自動コードレビュー
概要
GitHub CLIを使用してプルリクエストを自動分析し、体系的なコードレビューを実行するスキル。PRテンプレートの観点に基づいて高品質なレビューコメントを効率的に提供する。
マルチエージェント機能: Codex CLI / Gemini CLI が利用可能な場合、作成したレビューコメントの妥当性を検証してもらい、より高品質で正確なレビューを実現します。
使用方法
PR#123をレビューしてください
owner/repo の PR#123 をレビューして
適用場面
- プルリクエストの体系的なコードレビューが必要な場合
- GitHub上で直接コメントを投稿したい場合
- 複数ファイルにわたる変更を効率的にレビューしたい場合
- チーム内でのレビュー品質を統一したい場合
重要:必ず最後までやること
チャットへの報告だけで終わらせない。必ずGitHubにコメントを投稿すること。
レビュー完了の定義(この順序で実行!)
- GitHubにコードの該当行へ個別コメントを投稿した ← 最優先!
gh api repos/.../pulls/.../commentsを使う- 変更された各ファイルの該当行にコメント
- GitHubにサマリーを投稿した
gh pr review --commentを使う
- ユーザーに完了報告した
個別コメントなしでサマリーだけ投稿するのはNG!
マルチエージェントレビューフロー
Codex CLI / Gemini CLI が利用可能な場合、以下のフローでレビューを実行:
1. PR分析(Claude)
↓
2. レビューコメントドラフト作成(Claude)
↓
3. 並列検証(Codex: 設計/アーキテクチャ、Gemini: セキュリティ/品質)
↓
4. フィードバック統合(Claude)
↓
5. GitHubにコードの該当行へ個別コメント投稿(Claude)← 必須!
↓
6. GitHubにサマリー投稿(Claude)← 必須!
レビュー手順
1. PR情報の確認
まず以下のコマンドでPRの基本情報を収集:
# PRテンプレートの確認(レビュー観点の把握)
cat .github/pull_request_template.md
# PR詳細情報の確認
gh pr view <PR番号> --json title,body,headRefOid,baseRefName,headRefName,files,additions,deletions
# PR差分の全体確認
gh pr diff <PR番号>
# 変更されたファイル一覧
gh pr diff <PR番号> --name-only
2. ファイル別詳細分析
各変更ファイルについて以下を実行:
# 変更後のファイル全体の確認
cat <ファイルパス>
# 特定ファイルの差分詳細
gh pr diff <PR番号> -- <ファイルパス>
3. レビュー観点の適用
PRテンプレート(.github/pull_request_template.md)に記載された観点、または以下の標準観点でレビュー:
- 機能性: 実装が要件を満たしているか
- 可読性: コードが理解しやすいか、命名は適切か
- 保守性: 将来の変更に対して柔軟性があるか
- パフォーマンス: 効率的な実装になっているか
- セキュリティ: セキュリティリスクはないか
- テスト: 適切なテストが含まれているか
- ドキュメント: 必要な文書化がされているか
4. レビュー内容のドラフト作成
問題を発見した箇所について、まずレビューコメントをドラフトとして準備:
重要度の判定基準:
- 【必須】: セキュリティ、バグ、データ損失リスクなど即座の修正が必要
- 【推奨】: パフォーマンス、保守性、可読性の大幅な改善が見込める
- 【提案】: より良い実装方法の提案、将来的な改善案
5. マルチエージェント検証
レビューコメントを投稿する前に、Codex/Gemini で妥当性を検証します。
並列実行コマンド
# Codex(設計・アーキテクチャ観点)
codex exec "以下のコードレビューコメントの妥当性を検証してください:
【対象ファイル】<ファイルパス>
【変更内容】<該当する差分>
【レビューコメント案】<作成したレビューコメント>
【確認観点】
1. 指摘内容は技術的に正確か
2. 重要度の判定は適切か
3. 改善提案は実装可能で効果的か
4. 設計・アーキテクチャ上の追加指摘はないか
検証結果を回答してください:
- ✅ 妥当性: 高/中/低
- 📝 改善提案: (あれば)
- ⚠️ 追加指摘: (あれば)"
# Gemini(セキュリティ・品質観点)
gemini -p "以下のコードレビューコメントの妥当性を検証してください:
【対象ファイル】<ファイルパス>
【変更内容】<該当する差分>
【レビューコメント案】<作成したレビューコメント>
【確認観点】
1. セキュリティ上の見落としはないか
2. パフォーマンス上の問題はないか
3. ベストプラクティスに沿っているか
検証結果を回答してください:
- ✅ 妥当性: 高/中/低
- 📝 改善提案: (あれば)
- ⚠️ 追加指摘: (あれば)"
フィードバック活用:
- 妥当性が「低」: レビューコメントを修正または削除
- 改善提案がある場合: コメント内容をブラッシュアップ
- 追加指摘がある場合: 新たなレビューコメントとして追加
- 技術的誤りの指摘: 必ず実装を再確認し、正確なレビューに修正
6. コードの該当行への個別コメント投稿(必須!最優先!)
この手順を絶対にスキップしない!サマリーより先にこれをやる!
検証を経て、変更されたコードの該当行に以下のコマンドでコメント投稿:
# 最新コミットIDの取得
COMMIT_ID=$(gh pr view <PR番号> --json headRefOid --jq .headRefOid)
# レビューコメントの投稿
gh api repos/<owner>/<repo>/pulls/<PR番号>/comments \
-F body="【<重要度>】<問題の説明>
<改善提案>
<補足説明(必要に応じて)>
---
🤖 **Reviewed by Claude Code**
✅ **Validated by Codex/Gemini**" \
-F commit_id="$COMMIT_ID" \
-F path="<ファイルパス>" \
-F position=<diff行番号>
パラメータの説明:
position: diffの行番号(新規ファイルの場合は1から開始)commit_id: PRの最新のコミットIDを自動取得重要度: 【必須】【推奨】【提案】のいずれか
7. サマリーレビューの投稿(必須!)
注意: 個別コメント投稿後、必ず総括コメントも投稿すること。
全ファイルのレビュー完了後、総括コメントを投稿:
gh pr review <PR番号> --comment --body="## レビューサマリー
### 全体評価
- 変更ファイル数: <数>
- 重要な問題: <数>件
- 推奨改善: <数>件
### 主な指摘事項
1. [重要] <主要な問題1>
2. [推奨] <改善提案1>
### 良い点
- <評価できるポイント1>
- <評価できるポイント2>
### 次のステップ
<修正後の確認方法や追加で必要な作業>
---
🤖 **Reviewed by Claude Code**
✅ **Validated by Codex/Gemini**"
8. 完了報告
GitHubへの投稿完了後、ユーザーに報告:
✅ レビュー完了!
- GitHub個別コメント: 投稿済み
- GitHubサマリー: 投稿済み
- PR URL: https://github.com/<owner>/<repo>/pull/<PR番号>
チェックリスト(実行時に必ず確認)
レビュー完了前に以下を確認:
- PR情報を取得したか
- 差分を確認したか
- Codex/Geminiで検証したか(利用可能な場合)
- GitHubにコードの該当行へ個別コメントを投稿したか ← 最重要!先にやる!
- GitHubにサマリーを投稿したか ← 個別コメントの後!
- ユーザーに完了報告したか
全てにチェックが入るまでレビューは完了ではない。
自己チェック
サマリーを投稿する前に自問する:
「コードの該当行に
gh api repos/.../pulls/.../commentsで個別コメントを投稿したか?」
NO なら先に個別コメントを投稿!
レビューコメントの原則
コメントの構成
- 重要度ラベル: 【必須】【推奨】【提案】
- 問題の説明: 何が問題かを具体的に記述
- 改善提案: 具体的な修正方法を提示
- 補足説明: 必要に応じて理由や影響を説明
良いコメント例
【必須】SQLインジェクション脆弱性
ユーザー入力をそのままSQL文に埋め込んでいるため、SQLインジェクション攻撃を受ける可能性があります。
改善提案:
// 現在
query = "SELECT * FROM users WHERE id = " + userId;
// 推奨
query = "SELECT * FROM users WHERE id = ?";
stmt = connection.prepareStatement(query);
stmt.setInt(1, userId);
プリペアドステートメントを使用することで安全にクエリを実行できます。
---
🤖 **Reviewed by Claude Code**
✅ **Validated by Codex**
避けるべきコメント
- 「良くない」「微妙」などの曖昧な表現
- 個人的な好みに基づく指摘
- 修正方法を提示しない批判のみのコメント
- 攻撃的・否定的な表現
注意事項
- GitHub CLI(gh)がインストール・認証済みであることを確認
- PRテンプレートが存在しない場合は、標準的なレビュー観点を適用
- 大量の変更がある場合は、重要度の高い問題から優先的にコメント
- 建設的で具体的なフィードバックを心がける
- 初学者でも分かるように、専門用語には補足を入れ、丁寧にコメントする
- Codex/Geminiによる検証を経たコメントには
✅ Validated by Codex/Geminiを署名に追加すること - Codex/Geminiが利用できない場合は、Claude単独でレビューを実施
回答待ちルール
codex execとgemini -pは並列実行する- 両方の完了を待ってから結果統合
- タイムアウト: 120秒
- 片方が失敗しても、得られた結果で報告する