CLAUDE LABEN
MODEL — Claude Opus 4.8が登場。コーディング・エージェント・推論が4.7から向上し、価格は据え置きですCODE — Opus 4.8のFastモードが2.5倍速で動作し、従来モデルより3倍安く使えるようになりましたCODE — auto-modeのコマンド分類が拡張され、拒否履歴の記録やbashパスの自動補完が追加されましたENTERPRISE — カスタムロールでコネクタ権限を細かく設定でき、ロールごとに使えるツールを制御できますTEAM — SlackでClaudeをタグ付けし、作業を進めながらタスクを任せられるようになりましたMCP — MCPサーバー起動時の認証通知が追加され、接続状態を把握しやすくなりましたMODEL — Claude Opus 4.8が登場。コーディング・エージェント・推論が4.7から向上し、価格は据え置きですCODE — Opus 4.8のFastモードが2.5倍速で動作し、従来モデルより3倍安く使えるようになりましたCODE — auto-modeのコマンド分類が拡張され、拒否履歴の記録やbashパスの自動補完が追加されましたENTERPRISE — カスタムロールでコネクタ権限を細かく設定でき、ロールごとに使えるツールを制御できますTEAM — SlackでClaudeをタグ付けし、作業を進めながらタスクを任せられるようになりましたMCP — MCPサーバー起動時の認証通知が追加され、接続状態を把握しやすくなりました
記事一覧/API & SDK
API & SDK/2026-06-29上級

中間ファイルを毎回作り直さない — Code Execution のコンテナを跨いで多段パイプラインの状態を保つ

Code Execution ツールのコンテナを container ID で再利用し、生成済みファイルや前処理結果を次のリクエストへ持ち越す設計を解説します。実行時間課金の落とし穴と container_expired の安全な扱い方まで、実装コード付きで整理しました。

Claude API93Code Executionコンテナ2パイプライン3コスト最適化21

プレミアム記事

最初に Code Execution ツールでデータ集計を任せたとき、私は同じ CSV を毎リクエストでアップロードし直していました。抽出して、整形して、集計して、グラフにする。工程を分けてリクエストを重ねるたびに、前のリクエストで作ったはずの中間ファイルが消えていて、また一からやり直しになる。個人開発で複数サイトの数値を自動でまとめている身としては、この「毎回ゼロから」が地味に実行時間を食っていることに、請求の内訳を見て気づきました。

原因は単純で、リクエストごとに別のコンテナが立ち上がっていたからです。Code Execution のコンテナは container パラメータで明示的に再利用しない限り、リクエストをまたいで状態を共有しません。逆に言えば、前のレスポンスが返してきた container ID を次のリクエストへ渡すだけで、作ったファイルも展開済みのデータも、そのまま引き継げます。今日はこの「コンテナを跨いで状態を保つ」設計と、その裏にある課金の実像、そして避けて通れない失効の扱いを、実装コードと一緒に整理します。

コンテナIDを渡すだけで、作ったファイルが次のリクエストに残る

仕組み自体はとても素直です。レスポンスには container オブジェクトが含まれていて、その id を次のリクエストの container パラメータに指定すると、同じワークスペースが再利用されます。

import anthropic
 
client = anthropic.Anthropic()  # APIキーは環境変数 ANTHROPIC_API_KEY から読み込まれます
 
# 1回目: ファイルを作って /tmp に保存する
response1 = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=[
        {
            "role": "user",
            "content": "乱数を1つ生成して '/tmp/seed.txt' に書き込んでください",
        }
    ],
    tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
 
# レスポンスから container ID を取り出す
container_id = response1.container.id
 
# 2回目: 同じコンテナを再利用して、さっき書いたファイルを読む
response2 = client.messages.create(
    container=container_id,  # ← これだけで状態が引き継がれます
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=[
        {
            "role": "user",
            "content": "'/tmp/seed.txt' の値を読み、その2乗を計算してください",
        }
    ],
    tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
 
print(response2)

ポイントは response1.container.id を保持して、2回目の container= に渡しているところだけです。これを忘れると、2回目は新しいコンテナで立ち上がり、/tmp/seed.txt は「そんなファイルはありません」になります。私が最初にハマったのは、まさにここでした。

何が「持ち越せて」何が「消える」のか

再利用と聞くと「全部そのまま続きから」と思いがちですが、引き継がれるものとそうでないものは分けて理解しておく必要があります。

ワークスペース上のファイルは残ります。/tmp や作業ディレクトリに書き出したものは、同じ container ID を指定する限りそのまま見えます。これが再利用の主役です。一方、会話のコンテキスト(messages 配列)は別物です。コンテナを再利用しても、前のやり取りの内容を Claude が覚えているわけではありません。状態は「ファイルとして残っている」だけなので、2回目のリクエストでは「どのファイルに何が入っているか」を改めて伝える必要があります。

もう一つ注意したいのが、Python の REPL 上の変数(メモリ上の状態)です。これは基本のツールバージョンでは引き継がれません。インメモリの変数まで保持したい場合は、REPL 状態の永続化に対応した新しいツールバージョン(code_execution_20260120 以降、Opus 4.5+ / Sonnet 4.5+ で利用可)が必要になります。ただ実務では、変数を抱え込むより節目ごとに中間結果をファイルへ書き出す方が、失効や再実行に強い設計になります。私はこの工程を、出力を必ずファイルへ落とす形に統一することを推奨します。実体験として、その方が失効や再実行にずっと強いからです。

対象同じコンテナ再利用で引き継がれるか
ワークスペースに書き出したファイル(/tmp 等)引き継がれる
Files API でマウントした入力ファイルコンテナ上に残る(再マウント不要)
Python の REPL 変数(メモリ状態)基本版では引き継がれない(20260120 以降で対応)
会話の文脈(messages の中身)引き継がれない(毎回伝え直す)

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
container.id を渡してコンテナを再利用し、生成済みファイルと前処理結果を次のリクエストへ持ち越す具体的な実装
「ファイル同梱は呼ばれなくても実行時間課金」という見落としやすい課金トラップと、再利用で実行時間を削る考え方
container_expired を握りつぶさず、ソースから安全に作り直す防御パターン(30日失効・90秒セル上限を踏まえた段階設計)
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API & SDK2026-06-22
Claude Files API のファイルが知らぬ間に溜まる — 内容ハッシュ台帳で重複を止め、孤児を回収する
自動パイプラインで Files API を使うと、同じファイルが何度もアップロードされ孤児ファイルが静かに溜まります。内容ハッシュ台帳での重複排除と、参照されなくなったファイルの GC 設計を実装例つきで解説します。
API & SDK2026-06-21
service_tier で優先枠をユーザー応答だけに振り向ける
Priority Tier を契約しているのにピーク時だけユーザー向け応答が遅くなる——その原因を service_tier の auto と standard_only の挙動から切り分け、背景ジョブを優先枠から隔離する構成を、自動運用の実例とともにまとめました。
API & SDK2026-06-20
effort パラメータを工程ごとに振り分けて Claude の出力コストと待ち時間を整える
Claude API の effort パラメータは思考・本文・ツール呼び出しを含む出力トークン全体を制御します。一律 high をやめ、工程ごとに段階配分する実装と動的ルーターを、個人開発の自動運用での実測とともに解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →