CLAUDE LABEN
SONNET — Claude Sonnet 5がClaude Codeの既定モデルになりました。ネイティブ100万トークンのコンテキストに対応し、8月31日まで導入価格が適用されますCHROME — Claude in Chromeが一般提供となり、ブラウザ上の作業をそのままClaudeに委ねられるようになりましたCOWORK — Cowork(コワーク)がモバイルとWebに広がり、セッションとファイルが端末をまたいで引き継がれます。まずMaxユーザー向けにbeta提供ですDATAVIZ — チャートやダッシュボードの設計を助ける/datavizスキルがClaude Codeに追加されましたAGENTS — バックグラウンド通知・下書きPRの引き継ぎ・フェイルオーバー改善など、エージェントの運用まわりが強化されていますENTERPRISE — Enterprise管理者向けに詳細な管理分析・モデル単位のエンタイトルメント・支出アラートが加わりましたSONNET — Claude Sonnet 5がClaude Codeの既定モデルになりました。ネイティブ100万トークンのコンテキストに対応し、8月31日まで導入価格が適用されますCHROME — Claude in Chromeが一般提供となり、ブラウザ上の作業をそのままClaudeに委ねられるようになりましたCOWORK — Cowork(コワーク)がモバイルとWebに広がり、セッションとファイルが端末をまたいで引き継がれます。まずMaxユーザー向けにbeta提供ですDATAVIZ — チャートやダッシュボードの設計を助ける/datavizスキルがClaude Codeに追加されましたAGENTS — バックグラウンド通知・下書きPRの引き継ぎ・フェイルオーバー改善など、エージェントの運用まわりが強化されていますENTERPRISE — Enterprise管理者向けに詳細な管理分析・モデル単位のエンタイトルメント・支出アラートが加わりました
記事一覧/API & SDK
API & SDK/2026-07-11上級

本番で観測した引数分布からツールスキーマを締め直す

Claudeのツール呼び出しが渡してくる引数を本番で記録し、その分布からJSON Schemaにenumやpatternを足して締め直す運用手法を、計測コードと実測値つきで整理しました。

Claude API112tool use5JSON Schema2運用設計13可観測性5

プレミアム記事

ある朝、通知系の小さなツールが「成功」を返しているのに、実際には何も送られていない事象に出会いました。

原因は引数でした。私のコードは status"done" が来る前提で分岐していたのに、Claude はその日だけ "完了" という日本語の値を渡していたのです。スキーマ上は status: string としか書いておらず、モデルから見れば "完了" は完全に妥当な文字列。バリデーションも素通り。ログには tool executed とだけ残り、静かに分岐が外れていました。

個人開発で複数のアプリをまわしながら、通知やAdMobの集計といった小さな処理をClaudeのツール呼び出しに委ねていると、この種の「型は正しいが意味が違う」ズレが、忘れた頃に効いてきます。実行時バリデーションで弾くのは対症療法にすぎません。渡ってくる引数そのものを本番で観測し、スキーマを後から締め直す。この記事は、私自身がその運用にたどり着くまでの記録です。

緩いスキーマは「意味のドリフト」を生む

stringnumber としか書かれていない引数は、モデルにとって解釈の自由度が高すぎます。

Claude は文脈に応じて "done" と書く日も "完了" と書く日もあり、priority"high" を入れる日も 3 を入れる日もあります。どれも JSON としては妥当。だからこそ、受け手のコードが暗黙に期待している「閉じた集合」との差分が、型検査をすり抜けて本番に届きます。

実行時バリデーションだけで守ろうとすると、常に後手に回ります。弾いた後にリトライさせ、また別の表記で返ってくる。バリデーション例外のログは増えるのに、根本の「モデルに許した表現の広さ」は縮まりません。

締めるべきは入口です。スキーマに enum を書けば、モデルはその集合の中からしか選べなくなります。制約はプロンプトの指示より強く効きます。

まず、引数を丸ごと記録する

締め直すには、まず実際に何が渡ってきているかを知る必要があります。ツール呼び出しの入力ブロックを、そのまま台帳に落とす薄いラッパを挟みます。

import Anthropic from "@anthropic-ai/sdk";
import { appendFile } from "node:fs/promises";
 
const client = new Anthropic();
 
type ToolCallRecord = {
  ts: string;
  model: string;
  tool: string;
  input: Record<string, unknown>;
};
 
async function logToolCalls(model: string, message: Anthropic.Message) {
  const rows: ToolCallRecord[] = [];
  for (const block of message.content) {
    if (block.type === "tool_use") {
      rows.push({
        ts: new Date().toISOString(),
        model,
        tool: block.name,
        input: block.input as Record<string, unknown>,
      });
    }
  }
  if (rows.length === 0) return;
  // 1行1レコードのJSONL。集計しやすく、追記で壊れにくい
  const jsonl = rows.map((r) => JSON.stringify(r)).join("\n") + "\n";
  await appendFile("tool_calls.jsonl", jsonl);
}
 
const res = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  tools: myTools,
  messages,
});
await logToolCalls("claude-sonnet-5", res);

ポイントは、値を加工せず生のまま残すことです。正規化してから記録すると、まさに観測したい「表記の揺れ」が消えてしまいます。個人情報を含む引数だけは、記録前にフィールド単位でマスクしておきます。

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

この記事の続きを読む

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

この記事で得られること
tool_use入力ブロックを丸ごと記録する薄いラッパの実装(モデル名・タイムスタンプ付き)
引数の値分布からenum・pattern・数値範囲を自動抽出する解析コード
警告のみ→ソフト制約→ハード制約と段階的に締めるロールアウト手順と、締めすぎで空ツール呼び出しを招く境界の見極め方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-06-16
Claudeの構造化出力を本番で信頼する — 検証ゲートと修復ループの設計
Claude APIの構造化出力が「たまに」壊れる本番環境で、tool useによる強制・スキーマ検証ゲート・一度だけの修復ループ・劣化フォールバックを組み合わせ、壊れたJSONを運用から消すための設計をコード付きで解説します。
API & SDK2026-07-10
夜間バッチが勝手に上位モデルで走っていた — タスクごとにモデル上限を宣言して機械で守る
モデル名をコードに散らすと、いつのまにか安いはずのバッチが上位モデルで走ります。タスクごとの上限を宣言するマニフェストと、既定拒否の解決レイヤ、そして逸脱を検出する差分監査の設計をコード付きでまとめました。
API & SDK2026-07-04
Claude apps gateway の発表を読んで、個人開発の管制面を作り直した話
セルフホスト型 Claude apps gateway の設計を管制面と実行面の分離として読み解き、個人開発の規模に縮約します。アプリ別コスト帰属・モデル許可リスト・fail-closed の支出上限を Cloudflare Workers で実装した記録です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →