bashOutputMaxCharsとは — Bash出力のインライン表示上限を上げる設定
bashOutputMaxCharsはBashコマンドの出力をインラインで受け取れる文字数を上げるsettings.jsonのキーです。既定値・上限・環境変数との関係をまとめました。
bashOutputMaxCharsは、成功したBash・PowerShellコマンドの出力のうち、Claudeがインラインで受け取れる文字数を決めるsettings.jsonのキーです。既定では約30,000字までで、それを超えると出力はファイルに保存され、プレビューだけが渡ります。長いビルドログやテストスイートの出力を、ファイルを開かせずに読ませたいときに使います。
長いログが途中で切れるとき、何が起きているのか
Claude CodeはBashコマンドの出力をまず作業用ファイルへ流し込み、コマンドが終わってから読み戻します。出力が5GBを超えたコマンドは強制終了されます。読み戻した結果がClaudeにどう渡るかは、コマンドを成功と見るか失敗と見るかで分かれます。
成功と失敗で、Claudeが受け取る量は違う
成功(Valid)
既定で約30,000字までインラインに乗ります。超えた分はセッションディレクトリに保存され、Claudeはファイルのパスと冒頭2,000字までのプレビューを受け取ります。残りが要るときは、Claudeがそのファイルを読むか検索します。保存ファイルも無制限ではなく、64MiBを超えた分は切り詰められます。
失敗(Failure)
インラインで渡るのは約10,000字までです。超えると、読み戻した範囲から同じ大きさの先頭と末尾の抜粋が切り出され、ファイルのパスは付きません。
bashOutputMaxCharsは、設定リファレンスで「成功したコマンドの出力」を対象にするキーとして説明されています。値を上げると、成功した出力がインラインで届く上限が広がります。読み戻し窓も同じ値に広がり、失敗時の抜粋はその窓から切り出されます。ただし抜粋の大きさ約10,000字は、上げても変わりません。
終了コード1は成功にも失敗にもなる
成功と失敗の線引きは終了コードだけでは決まりません。終了コード1でも、Claude Codeが「正常な結果」と認識しているコマンドは成功として扱われます。対象はgrep・rg・egrep・fgrep・find・diff・test・[、それにgit diffとgit grepです。
これ以外のコマンドが終了コード1で終わると、中身が無害でも失敗扱いです。公式が挙げる例は、pgrepが該当なしで終わる場合、jq -eの判定結果、cmpで差分が見つかった場合です。たとえばcmpで大きなファイルを比べて長い出力が出ても、受け取れるのは約10,000字の抜粋になります。
シェルの標準的な書き方で終了コードを0に揃えれば、成功扱いの上限で受け取れます。たとえばcmp a.bin b.bin || trueのように末尾へ|| trueを付ける方法です。ただし本物の失敗も成功に見えるので、出力が長くなりがちなコマンドに限って使います。
手元で上限を試す
設定が効いているかは、既定の約30,000字を超える出力を作って見るのが早い方法です。seqは連番を1行ずつ出すだけのコマンドで、リポジトリの中身に左右されません。seq 1 9000の出力は9,000行、43,893字です(wc -cで測った値)。
設定の効果を確かめる手順
- 1
バージョンを確認する
bashOutputMaxCharsはv2.1.261以降のキーです。これより古いバージョンでは、書いても何も変わりません。 - 2
既定の挙動を見る
設定なしの状態でClaudeに
seq 1 9000を実行させます。成功したコマンドの出力が約30,000字を超えるので、全行ではなく、冒頭のプレビューとファイルのパスが返ります。 - 3
1セッションだけ値を上げる
--settingsにJSON文字列を渡して起動します。この指定は1セッションだけ有効で、どの設定ファイルにも書き込まれません。 - 4
同じコマンドをもう一度実行する
43,893字は60,000字の枠に収まるので、今度は出力全体がインラインで返ります。
手順3の起動コマンドは次のとおりです。--settingsは設定ファイルのパスかJSON文字列を受け取るオプションで、v2.1.289のclaude --helpにも載っています。
claude --version
claude --settings '{"bashOutputMaxChars": 60000}'効果が見えたら、使い続ける値だけをsettings.jsonに書きます。
出力量を変えたいときは、seqの終端を動かします。wc -cで測ると、seq 1 6000は28,893字で既定の約30,000字に収まります。seq 1 20000は108,894字で、bashOutputMaxCharsを100000にしても超えるので、プレビューとファイルのパスに戻ります。境界の前後でどう返るかを見れば、自分の設定値がどこで効くかをつかめます。
設定はどのファイルに書くか
スコープが「Any file」のキーなので、書き場所は通常の設定ファイル3か所から選べます。自分の全プロジェクトに効かせるなら~/.claude/settings.json、リポジトリの全員に配るなら.claude/settings.json、自分だけそのプロジェクトで変えたいなら.claude/settings.local.jsonです。組織が配布するmanaged設定に書けば、全員に強制できます。
{
"bashOutputMaxChars": 100000
}同じキーが複数の場所にあれば、優先順位の高い方が勝ちます。順序は、managed設定、コマンドラインの--settings、プロジェクトのローカル設定、共有のプロジェクト設定、ユーザー設定です。このキーに特別な順序はありません。リポジトリの.claude/settings.jsonが80,000でも、自分の.claude/settings.local.jsonに50,000と書けば、そのプロジェクトでは自分の端末だけ50,000になります。
値の範囲は4,000から128,000までの正の整数です。範囲外の値を書いても、Claude Codeが4,000〜128,000の間へ丸めます。既定は未設定で、そのときは約30,000字がインラインに乗ります。追加はv2.1.261のリリースノートに載っています。
チームやCIでバージョンがそろっていないときは注意が必要です。v2.1.261より前のマシンでは、リポジトリに書いたbashOutputMaxCharsは無視され、インライン上限は約30,000字のままです。挙動をそろえるには、Claude Code側を更新します。
BASH_MAX_OUTPUT_LENGTHとどう違うのか
Bash出力には、環境変数BASH_MAX_OUTPUT_LENGTHという先行する設定もあります。名前は似ていますが、動かす範囲が違います。
bashOutputMaxChars | BASH_MAX_OUTPUT_LENGTH | |
|---|---|---|
| 種類 | bashOutputMaxCharssettings.jsonのキー | BASH_MAX_OUTPUT_LENGTH環境変数 |
| 変える範囲 | bashOutputMaxCharsインライン上限と読み戻し窓(両方) | BASH_MAX_OUTPUT_LENGTH読み戻し窓のみ |
| 既定値 | bashOutputMaxChars未設定(約30,000字がインライン) | BASH_MAX_OUTPUT_LENGTH30,000字 |
| 上限 | bashOutputMaxChars128,000字 | BASH_MAX_OUTPUT_LENGTH150,000字 |
BASH_MAX_OUTPUT_LENGTHを150,000字まで上げても、成功した出力は約30,000字を超えるとファイルのパスとプレビューで届きます。広がるのは読み戻す範囲で、失敗時の抜粋を切り出す元の範囲も同じです。この変数の詳細はBASH_MAX_OUTPUT_LENGTHとはにあります。
bashOutputMaxCharsを設定した場合、Claude CodeはBASH_MAX_OUTPUT_LENGTHを無視します。両方を書いても効くのはbashOutputMaxCharsだけなので、移行中に環境変数を残しても害はありません。
上限の大小は逆転しています。128,000字のbashOutputMaxCharsより、150,000字のBASH_MAX_OUTPUT_LENGTHのほうが大きいのです。読み戻す範囲だけを最大にしたいなら、環境変数だけを使えば数値上は広くなります。ただしその場合、インライン上限は動かせません。成功した出力をインラインで増やしたいなら、手段はbashOutputMaxCharsだけで、128,000字が天井です。
具体例で見ます。npm testが45,000字のログを出して正常終了したとします。bashOutputMaxCharsが未設定なら、Claudeが直接受け取るのはプレビューとファイルのパスで、全体はセッションディレクトリのファイルに残ります。60,000に設定しておけば、同じ規模のログはそのままインラインで届き、途中や末尾の警告もその場で読めます。同じコマンドが失敗して終わった場合は、約10,000字の抜粋だけです。
値はどう決めるか
上げると、インラインで渡る分だけClaudeに入る文字数が増えます。値を上げる場面の例として設定リファレンスが挙げるのは、詳細ログ付きのビルドや、フルテストスイートのログなど、既定の枠を日常的にあふれる出力です。
そうした出力が出ないなら、未設定のままで足ります。ログが100,000字前後まで出る場合は、そこに合わせた値を置きます。128,000字でも収まらない出力は、設定では解決しません。128,000字は絶対的な上限で、これ以上を指定しても丸められるからです。コマンド側で| tail -n 200のように絞り込むほうが確実です。
taskOutputMaxCharsはv2.1.277で廃止された
v2.1.261のリリースでは、bashOutputMaxCharsと同時に、バックグラウンドタスクの出力を対象にしたtaskOutputMaxCharsも追加されました。v2.1.276までは、TaskOutputツールでタスクの出力を読むときのインライン文字数を、このキーで指定できました。
このキーは、対象だったTaskOutputツールごと、v2.1.277で廃止されています。設定に残っていても効果はありません。バックグラウンドタスクの出力は、ClaudeがReadツールで出力ファイルを直接読む形に変わりました。bashOutputMaxCharsはBashコマンドの出力を対象にした設定で、こちらは廃止されていません。
似た名前の設定や変数との切り分け
Claude Codeには「出力の上限」に関わる設定が複数あり、対象が違います。
| 名前 | 種類 | 対象 |
|---|---|---|
bashOutputMaxChars | 種類settings.jsonのキー | 対象Bash出力のインライン上限と読み戻し窓 |
BASH_MAX_OUTPUT_LENGTH | 種類環境変数 | 対象Bash出力の読み戻し窓のみ |
CLAUDE_CODE_MAX_OUTPUT_TOKENS | 種類環境変数 | 対象ほとんどのリクエストの最大出力トークン数 |
MAX_MCP_OUTPUT_TOKENS | 種類環境変数 | 対象MCPツールのレスポンスに許可するトークン数 |
Bashのログが長すぎて困る場面で触るのは、bashOutputMaxCharsです。v2.1.261より前ならBASH_MAX_OUTPUT_LENGTHになります。Claude自身の応答が途中で切れる症状にはCLAUDE_CODE_MAX_OUTPUT_TOKENSとは、MCPサーバーの戻り値が大きい症状にはMAX_MCP_OUTPUT_TOKENSとはが対象です。設定を変えても直らないときは、どの経路の出力が切れているかを先に切り分けます。
まとめ
成功したコマンドのログがプレビューで切れて困るなら、bashOutputMaxCharsに必要な値だけを設定します。まず--settingsで1セッション試し、効いたら設定ファイルへ移すと失敗が少なく済みます。
失敗したコマンドの抜粋は設定を上げても約10,000字のままなので、長い出力が切れる原因が終了コード1の扱いにないかも見ておくと絞り込めます。