CLAUDE LABEN
VERSION — 8月10日に v2.1.227 が出ていました。新機能はなく、プラン判定と CI まわりの不具合修正が中心ですAUTO — 8月14日の既定化まで残り2日です。Pro・Max・Team で Claude Code の auto モードが既定で有効になりますCI — claude-code-action で allowed_non_write_users を指定すると GitHub ホストランナー上の Bash が全て失敗していた問題が直りましたBILLING — 期限切れトークンで開始したセッションが加入プランを取り違え、Max 利用者に使用クレジットの有効化を促していた不具合も解消していますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は8月17日で、残り5日ですPRICE — Sonnet 5 のプロモ価格 $2/$10 per Mtok は8月31日までで、9月1日から $3/$15 per Mtok になりますVERSION — 8月10日に v2.1.227 が出ていました。新機能はなく、プラン判定と CI まわりの不具合修正が中心ですAUTO — 8月14日の既定化まで残り2日です。Pro・Max・Team で Claude Code の auto モードが既定で有効になりますCI — claude-code-action で allowed_non_write_users を指定すると GitHub ホストランナー上の Bash が全て失敗していた問題が直りましたBILLING — 期限切れトークンで開始したセッションが加入プランを取り違え、Max 利用者に使用クレジットの有効化を促していた不具合も解消していますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は8月17日で、残り5日ですPRICE — Sonnet 5 のプロモ価格 $2/$10 per Mtok は8月31日までで、9月1日から $3/$15 per Mtok になります
記事一覧/API & SDK
API & SDK/2026-06-13上級

6/15 の claude-sonnet-4・claude-opus-4 引退に備えて、本番のモデルIDを棚卸しする

6月15日に claude-sonnet-4 と claude-opus-4 が API から引退します。直書きされたモデルIDを引退前に洗い出し、出力パリティを検証し、別名レイヤーとフォールバックで安全に切り替えるまでの実装手順をまとめました。

api-sdk13migration7model-deprecationproduction87

プレミアム記事

「6月15日に claude-sonnet-4 と claude-opus-4 が API から引退します」という一文を見たとき、最初に確認すべきは自分のコードのどこにそのモデルIDが直書きされているか、です。困るのは目につく場所ではありません。半年前に書いて以来触っていない夜間バッチや、環境変数のデフォルト値、いつか組み込んだベンダー製ラッパーの奥に残った model: "claude-opus-4" です。引退当日、そこだけが静かに model_not_found を返し始めます。

個人開発の運用では、こうした「忘れた固定値」を私自身も何度か踏んできました。動いているコードほど読み返さないので、引退のアナウンスが来てから慌てて全文検索しても、検索語が一致せず取りこぼします。今回はその取りこぼしを機械的になくし、切り替え後の挙動差まで含めて安全に移行するところまでを順に書いていきます。

grep だけでは漏れる — まず機械的に棚卸しする

grep -r "claude-opus-4" で済むなら苦労はありません。漏れるのは、os.environ.get("MODEL", "claude-opus-4") のようにデフォルト値として埋め込まれたケースや、config.json に文字列で置かれたケース、そして日付サフィックス付き(claude-opus-4-20250514 のような形)で書かれたケースです。

そこで「現役のIDを許可リストに持ち、それ以外の claude-* を全部あぶり出す」方針にします。引退する2つを名指しで拾いつつ、見覚えのないIDも「要確認」として報告させるのが肝心です。

#!/usr/bin/env python3
"""本番コードに残る引退予定・不明なモデルIDを洗い出すスキャナ。"""
import re
import sys
from pathlib import Path
 
# 2026-06 時点で現役のモデルID(ここに無い claude-* は要確認とみなす)
# 最新の正確なIDは必ず公式ドキュメントで確認してください
ALLOWED = {
    "claude-opus-4-8",
    "claude-sonnet-4-6",
    "claude-haiku-4-5",
}
# 6/15 に API から引退する明示ターゲット
RETIRING = {"claude-sonnet-4", "claude-opus-4"}
 
# モデルIDらしき文字列。-20250514 のような日付サフィックスも拾う
MODEL_RE = re.compile(r"claude-[a-z]+-[0-9][a-z0-9-]*")
SCAN_EXT = {".py", ".ts", ".tsx", ".js", ".mjs", ".json",
            ".yaml", ".yml", ".env", ".toml", ".sh"}
 
 
def normalize(model_id: str) -> str:
    # 末尾の日付サフィックスを落として「世代」だけで比較する
    return re.sub(r"-\d{8}$", "", model_id)
 
 
def scan(root: str):
    hits = []
    for path in Path(root).rglob("*"):
        if path.is_dir() or path.suffix not in SCAN_EXT:
            continue
        if "node_modules" in path.parts or ".git" in path.parts:
            continue
        try:
            text = path.read_text(encoding="utf-8", errors="ignore")
        except OSError:
            continue
        for lineno, line in enumerate(text.splitlines(), 1):
            for raw in MODEL_RE.findall(line):
                base = normalize(raw)
                if base in RETIRING:
                    hits.append((str(path), lineno, raw, "RETIRING 6/15"))
                elif base not in ALLOWED:
                    hits.append((str(path), lineno, raw, "unknown - confirm"))
    return hits
 
 
if __name__ == "__main__":
    root = sys.argv[1] if len(sys.argv) > 1 else "."
    found = scan(root)
    for path, lineno, model, tag in found:
        print(f"[{tag}] {path}:{lineno}  {model}")
    print(f"\n{len(found)} 件の要対応モデルIDが見つかりました", file=sys.stderr)
    sys.exit(1 if found else 0)

これをリポジトリのルートで python3 scan_models.py . と走らせ、[RETIRING 6/15] のタグが付いた行が、当日エラーになる箇所です。許可リスト方式にしておくと、将来別のモデルが引退するときも、許可リストを更新するだけで同じスキャナが使い回せます。

ひとつ補足すると、コードを全部直しても安心はできません。すでに送信中のリクエストログやダッシュボードのクエリにIDが残っていることがあります。直近30日のリクエストログを集計して、実際に呼ばれているモデルIDの分布を出しておくと、コードからは消したつもりでも経路が残っていた、という事故を防げます。

なぜ「sed で一括置換」が危険なのか

検出できたら、claude-opus-4claude-opus-4-8 に一括置換したくなります。ですが、モデルIDの置換は文字列置換ではなく、挙動の変更です。世代が上がると、同じプロンプトでも出力トークン量が変わり、レイテンシが変わり、整形の癖(箇条書きにするか散文にするか、コードブロックの付け方)も微妙に変わります。

ここで効いてくるのが、IDをコード中に散らさないという設計判断です。client.messages.create(model="...") の呼び出しが数十箇所に散っていると、置換のたびに数十箇所をレビューすることになり、しかも一箇所だけ直し忘れます。私はこの「直し忘れ一箇所」で痛い目を見てから、モデルIDを一枚のレイヤーに閉じ込めるようにしました。具体的な実装は後半で示します。

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

この記事の続きを読む

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

この記事で得られること
本番コード・cron・設定ファイル・ベンダーSDKに残る claude-sonnet-4 / claude-opus-4 を一括検出する Python スキャナの実装
単純な置換が壊す出力パリティ(出力トークン量・整形・下流パーサ)を引退前に測る検証ハーネス
次回の引退を1行で乗り切る別名レイヤーと、model_not_found を握りつぶさないフォールバックの組み方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-05-03
Claude API で契約書レビュー自動化システムを構築する — リスク条項検出・差分追跡・修正提案を本番運用する実装ガイド
契約書レビューをClaude APIで自動化する際の壁は精度より信頼性にあります。pdfplumberとClaude Visionの使い分け、条項分割とJSON Schemaによる構造化出力、リスク条項検出のプロンプト設計、条項IDをキーにした差分追跡、引用付き修正提案まで本番運用の設計を通しで解説します。
API & SDK2026-04-26
Claude API のReplay駆動テスト — 本番応答を録画して回帰テストを成立させる設計パターン
非決定的なClaude APIの応答を録画・再生し、回帰テストを安定させるReplay駆動テストの設計です。Messages API・Streaming・Tool Use多段それぞれのカセット実装、メッセージハッシュをキーにする理由、CIへの録画ガード組み込み、本番障害の再現への応用まで扱います。
API & SDK2026-04-16
Claude API × Go言語 本番実装 — Anthropic Go SDK・並行処理・Tool Use・マイクロサービス統合
Anthropic Go SDKを使ったClaude API本番実装の完全解説。ストリーミング・goroutineによる並行処理・Tool Use・Gin/Echoフレームワーク統合・グレースフルシャットダウンまで、Goらしい設計パターンを実装コード付きで徹底解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →