CLAUDE LABEN
OPUS — Claude Opus 4.7が一般提供になりました。ソフトウェアエンジニアリングと長時間コーディングが改善し、画像を高解像度で扱えるようになりましたAPIKEY — ConsoleでAPIキーに有効期限を設定できるようになりました。7日以上のキーは失効前にメールで通知されますREFLECT — Settings > Reflectの月次ふりかえりで、よく触れた話題や最も活発だった時間を確認できます(beta)M365 — Microsoft 365コネクタが書き込みに対応し、メール作成・カレンダー・OneDrive/SharePointのファイル操作を任せられますCOWORK — CoworkがWebとモバイルへ広がり、ChatとCoworkが一つのホームにまとまりましたDESIGN — Anthropic LabsのClaude Designで、設計・プロトタイプ・スライド・1枚資料をClaudeと共同制作できますOPUS — Claude Opus 4.7が一般提供になりました。ソフトウェアエンジニアリングと長時間コーディングが改善し、画像を高解像度で扱えるようになりましたAPIKEY — ConsoleでAPIキーに有効期限を設定できるようになりました。7日以上のキーは失効前にメールで通知されますREFLECT — Settings > Reflectの月次ふりかえりで、よく触れた話題や最も活発だった時間を確認できます(beta)M365 — Microsoft 365コネクタが書き込みに対応し、メール作成・カレンダー・OneDrive/SharePointのファイル操作を任せられますCOWORK — CoworkがWebとモバイルへ広がり、ChatとCoworkが一つのホームにまとまりましたDESIGN — Anthropic LabsのClaude Designで、設計・プロトタイプ・スライド・1枚資料をClaudeと共同制作できます
記事一覧/API & SDK
API & SDK/2026-06-29上級

ツールが返す画像を Claude に「見せる」 — tool_result を画像ブロックにしてトークンを約10分の1にする

ツールが返した画像を tool_result に文字列で詰めると、同じ画像が約10〜20倍のトークンを消費します。image コンテンツブロックとして返す正しい組み立て方と、SDK 実装・コスト見積もり・落とし穴を実コードでまとめました。

Claude API115tool use5vision7tool_resultトークン最適化3

プレミアム記事

ツールを実装していて、いちばん見落としやすい落とし穴があります。「ツールが画像を返しているのに、Claude はその画像を見ていない」という状態です。私自身、壁紙アプリのサムネイルをエージェントに判定させるツールを書いたとき、レスポンスは返るのに判断がやけに曖昧で、よく調べたら Claude は画像ではなく「base64 の長い文字列」を読まされていた、ということがありました。

tool_result は中に何でも詰められてしまうぶん、間違った形でも動いてしまいます。動くのに高く付く、というのがこの問題のいやらしいところです。ここでは、個人開発で実際にぶつかった事例をもとに、ツールが返す画像を Claude に正しく「見せる」ための組み立て方を、コストの実数とともに整理します。

ツールが画像を返すのに Claude が見ていない、という状態

tool_use に応えて結果を返すとき、多くの実装は tool_resultcontent に文字列を入れます。テキストを返すツールならそれで正解です。ところが画像を返したいときに、つい次のように書いてしまいます。

# アンチパターン: 画像の base64 を「文字列」として詰める
tool_result = {
    "type": "tool_result",
    "tool_use_id": tool_use_id,
    "content": f"画像データ: {base64_png}",  # ← これはテキスト扱い
}

この形でも API はエラーを返しません。Claude は base64 文字列を「テキスト」として受け取り、見かけ上は処理が進みます。しかし Claude はピクセルを見ていないので、画像の中身に基づく判断はできません。さらに悪いことに、数万文字の base64 がそのまま入力トークンとして課金されます。

公式 SDK のリポジトリやコミュニティでも、ツール結果の画像が「ネイティブな画像ブロックに変換されず、テキストとして送られて 1 枚あたり 15,000〜25,000 トークンを消費する」という報告が上がっています。同じ画像をユーザーメッセージとして直接添付すれば約 1,600 トークンで済むため、差はおよそ 10〜20 倍です。動いているのに 10 倍払っている、という典型例です。

正しい形は image コンテンツブロックを tool_result に入れること

tool_resultcontent は、文字列だけでなくコンテンツブロックの配列を受け取れます。ここに image ブロックを入れると、Claude はそれを画像として認識し、ビジョンモデルとしてピクセルを読み取ります。

# 正しい形: content を配列にして image ブロックを入れる
tool_result = {
    "type": "tool_result",
    "tool_use_id": tool_use_id,
    "content": [
        {
            "type": "image",
            "source": {
                "type": "base64",
                "media_type": "image/png",
                "data": base64_png,
            },
        },
        {"type": "text", "text": "現在のサムネイル候補です。視認性を評価してください。"},
    ],
}

ポイントは 2 つあります。content を配列にすること、そして画像を {"type": "image", ...} ブロックとして渡すことです。テキストの補足を添えたいときは、同じ配列に text ブロックを並べれば一緒に渡せます。Claude 側は、この画像をユーザーが添付した画像と同じ仕組みで処理します。つまりトークン換算も画像レートが適用され、テキストとして数万トークン課金されることがなくなります。

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

この記事の続きを読む

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

この記事で得られること
tool_result に base64 を文字列で入れると画像が「テキスト」扱いになり、1枚あたり約15,000〜25,000トークンを浪費する仕組みと、その回避策
image コンテンツブロックで返したときの実コスト(約1,600トークン前後)と、トークン数を縦横サイズから先読みする見積もり式
壁紙サムネイルや App Store スクリーンショットをエージェントに「見せて」判断させるループの実装と、サイズ上限・メディアタイプ・表示されない問題への対処
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-07-11
本番で観測した引数分布からツールスキーマを締め直す
Claudeのツール呼び出しが渡してくる引数を本番で記録し、その分布からJSON Schemaにenumやpatternを足して締め直す運用手法を、計測コードと実測値つきで整理しました。
API & SDK2026-06-30
ツール出力が大きすぎてコンテキストを溶かす問題 — カーソルで小分けに返すページング設計
一覧系のツールが数百件をそのまま返すと、エージェントのコンテキストは一回の呼び出しで溶けます。カーソルベースのページングでツール出力を小分けに返し、トークン予算を守る設計を実装コード付きで解説します。
API & SDK2026-06-16
Claudeの構造化出力を本番で信頼する — 検証ゲートと修復ループの設計
Claude APIの構造化出力が「たまに」壊れる本番環境で、tool useによる強制・スキーマ検証ゲート・一度だけの修復ループ・劣化フォールバックを組み合わせ、壊れたJSONを運用から消すための設計をコード付きで解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →