Claude Code で PR をレビューするとき、@claude review、local の /code-review、/code-review ultra、claude ultrareview のどれを使えばよいか迷いやすいです。名前は近いですが、実務での役割は違います。特に ultrareview は、普段の小さな差分へ毎回かける道具ではなく、merge 前に「ここだけは深く見たい」と決めた変更へ使う重いレビュー lane です。
この記事では、Claude Code ultrareview を重要 PR の深い pre-merge 確認として使う設計に絞ります。GitHub App で @claude review や REVIEW.md を運用する話は Claude Code code review 実践ガイド、issue や PR comment から実装を動かす話は Claude Code GitHub Actions 設計ガイド、Claude Code 全体の導入順は Claude Code の使い方 実践ガイド、Codex 側で差分を受け入れる前の確認は Codex レビュー完了ゲート設計ガイド に分けています。
今回の論点は、どの差分を ultrareview に出し、どの結果を merge 判断へ使い、どこで人間へ戻すかです。
先に結論: ultrareview は「普段使いのレビュー」ではなく深掘り枠
私なら、Claude Code のレビュー入口を次のように分けます。
| 目的 | 使う入口 | 判断 |
|---|---|---|
| 作業中に早く feedback が欲しい | /code-review | local session で短く回す |
| PR に通常の AI review finding を出したい | Code Review / @claude review | GitHub App のレビュー lane |
| 大きめの変更を merge 前に深く見たい | /code-review ultra | cloud sandbox の深掘り review |
| CI や script から深い review を待ちたい | claude ultrareview | non-interactive lane |
ultrareview は、Claude Code on the web の infrastructure 上で動く深い code review です。公式 docs では、local /code-review より広い reviewer fleet と独立検証を使い、通常の local review では見落としやすい bug を探すものとして説明されています。
だから、最初の設計は単純です。
claude_ultrareview_policy:
default: do_not_run
use_when:
- auth_or_permission_change
- payment_or_billing_change
- migration_or_data_rewrite
- security_boundary_change
- large_refactor_before_merge
avoid_when:
- docs_only
- copy_only
- generated_files_only
- formatter_or_lint_only
「全 PR に深い review をかける」ではなく、「深い review が必要な PR を選ぶ」方が運用に残ります。
/code-review と /code-review ultra を混ぜない
local の /code-review は、作業中の速い feedback に向いています。一方、/code-review ultra は remote sandbox で走り、時間も費用も重くなります。
| 項目 | /code-review | /code-review ultra |
|---|---|---|
| 実行場所 | local session | cloud sandbox |
| 対象 | working diff、PR、branch、path | working diff または PR |
| 速度 | 数秒から数分 | 目安 5〜10分 |
| 費用 | 通常利用分 | free run 後は usage credits |
| 向く場面 | 実装中の早い確認 | merge 前の重要差分 |
実務では、まず local /code-review で雑な問題を潰します。そのあと、差分が固まった段階で ultrareview に出します。順番を逆にすると、まだ動いている PR に重い review をかけることになり、指摘も費用も増えます。
私なら、PR author へ次のような運用を置きます。
## Review order
1. Run tests and local checks.
2. Run `/code-review` if the diff is still changing.
3. Split the PR if the review surface is too large.
4. Run `/code-review ultra` only after the PR is close to merge.
5. Treat ultrareview findings as review input, not automatic merge blockers.
AI review を増やす前に、PR を小さくする方が先です。ultrareview は大きすぎる差分をごまかす装置ではありません。
branch review と PR review を使い分ける
/code-review ultra は、引数なしなら current branch と default branch の diff を見ます。
/code-review ultra
base branch を変えるなら、branch 名を渡します。
/code-review ultra develop
GitHub PR を直接見るなら、PR 番号を渡します。
/code-review ultra 1234
私なら、local branch review と PR review を次のように分けます。
| 状況 | 選ぶ実行方法 |
|---|---|
| まだ push 前で、手元の差分を確認したい | branch review |
| PR として議論中の差分を確認したい | PR number |
| repository が大きく、bundle が厳しい | draft PR を作って PR mode |
| teammate の PR を merge 前に見たい | PR number |
公式 docs では、branch review では repository state を remote sandbox へ upload し、PR mode では remote sandbox が pull request を host から clone する形が説明されています。ここは権限設計として大事です。手元の未コミットファイルまで含めたいなら branch review、PR 上の公開された差分だけでよいなら PR mode と分けます。
差分が大きいときは PR を割る
ultrareview は、review 前に diff を確認し、対象外なら理由を返します。公式 docs では、branch review の既定上限として 500 changed files / 8,000 changed lines が示されていますが、実効値は変わり得ます。大事なのは数字を暗記することではなく、大きすぎる差分は深い review の前に分割することです。
私なら、ultrareview に出す前にこの基準で止めます。
pre_ultrareview_check:
changed_files:
ok: "<= 80"
split: "> 80"
changed_lines:
ok: "<= 1200"
split: "> 1200"
generated_files:
action: exclude_or_explain
lockfiles:
action: review_separately
migrations:
action: require_rollback_plan
公式上限より小さく置く理由は、review 結果を人間が読める状態に保つためです。8,000 行まで受け付けるから 8,000 行の PR でよい、という話ではありません。PR が大きいほど、AI も人間も「何が本質的な変更か」を見失います。
plain words は「レビュー観点メモ」として使う
Claude Code v2.1.218 以降では、/code-review ultra に短い自然文を付けられます。
/code-review ultra check my auth changes
この文は、review 対象を広げる魔法の指示ではなく、launch dialog に残るメモです。私は、次のように短く使います。
/code-review ultra focus on tenant isolation and rollback safety
避けるのは、長い prompt を付けることです。
/code-review ultra review everything, fix it, post comments, and approve if OK
これは review、fix、投稿、承認を混ぜています。ultrareview の目的は bug finding です。修正や承認は別の human gate に戻します。
--post は毎回の明示選択にする
ultrareview の結果は、GitHub PR へ plain comment として投稿できます。公式 docs では、interactive session なら launch dialog や /code-review ultra 1234 --post で投稿を選び、non-interactive な claude ultrareview では --post で投稿できると説明されています。
ただし、私は最初から --post を標準にしません。
| 段階 | 投稿方針 |
|---|---|
| 導入初期 | terminal に出して人間が要約する |
| 安定後 | 重要 PR だけ手動で post を選ぶ |
| CI 化後 | claude ultrareview --post は限定 repo のみ |
理由は、PR comment はチームの review record になるからです。未整理の AI finding をそのまま投稿すると、author は「どれを直すべきか」「誰が確認済みか」で迷います。
投稿するなら、先に triage します。
## Ultrareview triage
- Blocking:
- [ ] finding id / file / reason
- Needs follow-up issue:
- [ ] finding id / owner
- No action:
- [ ] false positive / pre-existing / accepted risk
AI が見つけたことと、チームが merge 判断に使うことは別です。
claude ultrareview はCI gateではなく深掘りjobにする
script や CI から使うなら、claude ultrareview subcommand を使います。
claude ultrareview
claude ultrareview 1234
claude ultrareview origin/main
この subcommand は remote review が終わるまで待ち、結果を stdout に出します。--json、--timeout、--post、--no-post も使えます。
ただし、私はこれを最初から required check にしません。導入初期は workflow_dispatch か label 起動にします。
name: Claude Ultrareview
on:
workflow_dispatch:
inputs:
pr:
required: true
type: string
permissions:
contents: read
pull-requests: read
jobs:
ultrareview:
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Run ultrareview
run: claude ultrareview "${{ inputs.pr }}" --no-post --timeout 30
この例は概念用です。実際には認証、usage credits、対象 repository、ログ保存、失敗時の扱いを組織ごとに決めます。特に、paid review の確認や usage credits 設定が必要な場合、interactive な /code-review ultra と non-interactive subcommand では挙動が違います。
CI での判定は、最初はこうします。
ultrareview_gate:
required_check: false
trigger: manual_dispatch
output:
store: private_artifact
post_to_pr: false
human_decision:
required_for:
- blocking_findings
- inconclusive_review
- timeout
「AI review が成功したから merge 可」ではありません。成功は、読める finding が返ったという意味に留めます。
usage credits と free runs を導入条件に入れる
ultrareview は premium feature です。公式 docs では、Pro / Max に 3 free runs があり、それ以降は usage credits、Team / Enterprise は free run なしで usage credits と説明されています。費用は変更サイズに応じて変わり、通常は review 前の dialog に見積もりが出ます。
導入前に、費用の扱いを決めます。
ultrareview_budget:
owner: engineering_manager
allowed_repositories:
- payment-api
- identity-service
monthly_review_limit:
payment-api: 6
identity-service: 4
requires_reason:
- "Why local /code-review is not enough"
- "What merge decision this review supports"
stop_when:
- usage_credits_disabled
- expected_cost_unknown
- pr_is_still_churning
費用上限を決めないまま「重要そうな PR だから回す」と始めると、いつの間にか重い review が日常化します。free run は検証用であって、運用設計の代わりではありません。
結果は finding ではなく decision packet にする
ultrareview が返す finding は、そのまま merge 判断ではありません。私は、最後に decision packet へ変換します。
## Ultrareview decision packet
- Target:
- Command:
- Scope:
- Cost estimate:
- Review completed:
- Blocking findings:
- Non-blocking findings:
- False positives:
- Human decision:
- Follow-up owner:
- Merge condition:
この形式にすると、review 結果、費用、scope、人間判断が1か所に残ります。PR comment に投稿する場合も、この packet を添えると、AI が出した finding とチームの判断が分かれます。
特に重要なのは Merge condition です。
Merge condition:
- Fix finding U-3 before merge.
- Open follow-up issue for U-5.
- No action on U-8 because it is pre-existing and covered by existing test debt issue.
ultrareview の価値は「たくさん指摘すること」ではありません。merge 前に人間が見落としやすい bug を、判断できる形にして返すことです。
使わない方がよい場面
ultrareview を使わない判断も、運用ルールに入れます。
| 場面 | 理由 |
|---|---|
| docs / copy だけの PR | 深い bug review の価値が薄い |
| formatter / generated file だけ | CI と差分確認で足りる |
| まだ設計が揺れている PR | review 結果がすぐ古くなる |
| 巨大 refactor の途中 | 先に分割すべき |
| secret や未公開設定が手元に多い branch review | PR mode へ寄せる |
AI review は、使わない判断ができて初めて実務に入ります。毎回使うなら、レビュー基準ではなく儀式になります。
実務の導入手順
私なら、導入は3段階にします。
- 個人利用で
/code-review ultraを 2〜3 回試す - 重要 PR だけ PR number 指定で実行する
claude ultrareviewを manual workflow に入れる
最初の2週間は、次を記録します。
## Ultrareview rollout log
- PR:
- Reason:
- Command:
- Duration:
- Cost:
- Findings:
- False positives:
- Action taken:
- Would run again:
Would run again が半分を切るなら、対象選定が広すぎます。auth、permission、billing、migration、security boundary のような high-risk PR へ絞り直します。
まとめ
Claude Code ultrareview は、通常の code review を置き換えるものではありません。普段の実装中 feedback は /code-review、PR 上の通常 review は Code Review / @claude review、深い pre-merge 確認だけを /code-review ultra や claude ultrareview に寄せるのが安全です。
大事なのは、使う前に対象、費用、投稿、merge 判断を決めることです。PR がまだ揺れているなら local review で十分です。差分が固まり、auth、permission、billing、migration のような失敗コストが高いときだけ、ultrareview を深掘り枠として使います。