code-review-router について
code-review-routerは、Gitの変更内容に応じてGeminiまたはCodexへコードレビューを振り分けるスキルです。変更規模やコードの特徴、言語、複雑さを判定し、選択したCLIが失敗した場合は代替CLIを試します。
主な機能
- 01GitリポジトリとCLIの確認
- 02差分と複雑さの分析
- 03言語とフレームワークの検出
- 04ルールに基づくGeminiまたはCodexへの振り分け
- 05選択したCLIが失敗した場合の代替
活用シーン
- 01Git差分に適したレビューCLIの選択
- 02セキュリティ関連の変更をCodexへ振り分け
- 03Pythonやフロントエンドの変更をGeminiへ送信
- 04優先するCLIが使えない場合のレビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ win4r/ agent-skills-code-review-router --skill code-review-routerインストール後、Claude Code で/code-review-routerを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
コードレビューの振り分け
変更の特性に基づいて、コードレビューを最適な CLI(Gemini または Codex)に振り分けます。
このスキルを使用しない場合
- コードレビュー以外の場合(ドキュメントの校正、文章の編集など)
- 管理していない外部/サードパーティのコードをレビューする場合
- コミットメッセージを生成する場合(専用のコミットスキルを使用してください)
- 特定のレビュアーが必要な場合(その CLI を直接使用してください)
ステップ 0:環境の確認
git リポジトリ内にいることを確認します。
git rev-parse --git-dir 2>/dev/null || echo "NOT_A_GIT_REPO"
git リポジトリではない場合: 処理を停止し、ユーザーに次のように伝えます:「このディレクトリは git リポジトリではありません。git init で初期化するか、リポジトリに移動してください。」
ステップ 1:前提条件の確認
両方の CLI が利用可能であることを確認します。
# Check for Gemini CLI
which gemini || echo "GEMINI_NOT_FOUND"
# Check for Codex CLI
which codex || echo "CODEX_NOT_FOUND"
どちらの CLI も見つからない場合: 処理を停止し、少なくとも 1 つをインストールする必要があることをユーザーに伝えます。
- Gemini:Google の Gemini CLI インストールドキュメントを確認してください
- Codex:OpenAI の Codex CLI インストールドキュメントを確認してください
一方の CLI のみ利用可能な場合: その CLI を使用します(振り分けは不要です)。
両方とも利用可能な場合: 振り分け分析に進みます。
ステップ 2:Git の差分を分析
差分の統計情報を収集するため、次のコマンドを実行します。
# Get diff stats (staged + unstaged)
git --no-pager diff --stat HEAD 2>/dev/null || git --no-pager diff --stat
# Get full diff for pattern analysis
git --no-pager diff HEAD 2>/dev/null || git --no-pager diff
# Count changed files
git --no-pager diff --name-only HEAD 2>/dev/null | wc -l
# Count total changed lines
git --no-pager diff --numstat HEAD 2>/dev/null | awk '{added+=$1; removed+=$2} END {print added+removed}'
変更が検出されない場合: 「レビュー対象はありません。未コミットの変更は見つかりませんでした。」と報告して終了します。
ステップ 3:複雑さスコアを計算
complexity_score = 0 で初期化し、次のポイントを加算します。
| 条件 | ポイント | 検出方法 |
|---|---|---|
| 変更ファイル数 > 10 | +2 | git diff --name-only | wc -l |
| 変更ファイル数 > 20 | +3 | (追加分、合計 +5) |
| 変更行数 > 300 | +2 | git diff --numstat の合計 |
| 変更行数 > 500 | +3 | (追加分、合計 +5) |
| 複数のディレクトリに変更がある | +1 | 変更ファイル内の一意なディレクトリ数を数える |
| テストファイルを含む | +1 | *test*、*spec* に一致するファイル |
| 設定ファイルを変更 | +1 | ファイル:*.config.*、*.json、*.yaml、*.yml、*.toml |
| データベース/スキーマの変更 | +2 | ファイル:*migration*、*schema*、*.sql、prisma/* |
| API ルートの変更 | +2 | api/、routes/ 内のファイル、または endpoint、handler を含むファイル |
| サービスレイヤーの変更 | +2 | services/ 内のファイル、または *service*、*provider* |
ステップ 4:言語とフレームワークを検出
ファイル拡張子とコンテンツのパターンを分析します。
主な言語の検出
.ts, .tsx → TypeScript
.js, .jsx → JavaScript
.py → Python
.go → Go
.rs → Rust
.java → Java
.rb → Ruby
.php → PHP
.cs → C#
.swift → Swift
.kt → Kotlin
フレームワークの検出(インポート/ファイルパターンを確認)
React/Next.js → "import React", "from 'react'", "next.config", pages/, app/
Vue → ".vue" files, "import Vue", "from 'vue'"
Angular → "angular.json", "@angular/core"
Django → "django", "models.py", "views.py", "urls.py"
FastAPI → "from fastapi", "FastAPI("
Express → "express()", "from 'express'"
NestJS → "@nestjs/", "*.module.ts", "*.controller.ts"
Rails → "Gemfile" with rails, app/controllers/
Spring → "springframework", "@RestController"
セキュリティ上重要なパターン
ファイルパスまたはコード内容から検出します。
ファイルパス:
**/auth/**
**/security/**
**/*authentication*
**/*authorization*
**/middleware/auth*
コードパターン(差分の内容):
password\s*=
api_key\s*=
secret\s*=
Bearer\s+
JWT
\.env
credentials
private_key
access_token
設定ファイル:
.env*
*credentials*
*secrets*
*.pem
*.key
ステップ 5:振り分け判断ツリーを適用
振り分けの優先順位(上から順に評価し、最初に一致したものを適用します)。
優先度 1:パターンベースのルール(必須ルール)
| パターン | 振り分け先 | 理由 |
|---|---|---|
| セキュリティ上重要なファイル/コードを検出 | Codex | 慎重なセキュリティ分析が必要 |
| ファイル数 > 20 または変更行数 > 500 | Codex | 大規模な変更セットには徹底したレビューが必要 |
| データベースのマイグレーションまたはスキーマの変更 | Codex | アーキテクチャ上のリスク |
| API/サービスレイヤーの変更 | Codex | バックエンドのアーキテクチャ変更 |
| 変更が 3 つ以上のトップレベルディレクトリにまたがる | Codex | 複数のサービスに影響 |
| 複雑な TypeScript(ジェネリクス、型ユーティリティ) | Codex | 型システムの複雑さ |
| フロントエンドのみ(jsx/tsx/vue/css/html) | Gemini | より単純で、ビジュアルに重点を置いたレビュー |
| Python エコシステム(py、Django、FastAPI) | Gemini | Python の強力なサポート |
| ドキュメントのみ(md/txt/rst) | Gemini | シンプルなテキストレビュー |
優先度 2:複雑さスコア(一致するパターンがない場合)
| スコア | 振り分け先 | 理由 |
|---|---|---|
| ≥ 6 | Codex | 複雑さが高いため、より詳細な分析が必要 |
| < 6 | Gemini | 複雑さは中程度のため、速度を優先 |
優先度 3:デフォルト
→ Gemini(判断が難しいケースでも、より速くフィードバックを得られます)
ステップ 6:レビューを実行
振り分けの判断を説明
実行する前に、次を出力します。
## Code Review Routing
**Changes detected:**
- Files: [X] files changed
- Lines: [Y] lines modified
- Primary language: [language]
- Framework: [framework or "none detected"]
**Complexity score:** [N]/10
- [List contributing factors]
**Routing decision:** [Gemini/Codex]
- Reason: [primary reason for choice]
**Executing review...**
CLI コマンド
注記: Gemini は stdin(パイプ経由)で差分を受け取りますが、Codex には git のコンテキストを直接読み取る専用の
reviewサブコマンドがあります。デバッグする場合は、Gemini を実行する前にgit diff HEADで出力が生成されることを確認してください。
Gemini の場合:
# Pipe diff to Gemini with review prompt
git --no-pager diff HEAD | gemini -p "Review this code diff for: 1) Code quality issues, 2) Best practices violations, 3) Potential bugs, 4) Security concerns, 5) Performance issues. Provide specific, actionable feedback."
Codex の場合:
# Use dedicated 'review' subcommand for non-interactive code review
# Note: --uncommitted and [PROMPT] are mutually exclusive
codex review --uncommitted
ステップ 7:フォールバックで失敗に対処する
選択した CLI が失敗した場合(終了コードが 0 以外、またはエラー出力がある場合):
-
失敗を報告します:
[Primary CLI] failed: [error message] Attempting fallback to [other CLI]... -
もう一方の CLI を試します
-
フォールバックも失敗した場合:
Both review CLIs failed. - Gemini error: [error] - Codex error: [error] Please check CLI installations and try manually.
ステップ 8:出力を整形する
レビュー結果をわかりやすく提示します:
## Code Review Results
**Reviewed by:** [Gemini/Codex]
**Routing:** [brief reason]
---
[CLI output here]
---
**Review complete.** [X files, Y lines analyzed]
クイックリファレンス
| 変更の種類 | ルート | 理由 |
|---|---|---|
| React コンポーネントのスタイリング | Gemini | フロントエンドのみ |
| Django ビューの更新 | Gemini | Python エコシステム |
| 50 行未満の単一バグ修正 | Gemini | 簡単な変更 |
| 新しい API エンドポイントとテスト | Codex | アーキテクチャ上の変更 |
| 認証システムの変更 | Codex | セキュリティ上重要 |
| データベースのマイグレーション | Codex | スキーマの変更 |
| 複数サービスのリファクタリング | Codex | 複雑度が高い |
| TypeScript 型の大幅な見直し | Codex | 複雑な型 |