Claude Sonnet 4.6 vs Opus 4.6 実践比較 — コスト40%減でどこまで戦えるか、モデル選択の判断フロー
Claude Sonnet 4.6 vs Opus 4.6 実践比較 — コスト40%減でどこまで戦えるか、モデル選択の判断フロー
SWE-benchスコア差わずか1.2pt(79.6% vs 80.8%)、価格差は40%。「もうSonnetで十分では?」——その判断、タスクによっては正解だが、落とし穴もある。
Claude CodeとAPI両面で実際にSonnet 4.6とOpus 4.6を使い分けた結果から、コストを最適化しつつ品質を落とさないモデル選択の判断フローを提示する。
注意: 2026年4月初旬に「Claude Sonnet 5(SWE-bench 92.4%)」を謳う記事がDEV Community等で拡散されましたが、これはエイプリルフール投稿です。2026年4月時点の最新SonnetはClaude Sonnet 4.6であり、本記事ではこの正式モデルを扱います。
スペック比較:数字だけでは見えない差分
ベンチマーク・価格・コンテキスト長の一覧表
| 項目 | Sonnet 4.6 | Opus 4.6 |
|---|---|---|
| モデルID | claude-sonnet-4-6 | claude-opus-4-6 |
| SWE-bench Verified | 79.6% | 80.8% |
| 入力料金(/MTok) | $3 | $5 |
| 出力料金(/MTok) | $15 | $25 |
| コンテキスト長 | 1Mトークン | 1Mトークン |
| コスト差 | — | 入力+67% / 出力+67% |
入力・出力ともにSonnetはOpus比で約40%安い。コンテキスト長は同一の1Mトークンなので、長い文脈を扱えるかどうかはモデル選択の判断材料にならない。
数字に現れない実務上の体感差
SWE-benchの1.2pt差は統計的には僅差だが、実務でのタスク種別によって体感は大きく変わる。単一ファイルの修正ではほぼ差を感じないが、複数ファイルにまたがる設計判断が必要な場面ではOpusの安定感が際立つ。この「どこで差が出るか」が、モデル選択の核心になる。
Sonnet 4.6が十分なケース・Opusが必要なケース
Sonnetで十分:単一ファイル修正・定型コード生成・テスト作成
- 単一ファイルのバグ修正
- ユニットテスト・E2Eテストの生成
- 定型的なCRUD実装、型定義の追加
- ドキュメントの生成・翻訳
これらのタスクではSonnetとOpusの出力品質にほぼ差がない。コスト40%減の恩恵をそのまま受けられる領域だ。
Opusが勝る:クロスファイルリファクタリング・複雑な設計判断
- 10ファイル以上にまたがるリファクタリング
- アーキテクチャ上のトレードオフ判断を含むタスク
- 長い文脈を保持したまま整合性を維持する必要がある実装
- あいまいな要件から設計方針を導き出す作業
正直、「Opusじゃないと無理」という場面は多くない。だが、複雑なタスクでSonnetがたまに見落とすエッジケースを、Opusは拾ってくれる——その安心感に40%のコスト差を払うかどうかが判断の分かれ目になる。
判断フローチャート
タスクの複雑さは?
├── 単一ファイル / 定型的 → Sonnet 4.6
├── 中程度(2〜5ファイル)→ まずSonnetで試す → 品質不足ならOpusに切り替え
└── 高難度(設計判断 / 大規模リファクタ)→ Opus 4.6
「迷ったらSonnetで試す → 品質不足ならOpusに切り替え」が最もコスト効率の良い戦略だ。
Claude Codeでのモデル切り替え設定
/model コマンドでの切り替え
Claude Code内でモデルを切り替えるには /model コマンドを使う。
# 現在のモデルを確認・変更
/model
# Sonnet 4.6に切り替え
/model sonnet
# Opus 4.6に切り替え
/model opus
日常の開発ではSonnetをデフォルトにしておき、複雑なリファクタリングや設計相談の場面だけOpusに切り替える運用がおすすめだ。
よくある誤解:/fast モードについて
Claude Codeの /fast モードは モデルを切り替えるものではない。Opus 4.6のまま出力速度を向上させるモードであり、Sonnetへのダウングレードではない。コスト削減目的で /fast を使っても意味がないので注意してほしい。
APIでのモデル移行:Opus → Sonnet切り替え手順
model パラメータの変更
基本的にはmodelフィールドを変更するだけで動作する。
import anthropic
client = anthropic.Anthropic()
# Before: Opus 4.6
- model="claude-opus-4-6",
# After: Sonnet 4.6
+ model="claude-sonnet-4-6",
response = client.messages.create(
model="claude-sonnet-4-6", # ここを変更するだけ
max_tokens=4096,
messages=[{"role": "user", "content": "..."}]
)
移行時の注意点
- 長文出力の打ち切り: Sonnetは長い出力で途中打ち切りが起きやすい傾向がある。
max_tokensを明示的に十分な値に設定しておくこと - budget_tokens: Extended Thinkingを使用している場合、
budget_tokensの設定を見直す - 段階的移行: いきなり全トラフィックを切り替えるのではなく、一部をSonnetに振り向けてA/Bテストするのが安全
import random
def select_model(task_complexity: str) -> str:
if task_complexity == "high":
return "claude-opus-4-6"
# 中程度のタスクは50%ずつA/Bテスト
if task_complexity == "medium":
return random.choice(["claude-sonnet-4-6", "claude-opus-4-6"])
return "claude-sonnet-4-6"
コスト最適化:混合戦略で月額を最小化する
タスク分類 × モデル選択マトリクス
| タスク難易度 | 割合(目安) | 推奨モデル | 入力+出力コスト |
|---|---|---|---|
| 定型(テスト生成等) | 40% | Haiku 4.5 | $0.25 + $1.25 |
| 中程度(一般実装) | 40% | Sonnet 4.6 | $3 + $15 |
| 高難度(設計判断) | 20% | Opus 4.6 | $5 + $25 |
Routerパターンの実装例
タスク難易度に応じてモデルを自動選択するRouterをTypeScriptで実装する例を示す。
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
type Complexity = "low" | "medium" | "high";
const MODEL_MAP: Record<Complexity, string> = {
low: "claude-haiku-4-5-20251001",
medium: "claude-sonnet-4-6",
high: "claude-opus-4-6",
};
async function classifyComplexity(task: string): Promise<Complexity> {
const res = await client.messages.create({
model: "claude-haiku-4-5-20251001", // 分類自体は最安モデルで
max_tokens: 16,
messages: [
{
role: "user",
content: `Classify this task's complexity as low/medium/high. Reply with one word only.\nTask: ${task}`,
},
],
});
const label = (res.content[0] as { text: string }).text.trim().toLowerCase();
if (label === "low" || label === "medium" || label === "high") return label;
return "medium"; // フォールバック
}
async function routedRequest(task: string) {
const complexity = await classifyComplexity(task);
const model = MODEL_MAP[complexity];
console.log(`Task complexity: ${complexity} → using ${model}`);
return client.messages.create({
model,
max_tokens: 4096,
messages: [{ role: "user", content: task }],
});
}
月間コスト試算
月100万トークン処理(入出力同量)と仮定した場合の概算:
| 戦略 | 月間コスト |
|---|---|
| 全Opus | 約$30 |
| 全Sonnet | 約$18 |
| 3層混合(Haiku 40% / Sonnet 40% / Opus 20%) | 約$12〜14 |
3層混合戦略なら全Opus比で 50%以上のコスト削減 が見込める。さらに、リアルタイム性が不要な処理にはBatch API(50%割引)を併用すれば、追加で大幅な削減が可能だ。
まとめ
SWE-bench差1.2ptという数字が示す通り、多くの日常タスクでSonnet 4.6はOpus 4.6と遜色ない。だが「多くの場合」と「すべての場合」は違う。
本記事の判断フローに沿ってタスクを分類し、Sonnetをデフォルト・Opusを切り札 として使い分ければ、品質を維持しながらAPIコストを30〜50%削減できる。
まずは自分の典型タスク10件をSonnetで試し、体感品質を確かめるところから始めてみてほしい。
