◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-06-03上級

Claude API のモデル抽象レイヤー設計 — 世代交代に業務ロジックを巻き込まない内部アーキテクチャ

モデル文字列を業務コードに直書きすると、世代交代のたびに本番が静かに壊れます。論理ロールと物理モデルIDを切り離す anti-corruption layer を、TypeScript と Python の動くコード・移行コスト・実運用の判断軸とあわせて設計します。

claude-api83architecture7anti-corruption-layermodel-migration5production87design

✦ プレミアム記事

2026 年の春、Haiku 3 系の旧モデル文字列が廃止予定に入ったというメールを受け取ったとき、私がまず開いたのは API の管理画面ではなく、自分のアプリ群のソースコードを横断検索する grep でした。claude-3-haiku という文字列が、壁紙アプリのレビュー要約、引き寄せ系アプリの日次プッシュ文面、個人ブログの自動下書き生成と、合計 12 箇所にそのまま埋まっていたのです。どれも数年前に「とりあえず動かす」つもりで書いたコードが、そのまま本番に残り続けていました。

私は 2014 年から Dolice という屋号で個人開発を続けて 12 年、累計 5,000万ダウンロードを超えるアプリ事業を運営してきました。AdMob 経由の収益が立つ規模になると、機能が静かに壊れることが一番こわい。エラーで落ちてくれれば気づけますが、モデル廃止は「ある日から徐々に応答が変わる/ある締切日を境に 400 が返り始める」という顔をしてやってきます。このとき痛感したのは、モデル名という「外部ベンダーの都合で変わる識別子」を、自分の業務ロジックの内側に持ち込んでいたことそのものが設計の負債だった、という事実でした。

本稿でまとめるのは、この負債を返済するための anti-corruption layer(腐敗防止層)の設計です。ドメイン駆動設計の文脈で語られるこのパターンを Claude API に当てはめ、論理ロールと物理モデル ID を切り離す具体的な実装を、TypeScript と Python の動くコードで示します。

直書きが生む「静かな腐敗」の正体

モデル名を業務コードに直書きすることの本当の問題は、grep で 12 箇所ヒットすること自体ではありません。それなら一括置換で済みます。本質的な問題は、各呼び出し箇所が「そのモデルの暗黙の前提」も一緒に抱え込んでいる点にあります。

たとえばレビュー要約のコードは「Haiku は速いが長文の指示追従が弱いので、プロンプトを短く保つ」という前提で書かれていました。一方ブログ下書きのコードは「多少遅くても品質を優先したいので max_tokens を大きめに取る」という前提でした。同じ claude-3-haiku という文字列でも、その背後にある期待値は呼び出し箇所ごとにバラバラだったのです。

この状態で単純置換をすると、速度前提のコードに高品質モデルを差し込んでレイテンシ予算を超過させたり、逆に品質前提のコードに軽量モデルを差し込んで出力が劣化したりします。つまり「モデル文字列」は単なる識別子ではなく、速度・品質・コスト・コンテキスト長という複数の非機能要件を圧縮した記号だったわけです。腐敗防止層が隔離すべきは、この圧縮された前提のほうです。

論理ロールという「翻訳語彙」を設計する

腐敗防止層の中心になるのは、業務側の語彙と API 側の語彙を翻訳する辞書です。私は業務側の語彙を「論理ロール」と呼んでいます。アプリのコードは物理モデル名を一切知らず、自分が欲しい性質だけをロールとして要求します。

私のアプリ群では、次の 3 つのロールに集約すると過不足がありませんでした。

  1. fast — ユーザーの操作に同期して走る軽量タスク。レイテンシ最優先。レビュー要約のプレビュー、入力補助など。
  2. balanced — 非同期で走るがその日のうちに品質を見られるタスク。プッシュ文面の生成、タグ付けなど。
  3. deep — 人間が後で必ず目を通す前提の高品質タスク。ブログ下書き、長文の構成案など。

重要なのは、このロール名が「速い/賢い」のような性能の優劣ではなく、ユースケースの性質で切られている点です。「fast はいつか deep に格上げしたくなる」ことは起きません。fast はあくまで「同期処理で待たせたくない場面」を意味し続けます。物理モデルがどれだけ賢くなっても、この境界は安定します。長期運用で抽象が壊れないのは、抽象の軸を性能ではなく要件に置いたからでした。

✦

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

この記事の続きを読む

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

この記事で得られること
✦論理ロール(fast / balanced / deep)と物理モデルIDを切り離す ModelRegistry を TypeScript と Python の両方で実装し、モデル廃止時の変更を 1 ファイル 3 行に閉じ込める設計
✦Haiku 3 廃止と Sonnet 4.5 の 1M context 移行で、累計 5,000万DL のアプリ群を 12 箇所の直書きから救出した実体験と、移行コストを 80% 削減した抽象化の判断軸
✦世代交代を検知する契約テスト(capability contract test)と、フォールバックを跨いだトークン単価の自動再計算ロジック一式
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ API & SDK2026-05-26
Claude API の構造化レスポンスを本番で安定させる — tool_use と JSON Schema、多層検証の実装メモ
Claude API の応答を JSON で受け取る実装は数行で書けますが、本番運用では「形は正しいが意味が壊れている」レスポンスにどう備えるかが分かれ目になります。tool_use・JSON Schema・ドメイン検証を組み合わせた多層パイプラインを、壁紙アプリの分類処理での実体験を交えて整理しました。
⬡ API & SDK2026-05-22
Claude API の tool_result could not be submitted が再発しないための回復ハンドラ設計
Claude API でエージェントを長時間動かしていると、ある日突然 'tool_result could not be submitted' が連発し始めることがあります。再試行しても直らない、ストリーミング途中で死ぬ、そして次のセッションでもまた出る — 常時稼働のエージェント基盤で実際に踏み抜いた4種類の原因と、TypeScript で書いた回復ハンドラの実装を整理しました。
⬡ API & SDK2026-05-19
Claude API のチャット履歴を階層サマライズする:3 段階圧縮でトークンを 70 % 削減した設計
壁紙アプリのインアプリ AI チャットで増え続ける履歴トークンを抑えるため、直近ターン・中期エピソード・長期エンティティの 3 層に分けて圧縮する設計を、TypeScript の動くコードと 7 週間の運用データつきで記録しました。月額 API 費用を $480 から $145 まで下げています。