bashOutputMaxCharsとは — Bash出力のインライン表示上限を上げる設定
bashOutputMaxCharsはBashコマンドの出力をインラインで受け取れる文字数を上げるsettings.jsonのキーです。既定値・上限・環境変数との関係をまとめました。
bashOutputMaxCharsは、成功したBash・PowerShellコマンドの出力のうち、Claudeがインラインで受け取れる文字数を決めるsettings.jsonのキーです。既定では約30,000字までで、それを超えると出力はファイルに保存され、プレビューだけが渡ります。長いビルドログやテストスイートの出力をファイルを開かずに読ませたいときに使う設定です。
bashOutputMaxCharsは何を変える設定か
Claude CodeはBashコマンドの出力をまず作業用ファイルへストリーミングし、コマンドが終わってからそのファイルを読み戻します。読み戻した結果がClaudeにどう渡るかは、コマンドが成功したか失敗したかで分かれます。成功(Valid)した結果は既定で約30,000字までインラインに乗り、超えた分はセッションディレクトリのファイルパスと冒頭2,000字のプレビューに置き換わります。bashOutputMaxCharsは、この成功時のインライン上限を指定した値まで引き上げる設定です。
設定できる値は4,000字から128,000字までの整数です。この範囲外の値を書いても、Claude Codeが自動的に4,000〜128,000字へ丸めます。既定は未設定で、その場合は約30,000字のままです。利用にはClaude Code v2.1.261以降が必要で、v2.1.261のリリースノートで追加が告知されています。
出力がValid(成功)かFailure(失敗)かはどう決まるか
bashOutputMaxCharsが広げるのはValid側の上限だけなので、あるコマンドがどちらに判定されるかを知っておく必要があります。
Claude Codeは終了コードだけでなく、コマンドの種類も見て判定します。終了コード1を返しても、Claude Codeが「正常な結果」と認識しているコマンドはValid扱いになります。対象はgrep・rg・egrep・fgrep・find・diff・test・[、それにgit diffとgit grepです。これら以外のコマンドが終了コード1で終わると、実質的には無害な結果でもFailure扱いになります。pgrepが該当なしで終了コード1を返す場合や、jq -eの判定失敗がこれにあたります。
出力そのものにも別の上限があります。コマンドの標準出力が5GBを超えるとプロセスは強制終了されます。Valid判定でファイルパスに切り替わったあとの保存ファイルも無制限ではなく、64MiBを超えた分は切り詰められます。bashOutputMaxCharsが扱うのは、これより手前の「インラインで渡す文字数」だけです。
設定方法 — settings.jsonのどこに書くか
書く場所はスコープが「Any file」の設定キー共通の4か所から選びます。自分の全プロジェクトに効かせるなら~/.claude/settings.json(User)、リポジトリの全員に配るなら.claude/settings.json(Project)、自分だけそのプロジェクトで変えたいなら.claude/settings.local.json(Local)です。組織が配布するmanaged設定に書けば、全員に強制できます。
{
"bashOutputMaxChars": 100000
}複数のファイルが同じキーを設定した場合は、settings.json共通の優先順位がそのまま働きます。managed設定が最も優先され、次にコマンドラインの--settings、Project local、Shared project、Userの順です。bashOutputMaxCharsにキー固有の特別な優先順位ルールは無く、この一般順序に従います。たとえばリポジトリの.claude/settings.json(Shared project)で80,000を設定していても、自分の.claude/settings.local.json(Project local)で50,000を指定すれば、そのプロジェクトでは自分だけ50,000が優先されます。
設定が反映されているかどうかは、まずインストール済みバージョンで確認します。
claude --versionv2.1.261より前のバージョンでは、bashOutputMaxCharsを書いても効果がありません。バージョンが古い場合はまず更新してから設定します。反映自体を確かめたいときは、既定の約30,000字を超える長さのコマンド(たとえばfind . -type f | head -n 2000)を実行し、冒頭プレビューとファイルパスではなく出力全文がインラインに返るかを見ます。
チームやCIランナーでClaude Codeのバージョンが揃っていない場合も注意が必要です。リポジトリの.claude/settings.jsonにbashOutputMaxCharsを書いても、v2.1.261より前のマシンでは効果がなく、そのマシンでは引き続きBASH_MAX_OUTPUT_LENGTHの値がそのまま効きます。インライン上限は約30,000字のまま変わらないため、両方の値を揃えても挙動は一致しません。マシン間で挙動を揃えるにはClaude Code自体をv2.1.261以降へ更新する必要があります。
上限128,000字 — 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字 |
| 必要バージョン | bashOutputMaxCharsv2.1.261以降 | BASH_MAX_OUTPUT_LENGTH制限なし |
BASH_MAX_OUTPUT_LENGTHを引き上げても、成功時にインラインで渡る約30,000字の境界そのものは動きません。広がるのは、あとから読み直せる範囲と、失敗時の抜粋を切り出す元になる範囲だけです。BASH_MAX_OUTPUT_LENGTHとはで扱っているとおり、この変数だけではインライン表示そのものを増やせません。bashOutputMaxCharsはその制約を越えて、インライン上限自体を指定値まで引き上げます。
bashOutputMaxCharsを設定すると、Claude CodeはBASH_MAX_OUTPUT_LENGTHを無視します。両方を設定していても、効くのはbashOutputMaxChars側だけです。既存の環境変数運用から移行する場合は、BASH_MAX_OUTPUT_LENGTHを残したままでも構いませんが、実際の挙動はbashOutputMaxCharsの値で決まります。
一点だけ逆転が起きます。bashOutputMaxCharsの上限は128,000字で、BASH_MAX_OUTPUT_LENGTHの150,000字より低いのです。読み戻し窓だけを最大限広げたい場合、bashOutputMaxCharsを設定しないほうが数値上は大きな窓を確保できます。ただしその場合、インライン上限は約30,000字のまま動かせません。インライン表示そのものを増やしたいならbashOutputMaxChars一択で、上限128,000字が実質的な天井になります。
たとえばnpm testが45,000字のログを出しながら正常終了したとします。bashOutputMaxCharsが未設定なら、Claudeが直接受け取るのは冒頭のプレビューとファイルパスだけで、ログ全体はセッションディレクトリのファイルに残ります。ここでbashOutputMaxCharsを60,000に設定しておけば、次に同じ規模のログを出すコマンドが正常終了したとき、45,000字はそのままインラインでClaudeに渡ります。ファイルを開き直す手間がなくなり、ログの途中や末尾に出ていた警告もその場で確認できます。同じログを出すコマンドが失敗して終わった場合は事情が異なり、Claudeが受け取るのは先頭・末尾を合わせて約10,000字の抜粋だけです。
シーン別の目安値
値を上げるほど1回のツール呼び出しがコンテキストを多く消費します。用途に応じて必要な範囲に絞るのが基本です。
| 用途 | 目安値 | 理由 |
|---|---|---|
| 通常のコマンド実行 | 目安値未設定のまま | 理由ほとんどの出力は既定の約30,000字に収まる |
| 詳細ログ付きビルド | 目安値60,000〜80,000 | 理由冗長なビルドログで末尾の要点が切れやすい |
| フルテストスイートのログ | 目安値100,000〜128,000 | 理由失敗テストの出力が途中に埋もれることがある |
| CIでの大量diff表示 | 目安値80,000前後 | 理由変更ファイルが多いと出力が伸びやすい |
128,000字を超える出力がどうしても必要な場合は、値を上げても解決しません。128,000字はbashOutputMaxCharsの絶対的な上限で、これ以上は指定しても丸められます。コマンド側で| tail -n 200のように絞り込むほうが確実です。
taskOutputMaxCharsはv2.1.277で廃止された
bashOutputMaxCharsと同じv2.1.261で、バックグラウンドタスクの出力を扱うtaskOutputMaxCharsというキーも追加されました。当時はTaskOutputツールでバックグラウンドタスクの出力を読む際、インラインで受け取る文字数をこのキーで指定できました。
このキーはv2.1.277で、対象だったTaskOutputツールごと廃止されています。現在の設定にtaskOutputMaxCharsが残っていても効果はありません。バックグラウンドタスクの出力は、ClaudeがReadツールで出力ファイルを直接読む形に変わりました。インラインで受け取る文字数を専用キーで指定する仕組み自体が、バックグラウンドタスク側では不要になったことになります。bashOutputMaxCharsはBashコマンドの出力を対象にした設定で、こちらは廃止されていません。
似た名前の設定・変数と混同しない
Claude Codeには「出力の上限」を扱う設定や環境変数が複数あり、対象が異なります。
| 名前 | 種類 | 対象 |
|---|---|---|
bashOutputMaxChars | 種類settings.jsonのキー | 対象成功したBash出力のインライン上限と読み戻し窓 |
BASH_MAX_OUTPUT_LENGTH | 種類環境変数 | 対象Bash出力の読み戻し窓のみ |
CLAUDE_CODE_MAX_OUTPUT_TOKENS | 種類環境変数 | 対象APIリクエスト1回あたりの最大出力トークン数 |
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はBashコマンドが成功した場合のインライン表示上限を、既定の約30,000字から最大128,000字まで引き上げるsettings.jsonのキーです。v2.1.261以降で使え、設定すると環境変数BASH_MAX_OUTPUT_LENGTHは無視されます。失敗時の約10,000字の抜粋窓を広げるとは公式に明記されていない点と、上限がBASH_MAX_OUTPUT_LENGTHの150,000字より低い128,000字である点は、移行前に押さえておく価値があります。
ビルドログやテスト結果が長く途中で切れて困る場合は、~/.claude/settings.jsonか.claude/settings.jsonに必要な値だけを設定します。128,000字でも足りない出力は、設定ではなくコマンド側で絞り込むのが確実です。