2026年9月28日に公開されたClaude Sonnet 5.5は、単価こそSonnet 5と同じ入力2ドル/出力10ドル(100万トークンあたり)ですが、Sonnet 5で動いていたコードが400エラーになる変更を5つ含んでいます。 エラーを出さずにストリーミング画面が黙る変更もあります。
期限もあります。Claude Sonnet 4.5(claude-sonnet-4-5-20250929)は2026年11月30日に提供終了し、公式の推奨後継が claude-sonnet-5-5 です。
本記事は稼働中のNext.jsアプリを移すときの実装面の手順です。料金やOpus 5.5との選び方は経営者向けの解説記事(zetlinker.com)にまとめています。
先に結論です(2026年10月6日時点の公式ドキュメントで確認)。
- Sonnet 5からは、thinkingの無効化・
tool_choice・履歴の編集・computer use・advisorの5点を検索で洗い出す
- 画面が黙るのは、ツール呼び出し間の文章が
thinking ブロックに移ったため
- Sonnet 4.5から移る場合は、prefill・
temperature・budget_tokens も400になり、トークン数は約30%増える
本記事のコードは実装例で、お客様の案件の事例ではありません。自社のRoute HandlerやServer Actionに置き換えて確認してください。
Sonnet 5.5で何が変わったのか
エンドポイントとトークナイザーはSonnet 5と同じです。 変わるのはthinkingとツール指定の前提です。
2026年10月時点の仕様(出典:モデル一覧・移行ガイド)
| 項目 | Sonnet 5 | Sonnet 5.5 |
|---|
| モデルID | claude-sonnet-5 | claude-sonnet-5-5(日付なし) |
| 料金(入力/出力) | $2 / $10 | $2 / $10(同額) |
| 事前の推論をやめる指定 | { type: "disabled" } | { type: "between_tools" } |
tool_choice の any / tool | 使える | 400エラー |
| computer use(Claude API) | computer_20251124 | computer_toolset_20260801 |
| ツール呼び出し間の文章 | text ブロック | 主に thinking ブロック |
コンテキストは100万トークン、最大出力は12.8万トークンです。Bedrockでは anthropic.claude-sonnet-5-5 を指定します。モデルIDは環境変数へ逃がし、検証環境から先に切り替えると、戻すときも環境変数の変更で済みます。
移行前に洗い出す5つの破壊的変更
以下の5点に該当しなければ、Sonnet 5からはモデルIDの差し替えで動きます。
① thinking: { type: "disabled" } が400になる
検索するもの:thinking:
Sonnet 5で推論を切っていた disabled は400 invalid_request_error になります。代わりに between_tools を送ります。
// NG:Sonnet 5.5では400
thinking: { type: "disabled" },
// OK:回答前の推論をしない、いちばん軽い設定
thinking: { type: "between_tools" },
output_config: { effort: "medium" }, // low / medium / high のみ
between_tools は、effortが xhigh・max のとき、display などを同時に送ったとき、会話の途中でeffortを変えたときにも400になります。先頭が thinking ブロックになることもあるため、content[0].text の決め打ちは type で絞り込みます。
検索するもの:tool_choice
{ type: "any" } と { type: "tool", name: "..." } は、トークンカウントAPIを含めて400になります。ツール強制で抽出していた実装は、auto + strict: true + プロンプトでの指示に置き換えます。
await client.messages.create({
model: MODEL,
max_tokens: 4096,
// strict では input_schema のすべての object に additionalProperties: false が必要
tools: [{ ...recordInquiryTool, strict: true }],
tool_choice: { type: "auto" },
messages: [{ role: "user", content: `record_inquiry ツールで記録してください。\n\n${body}` }],
});
auto ではツールを呼ばないこともあるため、呼ぶ条件をプロンプトに書きます。Amazon BedrockではSonnet 5.5の構造化出力(strict を含む)が使えません。 Bedrock経由なら strict を外し、ツール入力をZodなどで検証します。
③ thinkingブロックがモデルと会話に結びつく
検索するもの:履歴を加工している箇所・リトライでモデルを切り替える箇所
Sonnet 5.5はOpus 5・Opus 5.5・Fable・Mythos系のthinkingブロックを読めず、APIが黙って落とします(200で返り、課金なし)。
問題は履歴の編集です。2026年8月31日00:00 UTC以降に作成されたアカウントでは、thinkingブロックより前のsystem・tools・過去メッセージを書き換えて送り直すと400になります。対策は会話を追記のみ(append-only)にし、指示の変更は会話途中のシステムメッセージで行うことです。ベータヘッダ thinking-binding-controls-2026-08-01 + block_binding の "drop_block" 指定でブロックを落として続ける方法もあります。
④ computer_20251124 が使えない
検索するもの:computer_20251124
Claude APIとGoogle Cloudでは tools: [{ type: "computer_toolset_20260801" }] へ移行します。fine-grained-tool-streaming-2025-05-14 ヘッダはツールセットと併用すると400になるため外します。Amazon Bedrockでは computer_20251124 を引き続き使えます。ループ側は公式の移行手順で確認します。
⑤ advisorツールで組める相手が減った
検索するもの:advisor
advisorツール(ベータ)でOpus 4.8・Opus 4.7・Sonnet 5をadvisorに指定すると400になります。助言は advisor_redacted_result ブロックとして暗号化されて返ります。
エラーなしで画面が黙る:ツール呼び出し間の文章
移行でいちばん気づきにくいのがこの変更です。 Sonnet 5.5では、ツール呼び出しの合間に書く1〜2文より長い文章が、進捗用の thinking ブロックで返ります。既定の display は "omitted" で中身は空です。text_delta だけを流しているチャットUIは、リクエストが成功しているのに途中経過が出なくなります。
直し方は3通りです。
display: "updates"(ベータヘッダ thinking-display-updates-2026-08-18):進捗だけが返る
display: "summarized":進捗と推論の要約が返る
between_tools にする:display なしで文章が返る
Route Handlerで進捗を別の種類として流す実装例です。
// app/api/agent/route.ts(認可チェックと入力検証は省略)
const stream = client.messages.stream({
model: MODEL,
max_tokens: 16000,
thinking: { type: "adaptive", display: "summarized" },
output_config: { effort: "medium" },
tools,
messages,
});
for await (const event of stream) {
if (event.type !== "content_block_delta") continue;
if (event.delta.type === "text_delta") send("text", event.delta.text);
if (event.delta.type === "thinking_delta") send("progress", event.delta.thinking);
}
ツールループで履歴を返すときは、空のものも含めてthinkingブロックを変えずに送り返します。
effortの再調整:API既定はhigh、Claude Codeはmedium
同じeffortの値でも、Sonnet 5とSonnet 5.5では推論量が違います。 5段階(low〜max)の水準が再調整され、Claude APIでの既定は high です。公式は、通常の処理を high、仕様が明確なエージェント処理を medium、チャットを medium か low から始めるよう案内しています。
混同しやすいのが、Claude CodeでのSonnet 5.5の既定effortは medium という点です(Claude Codeのモデル設定)。Claude Codeでの感触とAPIの結果が違うときは、まずeffortの差を疑います。
既定値と同じでも output_config.effort は明示しておきます。Anthropicが発表した「1タスクあたり最大30%安い」は自社計測で、単価は据え置きです。請求額は自社のリクエストで切り替え前後を比べます。
拒否は200で返る:stop_detailsの扱い
Sonnet 5.5は断るカテゴリが増えました。断った場合もHTTP 200で、stop_reason: "refusal" と stop_details が返ります。例外処理だけでは空の回答が画面に出ます。
if (message.stop_reason === "refusal") {
// category: cyber / bio / frontier_llm / reasoning_extraction / general_harms / null
console.warn("claude refusal", message.stop_details?.category, message.id);
// explanation は文言が固定されないため、表示に使い分岐には使わない
return Response.json({ error: "refused" }, { status: 422 });
}
ストリーミング途中の拒否では、それまでの出力を破棄します。サーバー側フォールバック(fallbacks: "default"、ベータヘッダ server-side-fallback-2026-07-01、Claude APIのみ)では、cyber と frontier_llm の拒否がSonnet 5で再試行されます。
reasoning_extraction は、「<thinking> 欄に考えを書いて」「JSONに reasoning を入れて」という指示がプロンプトやツール定義に残っていると起きることがあります。推論が必要ならthinkingブロックから読みます。
Sonnet 4.5からの移行は11月30日が期限
claude-sonnet-4-5-20250929 は2026年11月30日に提供終了します。 Sonnet 4.5から直接移る場合は、前章までに加えて次の差分が該当します。
2026年10月時点の差分(出典:移行ガイド・廃止予定一覧)
| 項目 | Sonnet 4.5 | Sonnet 5.5 | 直し方 |
|---|
thinking 省略時 | 推論なし | 推論あり | max_tokens を推論込みで見直す |
budget_tokens | 使える | 400エラー | output_config.effort に置き換える |
| assistantのprefill | 使える | 400エラー | 構造化出力かsystemの指示に置き換える |
temperature 等の既定以外の値 | 使える | 400エラー | 削除する |
| 同じ文章のトークン数 | 基準 | 約30%多い | トークンカウントAPIで数え直す |
| 画像の上限 | 1568px・1,568トークン | 2576px・4,784トークン | 画像の予算を置き直す |
2000×1500の画像は約2.5倍のトークンになります。prefillでJSONを返させていた実装は、次のように置き換えます。
// NG:Sonnet 5.5では400(最後がassistantのprefill)
messages: [{ role: "user", content: prompt }, { role: "assistant", content: "{" }],
// OK:構造化出力でJSONを受け取る
output_config: { effort: "medium", format: { type: "json_schema", schema: inquirySchema } },
messages: [{ role: "user", content: prompt }],
Bedrock経由では構造化出力が使えないため、形式はプロンプトで指示してコード側で検証します。
Claude Codeで移行作業を進める
公式移行ガイドは、Claude Codeで次のコマンドを実行する方法を案内しています。
/claude-api migrate this project to claude-sonnet-5-5
同梱のClaude APIスキルが、モデルIDの差し替え、破壊的なパラメータの修正、prefillの置き換え、effortの調整を行い、手で確認する項目のチェックリストを出します。作業後は本記事の検索項目を自分でも確かめ、検証環境で実リクエストを流してから本番を切り替えます。
まとめ
- 400にならない変更が2つある。 文章の移動とeffortの再調整は、画面と請求額を切り替え前後で比べて確認する
- Sonnet 4.5は11月30日に提供終了。 Sonnet 5からの5点に加え、prefillなど3点の置き換えとトークンの見積もり直しが要る
Opus 5.5へ移る場合の手順はClaude Opus 5.5への移行手順、モデル更新を保守契約でどう扱うかはNext.js保守運用の費用と契約にまとめています。
私たちは、Next.js構成でのClaude API組み込みを、PoC実装から本番移行までお手伝いしています。「Sonnet 4.5の提供終了までに移行を終えたい」という段階でも、15分のカジュアルな相談を受け付けています(営業はしません)。
※本記事のモデルの仕様・料金・提供条件は、2026年10月6日時点の公開情報(Anthropic公式発表・Sonnet 5.5の新機能・移行ガイド)に基づく整理です。導入の判断にあたっては必ず公式情報で最新の内容をご確認ください。本記事はNext.js 16.x時点の情報です。
技術仕様・対象バージョンは本文と参照先をご確認ください。
最終更新:2026年10月6日