「Diff is too large for ultrareview」の対処 — Claude Code
Claude Codeで「Diff is too large for ultrareview」が出たときの上限値の意味と、差分の事前計測・ベースブランチの絞り込み・分割・ローカルレビューへの切り替えによる対処を扱います。
/code-review ultraまたはclaude ultrareviewを実行すると、クラウドのレビューが始まる前に拒否されることがあります。表示されるのは「Diff is too large for ultrareview」というメッセージです。ブランチとベースブランチの差分(未コミット・ステージ済みの変更を含む)が既定の上限を超えたときに出るエラーで、クラウドセッションは1つも起動しません。拒否された時点では無料枠も消費されず、使用量クレジットの請求も発生しません。
メッセージが名指しする数字の読み方
上限はファイル数と行数の2つで、既定値のため変わることがあります。有効な値はエラー自身が毎回示すので、記事中の数字より画面の数字を優先してください。
ブランチレビューの既定の上限
変更ファイル数
500
未コミットとステージ済みの変更も含む
変更行数
8,000
メッセージが行数の多いファイルを名指しする
実際のメッセージは次のような形です。
Diff is too large for ultrareview: 812 files, 96,410 lines changed (limits: 500 files, 8,000 lines). Largest files: package-lock.json (41,904 lines), dist/bundle.js (18,210 lines), src/generated/api.ts (9,876 lines). Pass a closer base branch (`/code-review ultra <branch>`) to narrow the scope, or split the change.メッセージには、有効な上限、差分の実サイズ、変更行数の多いファイル上位の3要素が並びます。v2.1.216より前は生の差分統計しか出なかったため、古い版では上限値も寄与ファイルも読み取れません。
プルリクエストをレビューする形で同じ上限に触れると、書き出しが「PR #<N> is too large for ultrareview」に変わります。名指しされるのはPRのファイル数と行数までで、ファイル別の内訳は付きません。
再実行の前に差分の中身を自分で測る
エラーが出てから削るより、先にgitで差分の内訳を見ておくほうが手戻りが少なくなります。3ファイルに3,000行ずつ追加したブランチとmainの差分を測ると、次のようになります。
git diff --shortstat main...HEAD
git diff --numstat main...HEAD | sort -k1 -nr | head -3 3 files changed, 9000 insertions(+)
3000 0 f3.txt
3000 0 f2.txt
3000 0 f1.txt--numstatの1列目が追加行数、2列目が削除行数で、並べ替えるとメッセージの「Largest files」に相当する一覧を手元で再現できます。ファイル数が多いのか行数が多いのかも、この2行で切り分けられます。
3点ドットのmain...HEADは、コミット済みの変更だけを数えます。未コミットやステージ済みの変更も含めて測りたいときは、git diff --shortstat $(git merge-base main HEAD)のように分岐点から作業ツリーまでを比べます。この例でファイルを1つgit addすると、前者は9000行のまま、後者は4ファイル・9051行になります。追跡されていない新規ファイルはgit addするまで数に入りません。
原因別の対処の選び方
数字の見え方で、効く対処が変わります。
差分の見え方と最初の一手
上位に自動生成物が並ぶ
ロックファイル・ビルド成果物・生成コードが行数の大半を占めています。実装とは別のコミットかブランチに分けます。
無関係な変更まで入っている
ベースブランチが遠く、他人の変更や過去の作業が差分に混ざっています。近いブランチを明示して範囲を狭めます。
小さな変更なのに数百ファイルと出る
分岐元が見つからず、リポジトリ全体が対象になっている可能性があります。後述の条件を確かめます。
実装そのものが大きい
機能単位でブランチを割るか、ローカルの
/code-reviewで範囲を絞って回します。
ベースブランチを近づけて再実行する
差分は現在のブランチとベースブランチの間で計算されます。既定のベースが遠いときは、近いブランチを明示的に渡すだけで上限内に収まることがあります。
/code-review ultra developベースブランチはローカルクローンに存在している必要はありません。Claude Codeがoriginから取得します。名前を打ち間違えると、最も近い候補のブランチ名がエラーの中で提案されます。
ベースにはコミットIDやタグも指定できます。その場合は、そのコミットより後にブランチで加わった変更がレビュー対象です。
claude ultrareviewで絞り込むときの挙動
CIやスクリプトから使うclaude ultrareviewでも、ベースの絞り込みは同じです。v2.1.287の--helpは次のように表示します。
claude ultrareview --helpUsage: claude ultrareview [options] [target]
Run a cloud-hosted multi-agent code review of the current branch (or a PR number
/ base branch) and print the findings
Options:
-h, --help Display help for command
--json Print the raw bugs.json payload instead of formatted
findings
--no-post Do not post the findings to the PR (the default; accepted
for parity with the /ultrareview and /code-review ultra
flags)
--post Post the finished review's findings to the PR as you (PR
targets only; one plain comment, not a review)
--timeout <minutes> Maximum minutes to wait for the review to finish
(default: 45)引数の[target]にはPR番号かベースブランチを渡します。
claude ultrareview develop --json進行状況のメッセージはstderrに出るため、stdoutには所見だけが残ります。終了コードは、完了すれば0、起動に失敗した場合・途中で止まった場合・タイムアウトした場合は1、Ctrl-Cで中断すれば130です。待ち時間の既定は45分で、--timeout <minutes>で変えられます。
注意したいのは、所見が届く前にコマンドが終わった場合です。クラウド側のレビューは動き続けていることがあり、再実行しても続きから再開されず、新しいレビューとして無料枠の消費か課金が再び発生します。
小さな変更なのに上限に当たるとき
変更が少ないはずなのに数百ファイルと表示されるなら、ベースとの比較ができていない可能性があります。ultrareviewには、差分が取れない場合の例外が3つあります。
- ブランチがベースと履歴を共有していない、またはベースにするブランチがリポジトリにない場合は、追跡中の全ファイルがレビュー対象になります。この例外にも同じ上限が掛かり、全体のクローンが必要です
- リポジトリの最初のコミットは比べる相手がないため、全ファイルが対象です。同じ上限が掛かり、未追跡ファイルがあるときは全件対象にならず、
git addを促されて拒否されます。最初のコミットの全件レビューはv2.1.277以降の扱いで、claude ultrareviewとclaude -pは起動せず対話セッションへ誘導します - ブランチが1つもない状態(
FETCH_HEADをチェックアウトしたdetached HEADなど)では、レビュー自体が拒否され、ブランチを作るよう案内されます
全ファイル対象の起動には、対話セッションの確認ダイアログが必要です。分岐元がない場合の全ファイル対象の起動は、claude ultrareviewを自分で実行したときに限り、その実行が同意として扱われます。
リポジトリが大きすぎてバンドルできない場合は、PRモードの利用を促されます。差分の上限ではなく、アップロードのサイズ制限に当たった状態です。
バンドルできないリポジトリをPRモードで回す
- 1
ブランチをpushしてドラフトPRを開く
ローカルの作業ツリーは何もアップロードされません。クラウド側がGitHubからPRを直接クローンします。
- 2
PR番号を指定して実行する
/code-review ultra 123
PRモードにも差分の上限は掛かります。バンドルの問題は避けられますが、差分が大きければ「PR #<N> is too large for ultrareview」で止まります。
変更を分割する
メッセージが名指しする行数の多いファイルは、レビューの本質と無関係なことがよくあります。先ほどの例ではpackage-lock.jsonとdist/bundle.jsだけで6万行を占めています。自動生成ファイル・ロックファイル・ビルド成果物を実装差分と別のコミットやブランチに分ければ、残りが上限内に収まる見込みが立ちます。
生成物を切り離せない場合は、機能単位でブランチを割り、それぞれを個別にレビューします。
大規模なリネームやフォーマッタの一括適用も、機能変更とは別のブランチにします。上限判定はベースとの差分全体で行われるため、同じブランチに混ぜると差分の行数が増えるからです。
逆に差分が空のときは「Nothing to review」で拒否され、比較先のブランチやコミットと、その状況に合った対処が示されます。比べる相手を取り違えているときは、ここで気づけます。
ultrareviewを使わずローカルのレビューで進める
分割が現実的でない規模なら、ローカルの/code-reviewに切り替える選択肢があります。ultrareviewとの違いは次のとおりです。
/code-reviewとultrareviewの違い
/code-review
作業中の差分・PR・ブランチ・パスを対象に、自分のセッション内で動きます。深さは実行レベルの引数で変わり、所要時間は数秒から数分、料金は通常の使用量に含まれます。
/code-review ultra
複数のエージェントが独立に検証する構成で、所要時間はおおむね5〜10分です。無料枠のあとは、1回あたり5〜25ドル程度が使用量クレジットとして請求されます。
ローカル版は引数でレビュー範囲を絞れます。ファイルパス、PR番号、ブランチ名、main...my-featureのようなref範囲のいずれかを渡せる仕様です。巨大な差分を、ディレクトリ単位に割って順に見ていく使い方もできます。
/code-review high src/api実行レベルはlowからmaxまでで、lowとmediumは確度の高い指摘だけを出し、high以上は確度の低い指摘も含めて範囲を広げます。レベルを省くと前回入力したレベルが再利用され、Reusing high effort, the level you typed last timeのような通知が出ます。
レビュー経路の全体像はClaude Codeコードレビュー — 4つの実行経路の使い分けにまとめています。ultrareviewが他のワークフロー機能とどう組み合わさるかは、Claude Codeワークフロー — Ultraplan/Ultrareview/Checkpointingの扱いです。
ultrareviewの無料枠と請求の条件
上限に当たる前に、費用の条件も押さえておくと再実行の判断がしやすくなります。
- 無料枠はProとMaxで3回です。アカウントごとの1回限りの付与で、更新されません
- 1回に数えるのは、クラウドセッションが始まった時点です。途中で止めた場合や完了しなかった場合も1回に数えます。有料のレビューは、実際に動いた分だけが請求されます
- 無料枠を使い切った後の請求は使用量クレジットです。アカウントか組織で使用量クレジットが有効でないと、起動がブロックされます。
/usage-creditsで設定を確認・変更できます - 起動前の確認ダイアログには、対象のファイル数・行数、残りの無料枠、見積もりコストが並びます。使用量クレジットでの課金への確認は会話ごとに1回で、
/clearで新しい会話を始めると次の有料レビューで再び出ます
ultrareviewは、Amazon Bedrock、Google CloudのAgent Platform、Microsoft Foundryでは使えません。Zero Data Retentionを有効にした組織も対象外です。使えない環境では/code-review ultraが、自分のセッション内でローカルのレビューを実行します。
PRモードとブランチレビューで内訳の出方が違う理由
ブランチレビューは、ローカルのリポジトリ状態をバンドルしてクラウドのサンドボックスへアップロードします。PR番号を渡すPRモードは、サンドボックスがGitHubから直接PRをクローンし、手元の作業ツリーは前述のとおりアップロードしません。
拒否メッセージの内訳に差が出るのは、この経路の違いに対応しています。ブランチレビューのメッセージは行数の多いファイル上位まで示しますが、PRモードは全体のファイル数と行数だけです。PRのどのファイルが行数を押し上げているか分からないときは、先に紹介したgit diff --numstatをPRのブランチで実行すれば、同じ内訳を手元で作れます。
上限値やレビュー経路は今後の更新で変わる可能性があります。変更履歴はClaude Code v2.1.216 — サンドボックス分離を外す設定を追加し、無人と並列運用の不具合を修正のようなリリースノートでも追えます。