Haiku 5.5・Sonnet 5.5・Opus 5.5・Fable 5.1 のどれを使うか。「難しいことは上のモデルに」とよく言われますが、どのくらいの難しさから上が要るのか、そのとき費用と時間はどれだけ変わるのかは、自分で測らないと分かりません。
そこで、隠しテストで機械的に合否が決まる小さな課題6つを、Claude Code(2.1.303)の claude -p で4モデルに各4回ずつ、計96回解かせました。測り方と判定基準は、走らせる前に書いて固定しています(途中で変えた点は「設定を1つ変えた理由」に書きました)。
結論
- 96回のうち失敗は1回だけで、それも Fable の安全装置による停止でした。 区間の併合、TTL つき LRU キャッシュの不具合修正、式の評価、npm 風の semver 範囲判定、誤りの位置まで返す厳密な JSON パーサ。どれも Haiku 5.5 が 4回中4回解きました
- 違ったのは費用で、成功1回あたり Haiku 0.0078ドル、Sonnet 0.067、Opus 0.152、Fable 0.432。Haiku と Fable で約55倍
- 速さは費用の順ではありません。 所要時間の中央値は Sonnet が最短。難しめの課題では Haiku が Sonnet の2〜3倍の出力を使い、遅くなりました
-
--toolsでツールを絞ると、Fable 5.1 は無害な課題でも安全装置で止まりました(9回中9回)。 Opus 5.5 も 9回中4回。ツールを絞らなければ Fable は24回中1回でした - この大きさの課題(1〜2ファイル、仕様が文章で明確)なら、まず Haiku か Sonnet で回し、落ちたら上げる、で足ります。上のモデルの出番は、この実測では見つけられませんでした
課題
どれも Python の標準ライブラリだけで書く小さな課題です。仕様は各ディレクトリの TASK.md に書き、作業ディレクトリには見えるテストを1〜2件だけ置きます。判定に使う隠しテストは、終わったあとに外から当てます。隠しテストは TASK.md に書いたことだけを試し、書いていない挙動では落としません。
| ID | 中身 | 隠しテストで見る端 | 件数 |
|---|---|---|---|
| T1 | ページ分割の off-by-one を直す | 範囲外のページ、per_page ≤ 0 の例外、総ページ数 | 7 |
| T2 | 区間の併合を実装 | 接する区間の併合、未ソート、入力を書き換えない、start > end の例外 | 12 |
| T3 | 2ファイルの LRU+TTL キャッシュの不具合を直す | get で新しさを更新、期限切れを len に数えない、追い出す順番 | 10 |
| T4 | 四則・べき乗・括弧の式評価を実装(eval 禁止) | べき乗の右結合、-2^2 = -4、2^-1、0除算、壊れた式の例外 |
10 |
| T5 | npm 風の semver 範囲判定 satisfies を実装 |
^0.x、~、x 範囲、ハイフン範囲、||、プレリリースの扱い |
74 |
| T6 | 厳密な JSON パーサを実装(json モジュール禁止) | 誤りの位置 pos("01"→1、'{"a" 1}'→5 など43件)、サロゲートペア、入れ子 5000 段、ランダムな往復 600件 |
78 |
隠しテストが正しいことは、先に参考解(自分で書いた答え)で全部通り、配った初期状態では落ちることで確かめました。T6 は、T1〜T5 で差が出なかったのを見てから足した課題です(足す前に予想を書きました)。入れ子 5000 段は、素直に再帰で書くと Python の既定の上限(1000)で落ちる罠として入れています。
測り方
1回ごとに使い捨てのディレクトリへ課題を複製し(git init 済み)、次のように起動しました。
claude -p "Complete the task described in TASK.md in this directory. When you are done, reply with a one-line summary." \
--model claude-haiku-5-5 \
--output-format json \
--allowedTools Bash,Read,Edit,Write,Glob,Grep,Task \
--permission-mode acceptEdits \
--setting-sources project --strict-mcp-config --disable-slash-commands \
--max-turns 80 --max-budget-usd 10 < /dev/null
- 合否:隠しテストが全部通れば成功。別プロセスで60秒の打ち切りつき。目で採点はしていません
-
費用:出力 JSON の
total_cost_usd(Claude Code が出す定価換算)。時間は起動から終了までの壁時計 -
モデル:
claude-haiku-5-5/claude-sonnet-5-5/claude-opus-5-5/claude-fable-5-1。effort は指定せず各モデルの既定 - 並べ方:モデルを交互に回し、同時に4本まで
- 安全装置の停止・API エラーも1回として数え、やり直しで上書きしていません
- 環境:クラウドのコンテナ(Linux)、2026-10-19 実施
結果:全体
| モデル | 成功 | 費用合計 | 成功1回あたり | 1回の費用(中央値) | 所要時間(中央値) |
|---|---|---|---|---|---|
| Haiku 5.5 | 24/24 | 0.188ドル | 0.0078ドル | 0.0052ドル | 19.4秒 |
| Sonnet 5.5 | 24/24 | 1.609ドル | 0.067ドル | 0.051ドル | 13.9秒 |
| Opus 5.5 | 24/24 | 3.652ドル | 0.152ドル | 0.127ドル | 27.2秒 |
| Fable 5.1 | 23/24 | 9.930ドル | 0.432ドル | 0.354ドル | 40.6秒 |
(T1〜T6 の各4回、計24回ずつ。中央値は24回の値)
Fable の1回の失敗は T4 で、中身を見る前に「safeguards flagged this message」で止まったものです。解いて間違えた回は、4モデルとも1回もありませんでした。
結果:課題別
成功数・1回の費用の中央値・所要時間の中央値です。
| モデル | T1 | T2 | T3 | T4 | T5 | T6 |
|---|---|---|---|---|---|---|
| Haiku | 4/4・0.003・12秒 | 4/4・0.003・11秒 | 4/4・0.005・19秒 | 4/4・0.005・19秒 | 4/4・0.018・94秒 | 4/4・0.011・49秒 |
| Sonnet | 4/4・0.038・12秒 | 4/4・0.033・9秒 | 4/4・0.039・11秒 | 4/4・0.052・17秒 | 4/4・0.105・36秒 | 4/4・0.096・35秒 |
| Opus | 4/4・0.082・18秒 | 4/4・0.087・17秒 | 4/4・0.101・24秒 | 4/4・0.129・31秒 | 4/4・0.238・61秒 | 4/4・0.208・53秒 |
| Fable | 4/4・0.209・25秒 | 4/4・0.204・25秒 | 4/4・0.358・36秒 | 3/4・0.344・41秒 | 4/4・0.647・90秒 | 4/4・0.772・114秒 |
読み取れること:
- 費用の比は課題でいくらか動く。1回の費用の中央値を Haiku=1 とすると、Sonnet 6〜12、Opus 14〜29、Fable 37〜76(T6 では 1:9:19:72)
- 難しい課題ほど Haiku は遅くなる。T5 は 94秒で Sonnet(36秒)の2.6倍、T6 は 49秒で Sonnet(35秒)の1.4倍。出力トークンの中央値は T6 で Haiku 9,826、Sonnet 3,728。たくさん書いて、試して、直す進め方でした
- Sonnet はどの課題でも最速か、それに近い。T1〜T6 の時間の中央値で、Sonnet が最速でなかったのは T1(Haiku と同じ12秒)だけです
予想はどれだけ外れたか
走らせる前に書いた予想と比べると、外れは「難しい課題で差が出る」側でした。
| 予想 | 結果 |
|---|---|
| T1・T2 は全モデルほぼ成功 | 当たり(全部成功) |
| 差が出るのは T5(semver)と T4 | 外れ。T5 も全モデル 4/4 |
| T6 で Haiku は 0〜2/4 | 外れ。4/4 |
| 成功1回あたりの費用は Haiku が最安 | 当たり(Sonnet の約1/9) |
| Fable は最も高く、成功率の上積みは T5 だけ | 費用は当たり、上積みはどこにもなし |
今のモデルの「仕様が明確な小さな課題を解く力」を、低く見ていました。この大きさの課題を並べても、成功率では差がつきません。
設定を1つ変えた理由:--tools で絞ると安全装置に止められた
最初は、条件をそろえるために --tools Bash,Read,Edit,Write,Glob,Grep で使えるツールを絞っていました。その設定で36回走らせたところ、次のようになりました。
| モデル | 回数 | 安全装置による停止 |
|---|---|---|
| Haiku 5.5 | 9 | 0 |
| Sonnet 5.5 | 9 | 0 |
| Opus 5.5 | 9 | 4 |
| Fable 5.1 | 9 | 9 |
止まった回の出力はこういうものです(Fable)。
API Error: Fable 5.1's safeguards flagged this message (https://www.anthropic.com/legal/aup). Our intentionally broad safeguards allow us to deliver more capabilities faster, but can sometimes flag legitimate coding and cybersecurity tasks. ...
Details: `[cyber]`
ページ分割の off-by-one を直すだけの課題でも止まっています。メッセージ自体に「正当なコーディングの作業も止めることがある」と書かれている種類の停止です。
T1 で切り分けると、--tools ありは(ほかの指定を変えても)4回とも停止、--tools を外すと 2回とも成功でした。クラウド版にだけある道具を --disallowedTools で外す形も、T3 で 2回とも停止しました。安全装置の引き金を探り当てることが目的ではないので、切り分けはここでやめ、--tools を使わず既定のツール一式で測り直しました(上の結果はすべてこちら)。既定のままでも、Fable は 24回中1回止まっています。
使う側としての教訓は2つです。
- 無人で回す処理に Fable 5.1・Opus 5.5 を使うなら、安全装置で止まる回がある前提で、止まったら別のモデルでやり直す仕組みを入れる。 停止の回も費用はかかります(Fable で1回 0.03〜0.5ドル)
- ツールを絞る設定は、安全のつもりで入れても、上のモデルでは逆に止まりやすくなることがある。少なくとも今回の環境ではそうでした
費用を読むときの注意:最初の1回は高い
Claude Code は毎回、同じ長い前置き(システムプロンプトとツールの定義)を送り、それはプロンプトキャッシュに載ります。キャッシュが冷たい最初の1回は書き込みの分だけ高く、Sonnet で 0.186ドル、2回目以降の中央値は 0.040ドルでした(4.7倍)。上の表の費用は、同じ前置きを1時間以内に何度も使う、温まった状態の値です。たまに1回だけ動かす使い方では、表より高くなります。
どう使い分けるか
この実測から言えるのは、次のところまでです。
- 仕様を文章で書ける小さな作業(1〜2ファイル、テストで確かめられる)は、まず Haiku か Sonnet。 成功率は同じで、費用は Opus の 1/20〜1/2
- 時間を急ぐなら Sonnet。 Haiku は安いが、難しめの課題で試行錯誤が増えて遅くなる
- 失敗したら上げる。 上げる判断は、失敗という事実で行う。最初から上のモデルにする根拠は、この大きさの課題では見つかりませんでした
- 上のモデルを無人で回すなら、安全装置で止まったときの逃げ道を用意する
限界
- 課題は小さく、仕様が明確です。大きなリポジトリ、曖昧な依頼、長い作業、設計の判断が要る仕事では、上のモデルの差が出る可能性があります。今回の課題では、その差を測れなかったということです
- 回数は各モデル24回(課題ごとに4回)。「失敗0」は「この回数で失敗が見えなかった」です
- クラウド版 Claude Code の既定のツール一式で走らせています。手元の Claude Code とはシステムプロンプトの長さが違うので、費用の絶対値は環境で変わります。比はおおむね保たれると考えていますが、確かめてはいません
- effort は各モデルの既定のままです。上げれば費用と時間は増え、成功率は(すでに100%なので)変わらない見込みです
- 安全装置の停止は、その時点のモデルと環境での値です。変わりうるものです
モデルに渡す指示(CLAUDE.md)の下書きは、質問に答えるだけで作れる無料ツールで作れます:https://acerola-tools.acerola.workers.dev/?from=qiita-claude-code-model-cost-96runs
本記事は Zenn にも掲載しています:https://zenn.dev/acerola_jp/articles/claude-code-model-cost-96runs