
Claude Sonnet/Opus 4.6 移行で本番を落とさないためのチェックリスト
Claude Sonnet 4.6 / Opus 4.6 がリリースされました。モデルを差し替えれば性能が上がる——そう思っていると、本番で思わぬ障害に遭うかもしれません。
今回の更新、気をつけておきたいのは「APIの動作前提が変わった」ことです。
- assistant prefill が 400 エラーで即死 — JSON出力の強制に使っていた定番パターンが動かない
- effort 未指定で思考コストが跳ねる — Sonnet 4.6 のデフォルトは high、レイテンシとコストが増加
- 20万トークン境界で割増課金 — 境 界をわずかに超えるとリクエスト全体がプレミアム料金
どれも「deprecated はまだ動くが、ある日消える」類の問題です。放置すると、互換性破壊・コスト逸脱・品質ドリフトが本番で重なって出てくるかもしれません。
この記事では、壊れる前にやっておくべき差分を4領域に分けて整理します:
- effort — thinking の制御方法を切り替える
- 構造化出力 — prefill 廃止の受け皿を用意する
- 100万トークンコンテキスト / コンパクション β — 長文脈の扱いを決める
- ストリーミング・リトライ — 運用設計を固める
移行前に押さえておきたいこと
モデルを差し替えるだけでは済まない理由
チェックリストに入る前に、まず「モデル更新で何が変わるのか?」を整理します。
Claude Sonnet 4.6 / Claude Opus 4.6 への更新は、性能向上だけの話ではありません。API形状・課金境界・運用条件といった「呼び出し側の前提」も変わります。たとえば、これまで使えていた assistant メッセージの prefill(末尾 assistant ターンの先頭固定)は 4.6 世代ではサポートされておらず、リクエストが 400 エラーになります。
つまり、モデ ルを差し替えるだけでは済まず、API呼び出し側のコード・パラメータ・エラーハンドリングまで影響範囲が広がります。この記事では、そうした変更点を整理するところから始めていきます。
追随が遅れると壊れる4パターン
移行対応が遅れると、具体的にどのような問題が起きるのでしょうか。4つのパターンに分けて整理します。
互換性破壊(400エラー):deprecated になったパラメータや廃止された機能をそのまま送ると、APIがリクエストを拒否します。prefill 廃止はその典型例です。
タイムアウト:Claude Opus 4.6 は最大出力 12.8万 トークン、Sonnet 4.6 は最大 6.4万 トークンをサポートしています。出力が大きくなる分、ストリーミングなしの同期呼び出しではタイムアウトが起きやすくなります。
コスト逸脱:100万 コンテキスト β や thinking トークンの課金構造を把握しないまま移行すると、想定外のコスト増につながることがあります。
品質ドリフト:モデルの挙動変化により、既存のプロンプトやスキーマで期待どおりの出力が得られなくなることがあります。テストなしで切り替えると、本番で初めて気づく事態になりがちです。
この4パターンを意識しておくと、破壊的変更を整理するとき何を優先するかが見えてきます。
まず差分を整理:破壊的変更とDeprecated
切替当日に 400 が急増するのは、きっと prefill か旧パラメータの残骸でしょう。チェックリストについて見る前に、Claude 4.6世代で「今すぐ壊れる変更」と「猶予付きで将来壊れる非推奨」を整理しておきます。
prefill廃止:400エラーの原因と置換パターン
Claude 4.6世代で最も影響範囲が広い破壊的変更は、assistantメッセージのprefillが使えなくなった点です(末尾のassistantターン冒頭を固定する手法)。prefillはJSON出力の開始トークンを {"result": のように強制する用途で広く使われてきましたが、4.6世代ではAPIレベルで非サポートとなり、prefillを含むリクエストを送ると400エラーが返ります。
従来のprefillが担っていた「出力形式の固定」は、主に3つのパターンで代替できます:
- 構造化出力(output_config.format)への移行 — JSONスキーマを指定すれば、prefillなしでも出力形式がスキーマに従う
- システムプロンプトでの出力指示 — 「応答は必ずJSON形式で返す」のような指示をシステムメッセージに含める。厳密なスキーマ制約が不要なケース向け
- 構造化出力のスキーマ定義と output_config.format の組み合わせ — prefillが担っていた出力制御をほぼカバーできる
もう1点気をつけたいのが、prefillで「思考の方向づけ」をしていたケースです。
たとえば {"analysis": で分析モードに誘導していた場合、システムプロンプトやユーザープロンプトでの明示的な指示に書き換える必要があります。出力形式の固定とは性質が異なるため、置換パターンを分けて検討しておくのが安全です。
ツール引数のJSONエスケープと末尾改行の差分
ツール呼び出しの引数パースが壊れる原因も押さえておきましょう。Claude 4.6ではツール呼び出し引数のJSONエスケープ(Unicodeエスケープやスラッシュのエスケープ有無)が従来モデルとわずかに異なることがあります。
文字列比較や正規表現で引数を自前パースしているコードは破綻しうるため、標準JSONパーサ(json.loads / JSON.parse 等)での解析に統一しておくのが安全です。
なぜ揺れるのか: モデルが生成するJSONの表現(/ を \/ にエスケープするか、末尾に改行が入るか、など)はモデルバージョンごとに変わりえます。仕様として固定されていない挙動に依存すると、モデル更新のたびに壊れるリスクがあります。
SDKを使っている場合: SDK内部でJSONパースが行われるため、この差分の影響を受けにくいことが多いです。ただし、SDKのレスポンスを文字列として加工してから再パースしている実装では、同じ問題が起きることがあります。
非推奨パラメータの一覧と削除タイムライン
「deprecatedはまだ動くが、ある日消える」——この認識が差分整理の出発点です。以下のパラメータ・ヘッダーは移行期間中は動作しますが、将来のAPIバージョンで削除される予定となっています。
- budget_tokens → thinking.type: "adaptive" + effort に移 行。effort値(low/medium/high/max)で制御
- output_format → output_config.format に移行。旧βヘッダー structured-outputs-2025-11-13 も不要に
- 旧βヘッダー群 → 正規パラメータに統合。effort関連、fine-grained-tool-streaming、interleaved-thinking 等
削除タイムライン: 公式に明示されていない項目もあります。「動いているから大丈夫」ではなく、移行先が確定している項目から計画的に差分を潰していくのが現実的です。放置すると、将来の障害として突然顕在化するリスクがあります。
差分整理の進め方:非推奨パラメータを洗い出して置換する
実務で差分を潰す手順は以下のとおりです。対象は4領域:
- APIクライアントコード
- SDKラッパー
- 設定ファイル
- CI/CDパイプライン
流れとしては、以下の3ステップが基本になります:
- grep(またはripgrep)で使用箇所を洗い出す
- 置換する
- 契約テストで固定する
それぞれのステップを具体的に見ていきます。
ステップ1:洗い出し — コードベース全体で以下のパターンを検索し、ヒットした箇所をリスト化します:
- budget_tokens
- output_format
- prefill 相当のパターン
- 旧βヘッダー文字列
ステップ2:置換 — 前述の置換パターンに沿って書き換えます。
ステップ3:契約テスト — APIレスポンスの形状(ステータスコード、レスポンスボディのキー構 造、stop_reason)を検証するテストを追加しておくと、次回のモデル更新時にも同じ手順で差分検知ができます。
なお、設定ファイルや環境変数に埋まっているパラメータはgrepで拾いにくいことがあります。Terraformやクラウド設定(Bedrock等)経由で指定している場合は、インフラ側の設定も対象に含めておくのが漏れにくい進め方です。
チェックリスト1:thinking/effort — 思考量の制御方法を切り替える
破壊的変更の整理が済んだら、最初のチェックリストとして budget_tokens から effort パラメータへの切り替えで「何が変わり、何を確認するか」を確認していきます。
adaptive thinking と effort:それぞれ何を制御するか
Claude 4.6世代の thinking 設定では「モデルの思考量をどう制御するか」がポイントになります。
従来の thinking: {type:"enabled", budget_tokens:N} はトークン数を直接指定する方式でした。4.6世代ではこの方式が非推奨となり、代わりに adaptive thinking(thinking: {type:"adaptive"})と effort パラメータの組み合わせが推奨されています。
adaptive thinking と effort は別々の役割を持っています。adaptive thinking はクエリの複雑度に応じて思考量を動的に調整する仕組みで、「考えるかどうか・どれだけ考えるか」をモデル側が判断します。effort はその判断の深度ガイドとして機能し、高く設定すれば思考が深くなり、低く設定すればスキップされやすくなります。
budget_tokens は当面受理されるものの、将来削除予定です。「動いているから放置」ではなく、計画的に effort へ移行しておくのが安心です。
effort値の選び方:low/medium/high/maxの使い分け
effort の各レベルで「モデルがどう振る舞うか」を把握しておくと、ユースケースごとの起点が決めやすくなります。
起点は用途の応答速度要件で決めると迷いにくくなります。
- low — thinking がスキップされやすく、分類・ルーティング・単純抽出など低レイテンシが求められる処理に向いています
- medium — 標準的なチャットや要約タスクで、思考コストと応答速度のバランスを取りたい場面が対象です
- high — 複雑な推論やコード生成など、精度を優先したいケースの起点になります
- max — Claude Opus 4.6 専用で、最大限の思考リソースを割り当てます。Sonnet 4.6 では指定で きない点に注意が必要です
まず想定ユースケースで medium か high を起点に設定し、レイテンシと出力品質を計測したうえで上下に調整していく流れがスムーズです。effort パラメータは βヘッダー不要で一般提供されているため、既存コードへの追加も最小限で済みます。
移行時の落とし穴:デフォルトeffortとレイテンシ
「モデルを差し替えたらレイテンシが倍になった」——そんなときは effort の設定から確認すると良いでしょう。移行直後にレイテンシやコストが想定外に増える原因として多いのが「effort 未指定」です。
Claude Sonnet 4.6 は effort を明示しない場合のデフォルトが high に設定されています。従来モデルから単純に差し替えると、thinking が深く走る分だけレイテンシとトークン消費が増えることがあります。(移行ガイド参照)
effort のデフォルト high はモデルの能力を引き出す方向に振られた設定ですが、分類や定型抽出のように速度重視のエンドポイントでは過剰になりがちです。
移行時にはすべてのエンドポイントで effort を明示的 に設定しておくのが安全です。「とりあえず動かしてから調整」ではなく、既存の応答時間 SLA と照らし合わせて effort の起点を決めておくと、移行後の手戻りを減らせるかもしれません。
thinkingトークンの課金とレート制限への影響
effort 移行と合わせて確認しておきたいのが「thinking トークンはどこに計上されるか」という点です。
thinking トークンは 出力トークン(output tokens)として課金対象になります。レート制限(OTPM: Output Tokens Per Minute)の計算にも含まれるため、effort を高く設定するほどレート制限に到達しやすくなります。
ここで押さえておきたい点が2つあります:
- thinking トークンの増加がコスト増とレート制限の両方に影響する — effort=high のエンドポイントが複数ある環境では、OTPM の消費ペース監視を推奨
- マルチターン会話で過去ターンの thinking ブロックが自動的に除外される — 過去ターンの thinking は再送されないため、会話が長くなっても thinking 分の入力トークンは累積しない
この仕組みを踏まえると、移行後の課金シミュレーションでは以下を計測しておくのが有効です。コスト見積もりの精度が上がります。
1リクエストあたりの thinking トークン量 × リクエスト数