<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Token Optimization on KnightLiブログ</title>
        <link>https://www.knightli.com/ja/tags/token-optimization/</link>
        <description>Recent content in Token Optimization on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Mon, 18 May 2026 18:30:24 +0800</lastBuildDate><atom:link href="https://www.knightli.com/ja/tags/token-optimization/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Claude CodeでTokenを節約する：モデル、MCP、CLAUDE.md、Skillsがキャッシュに与える影響</title>
        <link>https://www.knightli.com/ja/2026/05/18/claude-code-prompt-cache-token-optimization/</link>
        <pubDate>Mon, 18 May 2026 18:30:24 +0800</pubDate>
        
        <guid>https://www.knightli.com/ja/2026/05/18/claude-code-prompt-cache-token-optimization/</guid>
        <description>&lt;p&gt;Claude Codeの長いタスクでは、Prompt Cacheの命中率がコストと速度に直接影響する。キャッシュでTokenを節約できることは知られているが、どの操作で突然キャッシュが外れるのかは見落とされがちだ。&lt;/p&gt;
&lt;p&gt;毎回のリクエストは、左から右へ流れるコンテキストの鎖として考えるとわかりやすい。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tools -&amp;gt; system -&amp;gt; CLAUDE.md / skills -&amp;gt; messages
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;左にある内容ほど安定させるべきで、キャッシュ効果も大きい。左側が変わると、その後ろのキャッシュも再計算されやすい。逆に右側の変化は影響範囲が小さい。&lt;/p&gt;
&lt;p&gt;つまりClaude CodeのPrompt Cache最適化は、勘ではない。タスク開始前にモデル、MCP、Skills、&lt;code&gt;CLAUDE.md&lt;/code&gt;などの基本コンテキストを準備し、開始後はできるだけ変えないことが重要だ。&lt;/p&gt;
&lt;h2 id=&#34;prompt-cacheは文字列そのものをキャッシュしない&#34;&gt;Prompt Cacheは文字列そのものをキャッシュしない
&lt;/h2&gt;&lt;p&gt;Prompt Cacheは、プロンプト文字列をそのまま保存するだけの仕組みではない。Transformerモデルでは、前方のコンテキストを注意層で計算したKey/Value状態、つまりKV cacheが重要になる。&lt;/p&gt;
&lt;p&gt;これは2つのことを意味する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前方のコンテキストが安定していれば、後続リクエストで一部の計算結果を再利用できる。&lt;/li&gt;
&lt;li&gt;モデル、ツール定義、システムプロンプト、前方メッセージが変わると、以前のキャッシュを再利用できないことがある。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anthropic公式ドキュメントも、失効階層を &lt;code&gt;tools -&amp;gt; system -&amp;gt; messages&lt;/code&gt; と整理している。ツール定義の変更は全体のキャッシュに影響し、system層の変更はsystemとmessagesに影響し、messages層の変更は主にメッセージキャッシュに影響する。&lt;/p&gt;
&lt;p&gt;Claude Codeではさらに &lt;code&gt;CLAUDE.md&lt;/code&gt;、Skills、MCP、プラグイン、subagentなどが関わるため、実際の利用ではキャッシュ失効点を踏みやすい。&lt;/p&gt;
&lt;h2 id=&#34;キャッシュを壊す要因1途中でモデルを切り替える&#34;&gt;キャッシュを壊す要因1：途中でモデルを切り替える
&lt;/h2&gt;&lt;p&gt;モデル切り替えは最も影響が大きい操作の一つだ。&lt;/p&gt;
&lt;p&gt;Prompt Cacheはモデルごとに分離される。Opus、Sonnet、Haikuは構造や重みが異なるため、同じテキストから計算したKV cacheも共有できない。Opusで長いコンテキストを作ったあとSonnetへ切り替えても、SonnetはOpusのキャッシュを再利用できない。&lt;/p&gt;
&lt;p&gt;そのため、節約のつもりで途中から安いモデルへ切り替えると、かえってそれまでのキャッシュが無駄になることがある。本来cache read価格で読めたコンテキストが、再度書き込みと計算の対象になる。&lt;/p&gt;
&lt;p&gt;安定したやり方は次の通り。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;メイン会話ではモデルを固定する。&lt;/li&gt;
&lt;li&gt;安いモデルで処理したい支線タスクはsubagentに分離する。&lt;/li&gt;
&lt;li&gt;支線エージェントに検索、探索、整理を任せ、要約だけをメイン会話へ戻す。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;こうするとメインの長いコンテキストを動かさず、キャッシュ命中率を保ちやすい。&lt;/p&gt;
&lt;h2 id=&#34;キャッシュを壊す要因2途中でmcpを追加するプラグインを再読み込みする&#34;&gt;キャッシュを壊す要因2：途中でMCPを追加する、プラグインを再読み込みする
&lt;/h2&gt;&lt;p&gt;MCPはClaude Codeへツールを提供する。新しいMCPサーバーを追加するとツール一覧が変わる。ツール定義はコンテキスト鎖の最も左側にある。&lt;/p&gt;
&lt;p&gt;Prompt Cacheの視点では、ツール一覧が変わると、その後ろのsystemとmessagesも再計算が必要になりやすい。MCPが多い場合、ツール定義そのものが多くのTokenを占めるため、失効コストは大きくなる。&lt;/p&gt;
&lt;p&gt;ただし重要な細部がある。Claude Codeは通常、セッション起動時にMCP設定を読む。途中で設定を変えても現在のsessionにすぐ影響するとは限らない。本当に注意すべきなのは、再起動、resume、プラグイン再読み込み、ツール一覧の再構築が起きる場面だ。&lt;/p&gt;
&lt;p&gt;おすすめは：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;長いタスクの前に必要なMCPをまとめて用意する。&lt;/li&gt;
&lt;li&gt;作業中に不足に気づいてインストールし、再読み込みする流れを避ける。&lt;/li&gt;
&lt;li&gt;大きなMCPツールセットは必要時だけ使う、またはデフォルト有効数を減らす。&lt;/li&gt;
&lt;li&gt;ほとんど使わないMCPを常時有効にしない。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ツール定義が安定していてこそ、Prompt Cacheは安定して命中する。&lt;/p&gt;
&lt;h2 id=&#34;キャッシュを壊す要因3途中でclaudemdを編集する&#34;&gt;キャッシュを壊す要因3：途中でCLAUDE.mdを編集する
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;はClaude Codeのプロジェクト記憶ファイルだ。ビルドコマンド、テストコマンド、設計上の約束、コードスタイル、プロジェクト固有の注意点を書くのに向いている。&lt;/p&gt;
&lt;p&gt;便利だが、これもコンテキストに入る。Claudeのヘルプでは、&lt;code&gt;CLAUDE.md&lt;/code&gt;はセッション開始時に読まれ、ユーザーメッセージとしてClaudeへ渡されると説明されている。またAnthropicのPrompt Cacheも使われる。最初のリクエストでは通常の入力価格を払い、以後キャッシュが有効なら低いcache readコストで処理される。&lt;/p&gt;
&lt;p&gt;問題は、&lt;code&gt;CLAUDE.md&lt;/code&gt;が内容で識別されることだ。ファイル内容を変えると、旧キャッシュとは一致しない。&lt;/p&gt;
&lt;p&gt;そのため、長いタスクの途中で頻繁に&lt;code&gt;CLAUDE.md&lt;/code&gt;を編集しないほうがよい。より良い使い方は：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;タスク開始前に&lt;code&gt;CLAUDE.md&lt;/code&gt;が十分か確認する。&lt;/li&gt;
&lt;li&gt;安定したルールはファイルへ、臨時指示は現在の会話へ置く。&lt;/li&gt;
&lt;li&gt;一度だけの要望のために長期記憶ファイルを編集しない。&lt;/li&gt;
&lt;li&gt;どうしても変更するなら、次の段階を新しいsessionや新しいフェーズとして扱う。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;は安定したプロジェクト説明であり、毎回変えるメモ帳ではない。&lt;/p&gt;
&lt;h2 id=&#34;キャッシュを壊す要因4途中でskillsをインストールまたは更新する&#34;&gt;キャッシュを壊す要因4：途中でSkillsをインストールまたは更新する
&lt;/h2&gt;&lt;p&gt;Skillsもコンテキストの一部だ。新しいSkillを入れる、Skillを更新する、Skill一覧が変わると、セッションへ注入されるコンテキストも変わる。&lt;/p&gt;
&lt;p&gt;こうした変化は、reload、resume、新しいsessionで反映されることが多い。messagesが再構築されると、古いキャッシュは命中しにくくなる。&lt;/p&gt;
&lt;p&gt;MCPと同じく、次のように扱うとよい。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;タスク開始前に必要なSkillsを決める。&lt;/li&gt;
&lt;li&gt;同じ種類のタスクではSkillセットを固定する。&lt;/li&gt;
&lt;li&gt;長いタスクの途中でSkillsを追加しない。&lt;/li&gt;
&lt;li&gt;新しいSkillを入れたら、新しい段階の始まりとして扱う。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コンテンツ作成、レビュー、デプロイ、翻訳など反復する作業では、よく使うSkillsを固定するとコンテキスト構造が安定する。&lt;/p&gt;
&lt;h2 id=&#34;キャッシュを壊す要因5ttlを超えてアイドルになる&#34;&gt;キャッシュを壊す要因5：TTLを超えてアイドルになる
&lt;/h2&gt;&lt;p&gt;Prompt Cacheは永久に保存されない。一般的なデフォルト有効期間は数分程度で、Claude Code関連の説明でも約5分のキャッシュウィンドウが言及されることがある。TTLを過ぎると、同じリクエストでもサーバー側でキャッシュが消えている可能性がある。&lt;/p&gt;
&lt;p&gt;長いタスクで「さっきまで安かったのに、少し離席したらTokenが増えた」と感じる原因はこれだ。&lt;/p&gt;
&lt;p&gt;Claude Codeの出力を読む、ファイルを確認する、テストを走らせる、次の手を考える。こうした作業だけで5分はすぐ過ぎる。&lt;/p&gt;
&lt;p&gt;環境が対応しているなら、長いタスクの前に1時間のPrompt Cache TTLを有効化できる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ENABLE_PROMPT_CACHING_1H&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows PowerShellでは：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$env:ENABLE_PROMPT_CACHING_1H&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;1時間キャッシュの書き込みコストは、通常5分キャッシュより高くなる。短いタスクには向かないこともあるが、大規模コードベース、長い会話、複雑な多段階開発では、頻繁にキャッシュが切れるより安くなる場合がある。&lt;/p&gt;
&lt;h2 id=&#34;tokenを節約しやすいclaude-code長タスクの組み方&#34;&gt;Tokenを節約しやすいClaude Code長タスクの組み方
&lt;/h2&gt;&lt;p&gt;安定した流れはこうだ。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;タスク開始前にモデルを決め、頻繁に切り替えない。&lt;/li&gt;
&lt;li&gt;必要なMCPを有効にし、不要なMCPは切る。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;は短く、安定した、長期的に有効なルールに絞る。&lt;/li&gt;
&lt;li&gt;今回必要なSkillsを事前に準備する。&lt;/li&gt;
&lt;li&gt;複雑なタスクでは1時間TTLを検討する。&lt;/li&gt;
&lt;li&gt;大きなタスクは段階に分けるが、各段階の内部ではコンテキスト構造を安定させる。&lt;/li&gt;
&lt;li&gt;支線探索はsubagentや別sessionで行い、メイン会話を汚さない。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;目的はすべてのキャッシュミスをなくすことではない。見落としやすく、コストの高い失効を避けることだ。&lt;/p&gt;
&lt;h2 id=&#34;簡単な判断基準&#34;&gt;簡単な判断基準
&lt;/h2&gt;&lt;p&gt;次の一文で判断できる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;この操作はモデル、ツール定義、システムコンテキスト、またはセッション冒頭の固定メッセージを変えるか？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;答えがはいなら、Prompt Cacheに影響する可能性が高い。コンテキスト鎖の左側に近いほど影響は大きい。&lt;/p&gt;
&lt;p&gt;よくある操作はこう整理できる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;モデル切り替え：高リスク。モデルごとにキャッシュが分離される。&lt;/li&gt;
&lt;li&gt;MCP追加またはプラグイン再読み込み：高リスク。ツール一覧が変わる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;編集：中高リスク。プロジェクト記憶が変わる。&lt;/li&gt;
&lt;li&gt;Skillsインストール：中高リスク。注入コンテキストが変わる。&lt;/li&gt;
&lt;li&gt;通常の会話継続：低リスク。主にmessagesを追加するだけ。&lt;/li&gt;
&lt;li&gt;TTL超過のアイドル：高リスク。サーバー側キャッシュが期限切れになる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Claude CodeのPrompt Cache最適化で大事なのは、パラメータを暗記することではなく、sessionの前方コンテキストを安定させることだ。&lt;/p&gt;
&lt;p&gt;モデルを気軽に切り替えない。MCPやSkillsを作業途中で増やさない。&lt;code&gt;CLAUDE.md&lt;/code&gt;を臨時メモとして頻繁に編集しない。複雑なタスクではTTL延長を検討する。これらを守るだけで、長いタスクのTokenコストと応答速度はかなり予測しやすくなる。&lt;/p&gt;
&lt;p&gt;実用的な一言にすると、始める前に整え、始めた後はあまり動かさない。&lt;/p&gt;
&lt;h2 id=&#34;参考資料&#34;&gt;参考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Anthropic：Tool use with prompt caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://support.claude.com/en/articles/14553240-give-claude-context-claude-md-and-better-prompts&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Claude Help Center：CLAUDE.md and prompt caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://code.claude.com/docs/en/mcp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Claude Code Docs：Connect Claude Code to tools via MCP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
