<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>トラブルシューティング | 週末起業ラボ</title>
	<atom:link href="https://shumatsu-lab.com/tag/%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://shumatsu-lab.com</link>
	<description>本業の隣で、もう一つのキャリアを</description>
	<lastBuildDate>Wed, 03 Jun 2026 23:16:16 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://shumatsu-lab.com/wp-content/uploads/2026/02/cropped-IMG_2742-32x32.jpeg</url>
	<title>トラブルシューティング | 週末起業ラボ</title>
	<link>https://shumatsu-lab.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">252581404</site>	<item>
		<title>Claude Code cache_control 400エラー｜画像貼付の対処法</title>
		<link>https://shumatsu-lab.com/claude-code-empty-text-block-error/</link>
		
		<dc:creator><![CDATA[ムラサキ]]></dc:creator>
		<pubDate>Sat, 02 May 2026 08:26:19 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[AI活用]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[エラー対処]]></category>
		<category><![CDATA[トラブルシューティング]]></category>
		<guid isPermaLink="false">https://shumatsu-lab.com/?p=1333</guid>

					<description><![CDATA[SE歴20年で副業ブログを運営する筆者が、Claude Code Maxプランで自動化パイプラインを動かしているとき、画像をスクショで貼り付けただけで、その後セッション全体が「400エラー」で動かなくなる現象に1週間悩ま [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">SE歴20年で副業ブログを運営する筆者が、Claude Code Maxプランで自動化パイプラインを動かしているとき、画像をスクショで貼り付けただけで、その後セッション全体が「400エラー」で動かなくなる現象に1週間悩まされました。原因はAnthropic APIの仕様とClaude Code 2.1系の既知バグの組み合わせ。2026年5月時点で確認できた範囲で、エラーの正体・復旧手順・リモートから対応できるかの実際の解決方法を整理します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://shumatsu-lab.com/wp-content/uploads/2026/03/murasaki_icon.png" alt="ムラサキ" class="speech-icon-image"/></figure><div class="speech-name">ムラサキ</div></div><div class="speech-balloon">
<p class="wp-block-paragraph">画像だけ貼って送ったあと、何を打っても400が消えない。その絶望感を共有したい。同じパターンで詰まってる人は多いはずです。</p>
</div></div>


<div class="slb slb-tldr">
  <div class="slb-tldr__head">
    <span class="slb-mono slb-tldr__label">TL;DR / 三行要約</span>
          <span class="slb-mono slb-tldr__meta">10 MIN READ · UPDATED 2026.05</span>
      </div>
  <ol>
          <li>cache_control cannot be set for empty text blocks は画像のみ送信ターンで空テキストブロックが生まれ、セッション全体が400で詰まるバグ（Issue #50375他4件）。</li>
          <li>復旧はPCで Esc×2（/rewind）のみ。外出先リモコンからは/rewindが使えず復旧不可。</li>
          <li>再発防止は「画像送信時に1文字以上のテキストを必ず添える」だけ。根本修正は2026年5月時点で未提供。</li>
      </ol>
    <div class="slb-tldr__badges">
          <span class="slb-badge slb-badge--hi">
        RESULT — Esc×2で即復旧      </span>
          <span class="slb-badge">
        TOOL — Claude Code 2.1系 + /rewind      </span>
          <span class="slb-badge">
        COST — GitHub Issue 4件・根本修正未提供      </span>
      </div>
  </div>
    




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">「cache_control cannot be set for empty text blocks」とは何のエラーか</a></li><li><a href="#toc2" tabindex="0">「画像のみ貼り付け」でセッションが詰んだ話</a><ol><li><a href="#toc3" tabindex="0">発生したエラー本文</a></li><li><a href="#toc4" tabindex="0">なぜ詰むのか</a></li><li><a href="#toc5" tabindex="0">試した手段（いずれも無効）</a></li></ol></li><li><a href="#toc6" tabindex="0">エラーの正体&#8211;cache_control × 空テキストブロックの組み合わせ</a><ol><li><a href="#toc7" tabindex="0">仕様：空テキストブロックはキャッシュできない</a></li><li><a href="#toc8" tabindex="0">バグ：画像のみのターンで空テキストブロックが生成される</a></li><li><a href="#toc9" tabindex="0">関連する4つのGitHub Issue</a></li></ol></li><li><a href="#toc10" tabindex="0">PC側で「詰んだ」セッションを復旧する手順</a><ol><li><a href="#toc11" tabindex="0">第一手：/rewind（または Esc 2回）でエラー前まで巻き戻す</a></li><li><a href="#toc12" tabindex="0">第二手：JSONLトランスクリプトを直接編集する</a></li><li><a href="#toc13" tabindex="0">第三手：新セッションで再開する</a></li></ol></li><li><a href="#toc14" tabindex="0">外出先（リモコン）から復旧できるか&#8211;調査と現実解</a><ol><li><a href="#toc15" tabindex="0">結論：/rewind はリモコンから使えない</a></li><li><a href="#toc16" tabindex="0">筆者の検証：iOSとWeb版両方で反応なし</a></li><li><a href="#toc17" tabindex="0">「外出先で詰んだら何ができるか」の現実解</a></li></ol></li><li><a href="#toc18" tabindex="0">再発させない予防策</a><ol><li><a href="#toc19" tabindex="0">画像を送るときは必ず1文字でも添える</a></li><li><a href="#toc20" tabindex="0">バックグラウンドタスクと同時送信を避ける</a></li><li><a href="#toc21" tabindex="0">Claude Codeを最新版に保つ</a></li></ol></li><li><a href="#toc22" tabindex="0">よくある質問</a></li><li><a href="#toc23" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">「cache_control cannot be set for empty text blocks」とは何のエラーか</span></h2>



<p class="wp-block-paragraph">ターミナルでこのエラーが突然表示されたら、このページが役に立つはずです。先に結論をいきます。</p>



<p class="wp-block-paragraph"><code>cache_control cannot be set for empty text blocks</code> は、Anthropic APIが「空のテキストブロックにキャッシュ制御を付けようとした」リクエストを拒否するエラー。Claude Codeで画像のみを貼り付けて送信したターンが原因で、セッションの履歴に空テキストブロックが残り、以降のリクエストがすべて弾かれます。</p>



<p class="wp-block-paragraph">復旧はPCで <code>Esc</code> を2回押す（<code>/rewind</code>）だけ。詰みの仕組みと再発防止まで説明します。</p>



<h2 class="wp-block-heading"><span id="toc2">「画像のみ貼り付け」でセッションが詰んだ話</span></h2>



<p class="wp-block-paragraph">ブログ自動化パイプライン構築中に遭遇したエラーの記録です。</p>



<h3 class="wp-block-heading"><span id="toc3">発生したエラー本文</span></h3>



<p class="wp-block-paragraph">スクリーンショットだけをペーストしてClaude Codeに送信したターンでは応答が返ってきました。その次のターン以降、何を送っても以下のエラーで止まります。</p>



<pre><code>API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"messages.105.content.2.text: cache_control cannot be set for empty text blocks"}}</code></pre>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">※ Windows 11、Claude Code Maxプラン、2026年4〜5月の環境で実際に発生したエラーログです。<code>messages.X.content.Y</code> の数字は環境ごとに異なります。</p>
</div>



<h3 class="wp-block-heading"><span id="toc4">なぜ詰むのか</span></h3>



<p class="wp-block-paragraph">このエラーが厄介な点は、<strong>一度発生するとそのセッション内では何を打っても解消しない</strong>こと。画像、テキスト、混在メッセージ、どれを送っても毎回同じ400が返ります。Claude Codeは過去ターンの履歴を毎回サーバーに再送する仕組みなため、壊れた履歴が残っている限り後続のリクエストが弾かれ続ける構造になっているのです。</p>



<h3 class="wp-block-heading"><span id="toc5">試した手段（いずれも無効）</span></h3>



<p class="wp-block-paragraph">以下を試しましたが、どれも効きませんでした。</p>



<ul class="wp-block-list">
<li>翌日再開：履歴が残っているため同じエラー</li>



<li><code>exit</code> → <code>claude -c</code> で前回セッションを再開：履歴ごと再ロードするのでエラーも復活</li>



<li><code>claude</code> で新規セッション起動：新しいセッションは動くが、壊れたセッションは復帰不可</li>
</ul>



<p class="wp-block-paragraph">別セッションで「逃げる」ことはできても、本来作業していたセッションを救う手段はありません。</p>



<h2 class="wp-block-heading"><span id="toc6">エラーの正体&#8211;cache_control × 空テキストブロックの組み合わせ</span></h2>



<p class="wp-block-paragraph"><code>cache_control cannot be set for empty text blocks</code> がClaude Codeのセッションを止める理由は、Anthropic公式ドキュメントとGitHub Issueを見れば明らかです。</p>



<h3 class="wp-block-heading"><span id="toc7">仕様：空テキストブロックはキャッシュできない</span></h3>



<p class="wp-block-paragraph">Anthropic APIのプロンプトキャッシング仕様では、<code>cache_control</code> を付けたコンテンツブロックがキャッシュ対象になります。<a rel="noopener" href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching" target="_blank">Anthropicの公式ドキュメント</a>では、空のテキストブロックはキャッシュできないと明記されています。</p>



<h3 class="wp-block-heading"><span id="toc8">バグ：画像のみのターンで空テキストブロックが生成される</span></h3>



<p class="wp-block-paragraph">Claude Code 2.1系で、画像をペーストして添付テキストなしで送信すると、APIへ送られるメッセージのcontent配列に <code>{"type":"text","text":""}</code> という空テキストブロックが残ります。GitHubの<a rel="noopener" href="https://github.com/anthropics/claude-code/issues/50375" target="_blank">Issue #50375</a>に再現手順と問題のあるJSONL構造が報告されています。</p>



<p class="wp-block-paragraph">厄介なのは、最初のターンは通ってしまうことです。次ターン以降、Claude Codeが履歴を再送する際に空テキストブロックに <code>cache_control</code> が付くか、APIのルール（<code>text content blocks must be non-empty</code>）に引っかかって400エラーで弾かれます。</p>



<div class="wp-block-merpress-mermaidjs diagram-source-image"><pre class="mermaid">graph TD
  A["画像のみ貼り付けて送信"] --> B["空テキストブロックが履歴に紛れ込む"]
  B --> C["1ターン目は通ってしまう"]
  C --> D["次ターン以降履歴再送で400エラー"]
  D --> E["セッション全体が動かなくなる"]
</pre><img decoding="async" src="https://shumatsu-lab.com/wp-content/uploads/2026/05/merpress-1.png" alt=""/></div>



<h3 class="wp-block-heading"><span id="toc9">関連する4つのGitHub Issue</span></h3>



<p class="wp-block-paragraph">同じ症状は複数の経路で報告されています。Issue #50375（画像ペースト経由）、<a rel="noopener" href="https://github.com/anthropics/claude-code/issues/52689" target="_blank">Issue #52689</a>（Web版）、<a rel="noopener" href="https://github.com/anthropics/claude-code/issues/24662" target="_blank">Issue #24662</a>（ストリーミング応答で空ブロック生成）、<a rel="noopener" href="https://github.com/anthropics/claude-code/issues/22923" target="_blank">Issue #22923</a>（バックグラウンドタスク完了時）。2026年5月時点で根本修正は未提供で、ユーザー側の回避策が運用の実態になっています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://shumatsu-lab.com/wp-content/uploads/2026/03/murasaki_icon.png" alt="ムラサキ" class="speech-icon-image"/></figure><div class="speech-name">ムラサキ</div></div><div class="speech-balloon">
<p class="wp-block-paragraph">「APIの仕様」と「Claude Code側のバグ」が重なっている構造を理解しておくと、回避ポイントが見えやすくなります。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc10">PC側で「詰んだ」セッションを復旧する手順</span></h2>



<p class="wp-block-paragraph">筆者が実際に試してたどり着いた、効く順に並べた復旧フローです。</p>



<h3 class="wp-block-heading"><span id="toc11">第一手：/rewind（または Esc 2回）でエラー前まで巻き戻す</span></h3>



<p class="wp-block-paragraph">筆者の環境で最も確実に効いたのがこれです。<code>/rewind</code> コマンドを実行するか、ターミナルで <code>Esc</code> キーを2回押すと、セッション内のチェックポイント一覧が表示され、エラーが発生する前のターンを選んで巻き戻せます。「Conversation only（会話のみ）」を選べばコードは触らずに会話履歴だけ戻せるので、詰みポイントを切り捨てて作業を続行できます。</p>



<div class="wp-block-cocoon-blocks-timeline timeline-box cf block-box not-nested-style cocoon-block-timeline"><div class="timeline-title">/rewindでの復旧手順</div><ul class="timeline">
<li class="wp-block-cocoon-blocks-timeline-item timeline-item cf"><div class="timeline-item-label">STEP1</div><div class="timeline-item-content cf"><div class="timeline-item-title">Escを2回押す</div><div class="timeline-item-snippet">
<p class="wp-block-paragraph">ターミナルでアクティブな状態でEscキーを2回素早く押すと、巻き戻し用のチェックポイント選択画面が立ち上がります。</p>
</div></div></li>



<li class="wp-block-cocoon-blocks-timeline-item timeline-item cf"><div class="timeline-item-label">STEP2</div><div class="timeline-item-content cf"><div class="timeline-item-title">エラー直前のターンを選ぶ</div><div class="timeline-item-snippet">
<p class="wp-block-paragraph">画像を貼り付けたターンの「直前」のチェックポイントを選択します。画像送信ターンを含めて巻き戻すと、空テキストブロックが履歴から消えます。</p>
</div></div></li>



<li class="wp-block-cocoon-blocks-timeline-item timeline-item cf"><div class="timeline-item-label">STEP3</div><div class="timeline-item-content cf"><div class="timeline-item-title">Conversation onlyを選択</div><div class="timeline-item-snippet">
<p class="wp-block-paragraph">コード変更を維持したまま会話だけ戻したい場合は「Rewind conversation only」を選択します。履歴がクリーンな状態に戻り、APIリクエストが通るようになります。</p>
</div></div></li>
</ul></div>



<h3 class="wp-block-heading"><span id="toc12">第二手：JSONLトランスクリプトを直接編集する</span></h3>



<p class="wp-block-paragraph"><code>/rewind</code> が効かないケース（巻き戻し先のターンも壊れている等）では、ローカル保存されているセッションファイルを直接編集します。Claude Codeのセッションは <code>~/.claude/projects/</code> 配下のJSONLファイルに記録されており、Issue #24662では壊れたassistantメッセージを切り詰めて <code>claude --continue</code> で再開する手順が有効な回避策として共有されています。</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-hint block-box has-border-color has-ff-9800-border-color bb-border-color-font-color">
<p class="wp-block-paragraph">JSONL編集はファイル破壊リスクがあるため、必ず元ファイルをコピーしてから作業してください。Windowsの場合 <code>%USERPROFILE%.claudeprojects</code> 配下にあります。非公式ですが、空テキストブロックを自動除去する <a rel="noopener" href="https://github.com/mason0510/fix-jsonl" target="_blank">fix-jsonl</a> といったコミュニティツールも公開されています。</p>
</div>



<h3 class="wp-block-heading"><span id="toc13">第三手：新セッションで再開する</span></h3>



<p class="wp-block-paragraph">現状を保存してとにかく前に進めたいなら、<code>claude</code> で新規セッションを起動して、必要なコンテキストを貼り直すのが最速です。CLAUDE.mdとBUGS.mdを運用していれば、文脈の再現コストはかなり下げられます。CLAUDE.mdの実運用例は<a href="https://shumatsu-lab.com/claude-code-personal-service-development/">Claude Codeで個人サービスを作った正直な話</a>にまとめています。</p>



<h2 class="wp-block-heading"><span id="toc14">外出先（リモコン）から復旧できるか&#8211;調査と現実解</span></h2>



<p class="wp-block-paragraph">Claude Codeのリモートコントロール機能を使えば外出先のスマホからもセッションを操作できます。ただし詰みエラーの復旧という観点では、大きな制限があります。</p>



<h3 class="wp-block-heading"><span id="toc15">結論：/rewind はリモコンから使えない</span></h3>



<p class="wp-block-paragraph">Anthropic<a rel="noopener" href="https://code.claude.com/docs/en/remote-control" target="_blank">公式のリモートコントロール ドキュメント</a>に記載されたリモコン対応スラッシュコマンドは、<code>/compact</code>、<code>/clear</code>、<code>/context</code>、<code>/usage</code>、<code>/exit</code>、<code>/extra-usage</code>、<code>/recap</code>、<code>/reload-plugins</code> の8つだけです。<code>/rewind</code> を含む「インタラクティブピッカーを表示する系」は、ターミナルUIが必要なためリモコン非対応です。</p>



<h3 class="wp-block-heading"><span id="toc16">筆者の検証：iOSとWeb版両方で反応なし</span></h3>



<p class="wp-block-paragraph">iOSのClaudeアプリとWeb版claude.ai/codeの両方で <code>/rewind</code> をテキスト入力に打ち込みましたが、どちらも反応しませんでした。GitHubの<a rel="noopener" href="https://github.com/anthropics/claude-code/issues/29156" target="_blank">Issue #29156</a>でも報告されている通り、リモコン経由のスラッシュコマンドはプレーンテキストとしてモデルに送られるだけで、CLI側で意図したコマンド処理に変換されません。Esc相当のキー送信もリモコンUIには存在しません。</p>



<h3 class="wp-block-heading"><span id="toc17">「外出先で詰んだら何ができるか」の現実解</span></h3>



<p class="wp-block-paragraph">根本的な復旧はPCに戻るまでできません。これが2026年5月時点の答えです。現実的に取れる選択肢は3つです。</p>



<figure class="wp-block-table"><table><thead><tr><th>状況</th><th>取れる手段</th><th>限界</th></tr></thead><tbody><tr><td>別セッションで作業を続けたい</td><td>リモコンから新規セッションを開始</td><td>詰んだセッションは死んだまま</td></tr><tr><td>帰宅まで放置してOK</td><td>そのまま帰宅後に<code>/rewind</code>で復旧</td><td>数時間ロス</td></tr><tr><td>自宅PCにSSH/Tailscaleでアクセス可能</td><td>スマホのSSHクライアントで直接ターミナル操作</td><td>事前のSSH設定が必要</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">3つ目のSSH経由アクセスは、Tailscale等で自宅PCに入って直接ターミナルを叩く方式です。リモコンの「公式インタフェース」を通さずTTYに直接届くので、<code>Esc</code> 2回で巻き戻し画面が出ます。設定の手間はありますが、外出先での作業比重が大きい人には最も確実な解になります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon sbp-r"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://shumatsu-lab.com/wp-content/uploads/2026/03/murasaki_icon.png" alt="ムラサキ" class="speech-icon-image"/></figure><div class="speech-name">ムラサキ</div></div><div class="speech-balloon">
<p class="wp-block-paragraph">外出先で詰む可能性があるなら、画像送信時に1文字でいいから添えて送る。この予防運用が一番効きます。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc18">再発させない予防策</span></h2>



<p class="wp-block-paragraph">復旧より、空テキストブロックを発生させない方が低コストです。</p>



<h3 class="wp-block-heading"><span id="toc19">画像を送るときは必ず1文字でも添える</span></h3>



<p class="wp-block-paragraph">GitHubの複数Issueで報告されている回避策がこれです。画像をペーストするとき、空白でないテキストを1文字でも添えると、空テキストブロックが紛れ込みません。「これ」「確認」「fix」など最低限の単語で十分です。</p>



<h3 class="wp-block-heading"><span id="toc20">バックグラウンドタスクと同時送信を避ける</span></h3>



<p class="wp-block-paragraph">Issue #22923で報告されている別パターンは、バックグラウンドコマンド（<code>/run-in-background</code>など）の完了タイミングでメッセージを送信すると、空ブロックが混入するというものです。長時間処理を投げているときは、完了を待ってから次のメッセージを送ると安全です。</p>



<h3 class="wp-block-heading"><span id="toc21">Claude Codeを最新版に保つ</span></h3>



<p class="wp-block-paragraph"><a rel="noopener" href="https://code.claude.com/docs/en/changelog" target="_blank">公式チェンジログ</a>では2.1系の各リリースで関連するエラーハンドリング改善が積み重ねられています。筆者環境では <code>claude doctor</code> での点検と週1回のバージョンアップ確認をルーチンにしています。Claude Code全体の運用設計は<a href="https://shumatsu-lab.com/claude-prompt-bloat-limit-design-principles/">Claudeプロンプト888行の運用限界</a>で詳しく整理しています。</p>



<h2 class="wp-block-heading"><span id="toc22">よくある質問</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">messages.X.content.Y.text のXとYの数字は何を意味しますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">APIに送られたメッセージ配列のインデックスです。Xはメッセージ番号（会話の何ターン目か）、Yはそのメッセージ内のコンテンツブロック番号。数字は環境やセッションの長さで変わるため、気にする必要はありません。重要なのは「空テキストブロック」が履歴のどこかに存在する事実です。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">エラーが出ているのに、最初の画像送信ターンは通ったのはなぜですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">画像を含むメッセージはAPIへの送信時に受理されることがあります。問題は次ターン以降です。Claude Codeが過去履歴を再送する際に空テキストブロックがcache_controlの条件に引っかかったり、<code>text content blocks must be non-empty</code>ルールに違反して400が返されます。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">/rewindで巻き戻したのにエラーが直りません</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">巻き戻し先のチェックポイントに空テキストブロックを含むターンが残っている可能性があります。さらに1〜2ターン手前まで戻すか、JSONLファイルの直接編集または新セッション起動に切り替えてください。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Claude Code以外（API直接利用やSDK）でも同じエラーは出ますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">出る可能性があります。Anthropic API側の「空テキストブロックはキャッシュできない」「テキストブロックは非空必須」のルール自体は共通です。SDK利用時は、リクエスト送信前に空のtextコンテンツを除去するバリデーションを自前で組み込むのが確実です。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">バージョンアップで直る見込みはありますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">2026年5月時点で根本修正の公式アナウンスはありませんが、Claude Codeの<a rel="noopener" href="https://code.claude.com/docs/en/changelog" target="_blank">公式チェンジログ</a>には関連の修正が継続的に入っています。日次〜週次でバージョンを確認し、<code>claude doctor</code>で環境チェックする運用が現状の対応策です。</p>
</div></dd></dl></div>



<h2 class="wp-block-heading"><span id="toc23">まとめ</span></h2>



<p class="wp-block-paragraph">Claude Codeの <code>cache_control cannot be set for empty text blocks</code> 400エラーは、画像のみ貼り付けたターンに空テキストブロックが履歴に残ることが原因です。セッションが詰まったら、3つの対応がある。</p>



<p class="wp-block-paragraph">まずPC上で <code>/rewind</code> または <code>Esc</code> 2回で巻き戻す。効かなければJSONL直接編集か新セッション起動に移る。リモコン（iOS/Web）からは <code>/rewind</code> が動作しないため、外出先で詰んだらPCに戻るしかない。ただしSSH経由でTTYに直接接続できる環境があれば外出先からも復旧できる。最後に、予防が最も低コスト。画像送信時に1文字でも添えるだけで発生確率が大きく下がる。</p>



<p class="wp-block-paragraph">Claude Codeを仕事で運用する場合の課題と工夫は<a href="https://shumatsu-lab.com/claude-code-personal-service-development/">Claude Codeで個人サービスを作った正直な話</a>に体系的にまとめているので、合わせて読むと参考になる。</p>

]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1333</post-id>	</item>
	</channel>
</rss>
