Claude Codeの出力が「+134 lines」で消える問題を直す——bashOutputMaxChars/taskOutputMaxChars設定ガイド【2026年9月版】
Claude Code v2.1.261で追加されたbashOutputMaxChars/taskOutputMaxChars設定を解説。長いビルドログが省略される仕組み、BASH_MAX_OUTPUT_LENGTHとの違い、設定手順とまだ直っていない部分まで整理した。
エンジニアのゆとです。
docker buildやterraform apply、テストスイートみたいな長いログを吐くコマンドをClaude Codeに実行させると、途中で⎿ … +134 lines (ctrl+o to see all)という表示に化けて、肝心の後半が見えなくなる。ctrl+oを押しても全部展開されるとは限らない——このもどかしさ、心当たりがある人は多いと思う。
2026年9月4日リリースのv2.1.261で、これに直接効く設定が2つ追加された。bashOutputMaxCharsとtaskOutputMaxCharsだ。ただ「上限が上がった」というだけの話ではなく、これまで別の環境変数(BASH_MAX_OUTPUT_LENGTH)を触って「なんで直らないんだ」とハマっていた人にとっては、根本的な勘違いを正す機会でもある。公式ドキュメントと実際のGitHub Issueを追いながら整理する。
まず結論——inlineで受け取れる上限が128,000文字まで上げられるようになった
対象は以下。
- Claude Codeバージョン: v2.1.261以降(
claude updateまたはclaude doctorでバージョン確認) - 変わったこと: Bashコマンドの出力とバックグラウンドタスクの出力について、Claudeが会話の中に直接(inline)受け取れる文字数の上限を、設定1つで最大128,000文字まで引き上げられるようになった
- これまでの上限を大きく上回るコマンド結果を、ファイル経由で読み直すことなくそのまま見てもらえる

何に困っていたのか——inlineとファイル保存の境目
Claude CodeのBashツールは、コマンドの出力を作業用ファイルにストリーミングしながら実行し、完了後にそのファイルから結果を読み戻す、という2段構えの仕組みになっている。公式ドキュメントの「Output limits」には、結果が「成功」か「失敗」かで扱いが変わると明記されている。
| 結果 | Claudeが受け取る内容 |
|---|---|
| 成功(Valid) | デフォルトで約30,000文字までinline。それを超えるとセッションディレクトリに保存したファイルのパス+冒頭のプレビューだけが渡され、Claudeは必要になったときにそのファイルを読む・検索する |
| 失敗(Failure) | 約10,000文字までinline。それを超えると先頭と末尾を切り出した抜粋のみで、ファイルパスは付かない |
つまりnpm run buildやpytest -vのような、出力が長くなりがちなコマンドが成功扱いになった瞬間、Claudeの目の前にあるのは「ファイルパスと冒頭だけ」になる。Claude自身がそのファイルを読み直せば済む話ではあるものの、往復が1テンポ増えるし、Claudeがファイルを読まずに「たぶんこうだろう」で会話を進めてしまうケースもある。
この不便さは以前からGitHub Issueで報告されていた。2026年3月のIssue #38590には、こういう指摘がある。
When Claude Code runs bash commands (e.g.
terraform apply), output is truncated for optimization. The⎿ … +134 lines (ctrl+o to see all)indicator appears, butctrl+ostill doesn’t reveal the full log reliably, and there’s no live streaming during execution.
terraform applyやdocker buildのように、成功したかどうかを最後まで見ないと判断できないコマンドほど、この省略が地味に効いてくる。
なぜBASH_MAX_OUTPUT_LENGTHを上げても直らなかったのか
ここが一番ハマりやすいポイントだと思う。Claude Codeには以前からBASH_MAX_OUTPUT_LENGTHという環境変数があって、公式の環境変数リファレンスにはこう書かれている。
Maximum number of characters of bash output that Claude Code reads back into a command’s result (default: 30000; maximum: 150000).
「30,000文字がデフォルトで、最大150,000文字まで上げられる」と読むと、これを上げればinlineでもっと長い出力を受け取れそうに見える。ところが同じOutput limitsのページには、この環境変数の役割についてこう補足がある。
Raising it enlarges the read-back window, which is also the window a failing command’s excerpt is cut from. It doesn’t raise the inline ceilings: a valid result over the inline ceiling arrives as a file path plus preview regardless of this variable.
BASH_MAX_OUTPUT_LENGTHが広げるのは、あくまで「ファイルから読み戻す量(read-back window)」であって、「inlineでそのまま渡す量(inline ceiling)」ではない。だから成功したコマンドの結果が長ければ、この変数をいくら150,000まで上げても、Claudeの目の前にはやっぱりファイルパスとプレビューしか出てこない。効いているのは「ファイルを読み直したときにどこまで読めるか」の範囲だけだ。
自分も最初この違いを知らずにBASH_MAX_OUTPUT_LENGTHだけ上げて「あれ、変わらないな」と首をひねった側の人間なので、ここは強調しておきたい。
bashOutputMaxChars / taskOutputMaxCharsの設定方法
inlineの上限そのものを動かすには、v2.1.261から追加されたbashOutputMaxChars設定を使う。設定リファレンスでの説明はこうだ。
Set how much of a successful command’s output Claude receives inline
.claude/settings.json(プロジェクト共有・プロジェクトローカル・ユーザーいずれのスコープでも指定可能)に以下のように書く。
{
"bashOutputMaxChars": 128000
}
ポイントは3つ。
- 最大128,000文字まで設定できる(デフォルトの約30,000文字から4倍以上)
- inlineの上限と読み戻しウィンドウの両方をまとめてこの値に揃える
- この設定を入れると、Claude Codeは
BASH_MAX_OUTPUT_LENGTH環境変数を無視するようになる(優先順位が入れ替わる)
taskOutputMaxCharsはバックグラウンドタスクの出力向けで、リリースノートでは「command and background-task output」とまとめて説明されている。書き方は同じ要領で、こちらも設定しておくと安心だ。
{
"bashOutputMaxChars": 128000,
"taskOutputMaxChars": 128000
}
正直に書いておくと、記事執筆時点(v2.1.261リリースから2日後)でtaskOutputMaxCharsは公式の設定リファレンス索引ページにはまだ載っておらず、チェンジログにのみ記載がある状態だった。ドキュメント側の追記がまだ追いついていないだけだと思うが、挙動の細部(デフォルト値の正確な数字など)を保証する一次情報が現時点では見当たらないので、「bashOutputMaxCharsと対になる設定」として扱いつつ、手元の環境で実際に効いているか/contextやログで確認しながら使うのが無難だ。

上げるときの注意点——コンテキストとコストのトレードオフ
128,000文字を丸ごとinlineで受け取れるようになるのは便利だけど、タダではない。長いビルドログをそのままコンテキストに流し込めば、その分だけコンテキストウィンドウを消費するし、従量課金なら入力トークンとしてそのままコストに乗る。CLAUDE.mdでコンテキスト管理を意識している人ほど、この上限を無条件に128,000まで振り切るのは避けたほうがいい。
自分の感覚では、普段使いのリポジトリはデフォルトのままにしておいて、CIログやモノレポのビルドなど「出力が長くなるのが分かっているタスク用のプロジェクト」だけ.claude/settings.json(プロジェクトスコープ)で60,000〜128,000あたりに個別で上げる、という使い分けが現実的だと思う。ユーザースコープ(~/.claude/settings.json)に書いて全プロジェクト共通で上げてしまうと、普段の軽い作業でも無駄にコンテキストを食う設定になりかねない。

まだ直っていない部分——サブエージェントの通知本文は別の上限がある
ここは今回調べていて一番驚いた点なんだけど、bashOutputMaxChars/taskOutputMaxCharsが直すのはBashツールとバックグラウンドタスクの出力であって、サブエージェント(Task tool)が親セッションに返す「タスク通知」の本文は、また別の仕組みで切り詰められている。
2026年9月2日に立てられたIssue #91580(記事執筆時点で未解決)によると、バックグラウンドで動いていたサブエージェントの最終レポートが親セッションに通知として届くとき、本文は約100,000文字でハードコードされた上限に切り詰められる。しかも、この用途向けに用意されているはずのTASK_MAX_OUTPUT_LENGTH環境変数(サブエージェント出力向け、デフォルト32,000・最大160,000で、超えた分はファイルに保存されてパスが案内される仕様)はこの通知パスには効かず、切り詰められた側にファイルパスの案内も付かない、と報告されている。
Issue内の再現ログでは163,125文字・120,095文字・109,005文字の3件のレポートが、いずれも約100,040文字(本文+切り詰めマーカー分)に切り詰められていたとのこと。バイナリを調べた投稿者によれば、コード内にFQn=1e5(=100,000)という決め打ちの定数があり、そこが原因らしい。
複数のサブエージェントを並列で走らせて最後にオーケストレーター役のセッションが結果を統合する、という使い方をしている人は影響を受けやすい。Issue内で提示されている当座の回避策はこうだ。
Have subagents write their full report to a file and include the path in their final message; instruct the parent to Read the saved file whenever a return approaches ~100KB, and never treat a large notification body as the complete text.
要するに「サブエージェント側に、長くなりそうなレポートは自分でファイルに保存させて、そのパスだけ最終メッセージに書かせる」という運用でしのぐしかない、というのが現状だ。bashOutputMaxChars/taskOutputMaxCharsで解決するのはあくまでBash・バックグラウンドタスクの出力であって、サブエージェント間の通知本文は射程外——ここを混同すると「設定したのに直らない」ともう一度ハマることになるので、切り分けて覚えておいたほうがいい。

まとめ
- Claude Codeは成功したBashコマンドの出力を約30,000文字、失敗した出力を約10,000文字までしかinlineで渡さず、それを超えるとファイルパス+プレビューに切り替わる仕様が長らく不満の種だった
BASH_MAX_OUTPUT_LENGTH環境変数は「ファイルからの読み戻し量」を広げるだけで、inlineの上限そのものは動かせない——ここを混同すると設定してもハマったままになる- v2.1.261で追加された
bashOutputMaxChars/taskOutputMaxCharsを.claude/settings.jsonに設定すれば、inlineの上限を最大128,000文字まで引き上げられる。ただしコンテキスト消費・コストとのトレードオフがあるので、必要なプロジェクトだけ個別に上げるのが現実的 - サブエージェントの通知本文には別の約100,000文字の固定上限がありこれらの設定では解決しない。並列サブエージェント運用をしている人は、レポートをファイル保存させる回避策を併用する必要がある
まずはclaude doctorでバージョンがv2.1.261以降か確認するところから。古いままだと設定を書いても効かないので、そこだけ最初にチェックしておくといい。