Claude Media
bashOutputMaxCharsとは — Bash出力のインライン表示上限を上げる設定

bashOutputMaxCharsとは — Bash出力のインライン表示上限を上げる設定

bashOutputMaxCharsはBashコマンドの出力をインラインで受け取れる文字数を上げるsettings.jsonのキーです。既定値・上限・環境変数との関係をまとめました。

bashOutputMaxCharsは、成功したBash・PowerShellコマンドの出力のうち、Claudeがインラインで受け取れる文字数を決めるsettings.jsonのキーです。既定では約30,000字までで、それを超えると出力はファイルに保存され、プレビューだけが渡ります。長いビルドログやテストスイートの出力を、ファイルを開かせずに読ませたいときに使います。

長いログが途中で切れるとき、何が起きているのか

Claude CodeはBashコマンドの出力をまず作業用ファイルへ流し込み、コマンドが終わってから読み戻します。出力が5GBを超えたコマンドは強制終了されます。読み戻した結果がClaudeにどう渡るかは、コマンドを成功と見るか失敗と見るかで分かれます。

くらべる

成功と失敗で、Claudeが受け取る量は違う

bashOutputMaxCharsの対象

成功(Valid)

既定で約30,000字までインラインに乗ります。超えた分はセッションディレクトリに保存され、Claudeはファイルのパスと冒頭2,000字までのプレビューを受け取ります。残りが要るときは、Claudeがそのファイルを読むか検索します。保存ファイルも無制限ではなく、64MiBを超えた分は切り詰められます。

約10,000字の抜粋

失敗(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. 1

    バージョンを確認する

    bashOutputMaxCharsはv2.1.261以降のキーです。これより古いバージョンでは、書いても何も変わりません。

  2. 2

    既定の挙動を見る

    設定なしの状態でClaudeにseq 1 9000を実行させます。成功したコマンドの出力が約30,000字を超えるので、全行ではなく、冒頭のプレビューとファイルのパスが返ります。

  3. 3

    1セッションだけ値を上げる

    --settingsにJSON文字列を渡して起動します。この指定は1セッションだけ有効で、どの設定ファイルにも書き込まれません。

  4. 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という先行する設定もあります。名前は似ていますが、動かす範囲が違います。

bashOutputMaxCharsBASH_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の扱いにないかも見ておくと絞り込めます。

この記事を共有:XはてブLinkedIn