CLAUDE_CODE_MAX_OUTPUT_TOKENSとは — 出力トークン上限を変える環境変数
CLAUDE_CODE_MAX_OUTPUT_TOKENSは1リクエストの最大出力トークンを決める環境変数です。モデルごとの上限値と、上げるとauto-compactionが早まる副作用まで押さえます。
CLAUDE_CODE_MAX_OUTPUT_TOKENSは何を変える変数か
CLAUDE_CODE_MAX_OUTPUT_TOKENSは、Claude Codeがほとんどのリクエストに設定する最大出力トークン数を上書きする環境変数です。既定値とモデルごとの上限は使用中のモデルによって異なります。設定した値がモデルの上限を超えていた場合、Claude Codeは上限まで切り下げます。
触る動機は主に2つです。ひとつは大規模なコード生成や長文ドキュメントを1回の応答で最後まで出したい場合、もうひとつは応答を短く抑えてコストと待ち時間を削りたい場合です。どちらの向きでも、この変数がモデルの物理的な上限を超えて効くことはありません。
手元のClaude Code v2.1.285でclaude --helpを確認すると、出力トークン上限を指定するコマンドラインフラグは見当たりません。設定手段は環境変数と、settings.jsonのenvキーの2つです。
上限はモデルで決まる
値の入れ方より先に確認したいのが、いまのモデルの天井です。この変数は天井の内側でしか動かせません。
Claude Codeで使えるモデルの最大出力トークン
上位モデル
128,000
Fable 5.1 / Fable 5 / Opus 5.5 / Opus 5 / Opus 4.8 / Opus 4.7 / Opus 4.6 / Sonnet 5.5 / Sonnet 5 / Sonnet 4.6
軽量・旧世代
64,000
Haiku 4.5 / Opus 4.5 / Sonnet 4.5
モデルID不明
32,000
Claude Codeが認識できないモデルID(ゲートウェイ固有の名前など)の既定値
Haiku 4.5は上位モデルの半分です。軽量モデルへ切り替えた直後に長い応答が途切れたら、まずこの上限差を疑えます。ゲートウェイ経由でモデルIDを認識できない状態では、明示しない限り32,000で頭打ちになります。どちらも、モデルの実力ではなく上限側の理由で切れている例です。
値の入れ方と、シェルとsettings.jsonが食い違うとき
指定は、シェルのexportか、settings.jsonのenvキーです。
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000
claudeチームに既定値として配るなら、リポジトリの.claude/settings.jsonに書いてコミットします。
{
"env": {
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": "64000"
}
}同じ変数をシェルとsettings.jsonの両方に書くと、settings.jsonの値が使われます。envの各エントリをClaude Codeがプロセス環境へ書き込み、シェルから引き継いだ値を置き換えるためです。ただし例外があります。Claude Desktopアプリやセルフホスト環境のランナーが起動したセッションでは、起動側が組んだ環境が優先されます。起動側がすでに設定している変数に限り、settings.jsonのenv値は無視されます。
どこに書くか
シェルの export
その端末のclaudeにだけ効きます。起動時に読まれるので、値を変えたらclaudeを起動し直します。
settings.json の env
~/.claude/settings.jsonは個人の全プロジェクト、.claude/settings.jsonはリポジトリの全員、gitignore済みの.claude/settings.local.jsonは自分だけの例外です。managed設定に書いた値は、他のファイルの同じキーより優先されます。保存すると、起動中のセッションにも反映されます。
反映されないときは、優先順位の高い別ファイルが同じキーを上書きしていないかを見ます。設定の全体像はClaude Code設定ガイドにあります。
上げると会話の自動要約(auto-compact)が早まる
見落とされがちな副作用がここです。auto-compactionとは、会話が長くなったときに過去のやり取りを自動で要約して詰め直す動作です。この変数を上げると、1回の応答のために確保されるコンテキストウィンドウの枠が広がり、compactionが起きるまでに使える実質のコンテキストが減ります。
compactionの発動位置そのものを動かしたいなら、この変数の担当ではありません。手段は3つあり、効き方が違います。
/autocompact(v2.1.221以降): 値をユーザー設定のautoCompactWindowに保存し、現在のセッションにも反映します。managed設定など上位のスコープが同じキーを持つ場合、値は保存されるものの、セッションは上位側の値のままです。--autocompactフラグ: その起動だけ有効で、保存済みの設定は変わりません。v2.1.285のclaude --helpには--autocompact <auto|tokens>として「Auto-compact window size (auto, or 100k–1M tokens)」と出ます。CLAUDE_CODE_AUTO_COMPACT_WINDOW: 設定されている間は、コマンド・フラグ・設定のどれよりも優先されます。
落とし穴がひとつあります。/autocompactと--autocompactは500kや1Mのような接尾辞を受け付けますが、環境変数が受け付けるのは500000のような素の整数だけです。500kと書くと500と読まれ、下限の100,000に切り上げられます。
/autocompact系と違い、CLAUDE_CODE_MAX_OUTPUT_TOKENSは数値の書き方に寛容です(詳細は末尾の折りたたみ)。長時間セッションの管理はClaude 1Mコンテキストの実務活用で扱っています。
入力と出力の上限が衝突した場合の動きも決まっています。入力にmax_tokensを足した合計がコンテキストの上限を超えてリクエストが拒否されると、Claude Codeはmax_tokensを減らして再試行します。会話そのものがコンテキストをほぼ埋めていて減らしても収まらないときは、再試行をやめてcompactionに切り替えます。値を高く固定しても、その場でエラーになって止まるわけではありません。
思考予算(MAX_THINKING_TOKENS)との関係
拡張思考の予算を決めるMAX_THINKING_TOKENSは、この変数が決めた出力上限より1トークン小さい値までに切り下げられます。下限は1,024トークンです。CLAUDE_CODE_MAX_OUTPUT_TOKENSを極端に小さくすると、思考に回せる予算も狭まります。
ただし、この数字が実際に使われる範囲は限られます。Claude Codeは、適応的推論(adaptive reasoning)のモデルではMAX_THINKING_TOKENSの0以外の値を無視し、モデル側が思考の深さを決めます。Sonnet 5以降、Opus 4.7以降、Fable系は常に適応的推論です。Opus 4.6とSonnet 4.6は、CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1で適応的推論を切ったときだけ固定予算に戻り、そのときこの切り下げが効きます。
Haiku 4.5・Opus 4.5・Sonnet 4.5は適応的推論を持たないため、MAX_THINKING_TOKENSが常に固定予算として使われます。
自動の切り下げがあっても、思考予算が出力上限を上回ると次の400エラーで応答が返らない場合があります。
API Error: 400 ... max_tokens must be greater than thinking.budget_tokens公式のエラー解説は、対処としてCLAUDE_CODE_MAX_OUTPUT_TOKENSを思考予算より上へ上げることを挙げています。具体的な直し方は「Thinking budget exceeds」エラーの原因と対処法にまとめました。
長い応答が途切れたときの切り分け
応答が不自然に途切れる・短く終わるとき
- 1
/modelの表示でモデルを特定する
/modelで今のモデルを確かめ、上の3区分のどれに入るかを当てはめます。ゲートウェイやクラウド経由でモデルを固定している場合、/modelの行にはClaude Codeが認識したIDならモデル名、認識できないIDなら生のIDが出ます。us.anthropic.claude-sonnet-4-5-20250929-v1:0ならSonnet 4.5と表示されます。ANTHROPIC_DEFAULT_*_MODEL_NAMEで表示名を付けている場合は、その名前が出ます。Microsoft Foundryではデプロイ名がそのまま出るため、この方法では判定できません。Bedrockなどで生のIDが出ていれば、Claude CodeがそのIDを認識しておらず、出力上限が既定の32,000になっている可能性があります。 - 2
変数の値の出どころを見る
claudeを起動したシェルのexportと、envを書いた各settings.jsonを見ます。Claude Desktopやセルフホストのランナーがセッションを起動した側の環境で変数がすでに設定されていると、settings.jsonのenv値は無視され、その変数名がデバッグログに出ます。デバッグログはclaude --debugで起動するか、セッション中に/debugを実行すると~/.claude/debug/<セッションID>.txtに書かれます。設定したつもりの値が効いていないときは、ここで変数名を探します。 - 3
低い値の固定を疑う
低い値を固定したまま、上限の高いモデルへ切り替えていないかを確かめます。モデルの上限を超える値を入れてもエラーにならず、その場合は上限で動きます。そのため、意図した上限で動いているかはエラーからは分かりません。
- 4
思考予算を見る
MAX_THINKING_TOKENSを設定しているなら、出力上限との大小関係を確かめます。上の400エラーが出ていれば、ここが原因です。
Message Batches APIの拡張出力について
同期のMessages APIとは別の枠もあります。Message Batches APIでは、一部モデルがoutput-300k-2026-03-24ベータヘッダーで最大300,000トークンまでの出力に対応します。対象はOpus 5.5・Opus 5・Opus 4.8・Opus 4.7・Opus 4.6・Sonnet 5.5・Sonnet 5・Sonnet 4.6です。これはバッチ処理用の別枠で、Claude Codeの対話セッションが使う同期リクエストの上限には影響しません。ヘッダーの付け方はClaude Batch APIで300k出力を得る方法にあります。
値の書式で気をつける点
整数系の環境変数は、v2.1.208より前は科学的記数法を正しく扱えませんでした。1e6が仮数部だけ読まれて1になる不具合で、v2.1.208で直っています。v2.1.211以降は1e6や64_000のような桁区切りも受け付けます。古いバージョンが残る環境では、10進の数字だけで書くのが確実です。
まとめ
変数の値を疑う前に、/modelの表示でモデルとIDの認識状態を確かめるのが近道です。値を上げるのは長い出力が要る間だけに絞ると、auto-compactionの前倒しも避けられます。関連する変数はClaude Code環境変数リファレンス、モデルごとの仕様はClaude Opus 5の使い方と仕様にまとめています。Claude Code全体の設定はClaude Codeの完全ガイドから辿れます。