Sonnetだけで作業していたとき、同じミスを何度も繰り返すことがあった。「なんでこんな間違いをするんだろう」と思っていたけど、原因は指示の出し方だったかもしれない。
ある日、プロンプトの最後に「Opusで計画を立てて、Sonnetで実行してください」と一行加えてみた。そうしたら、その後のアクションが明らかにスムーズになった。
なにが変わったのか
Sonnetは実行が得意なモデルだ。速くて安く、コードを書いたりファイルを操作したりするのは十分強い。ただ、複雑なタスクを一気に渡すと、ときどき判断がぶれる。
Opusは推論が得意だ。トークンは多く使うけど、複雑な問題を構造化してステップに分解するのが上手い。
この二つを組み合わせると何が起きるか。
- Opusが「何をどの順番でやるか」を先に決める
- Sonnetがその計画に従って実行する
計画がある状態で動くSonnetは、計画なしのSonnetより判断ブレが少ない。当たり前といえば当たり前だが、これを意図的に設定していなかった。
Claude Codeでの実装方法
Claude Codeのグローバル設定ファイル(~/.claude/CLAUDE.md)に以下を追記すると、複雑なタスクで自動的にOpus計画 → Sonnet実行の流れになる。
## Opus計画 + Sonnet実行ルール
ステップが3つ以上あるタスクを受けたとき:
1. Planサブエージェント(model: opus)で実装計画を先に作る
2. 計画に基づきSonnetで実装する
以下はSonnetのみで完結する(小さな変更・調査のみ):
- 1〜2ファイルの変更
- 調査・確認のみのタスク
- 既存パターンの繰り返し
これで「複雑なタスクはOpusが設計、Sonnetが実行」がデフォルトになる。
トークンとのバランス
Opusはトークンコストが高い。毎回Opusを使うと費用がかさむ。
そこでルールに「使わない場面」も書いておくのが大事だ。小さな修正・読み取り専用・繰り返し作業はSonnetだけで十分。Opusを使うのは「設計判断が必要な複雑なタスク」に絞る。
大雑把な目安:
- ファイル数3以上 → Opus計画あり
- ステップ数3以上 → Opus計画あり
- それ以下 → Sonnetのみ
なぜプロンプトに書くだけで変わるのか
Claude Codeのサブエージェント機能(Agentツール)は、呼び出し時にモデルを指定できる。model: "opus" を指定すれば、そのサブタスクだけOpusが動く。
「Opusで計画して」という指示を受けたClaudeは、内部的にOpusのPlanエージェントを呼び出して計画を立て、その結果を自分(Sonnet)への指示として受け取る。その構造化された指示に従って実行するので、精度が上がる。
実際に試してみた感想
完璧ではないけど、体感では「迷わない」回数が増えた。特に複数ファイルにまたがる改修や、順序が重要な作業で差が出やすい。
Sonnetだけで全部やろうとして詰まっていたのは、計画フェーズをスキップしていたからだと気づいた。人間でも設計なしにいきなり実装すると迷うのと同じだと思う。