CLAUDE CODE / 初心者向け解説
「スーパーチームを作って」と、いったい何が違うのか。
Claude Code に「専門家たちのスーパーチームを作って、この作業をやってくれ」とお願いすると、 5人、6人の分身(サブエージェント)が現れて、手分けして仕事をしてくれます。 とても分かりやすいし、実際よく働きます。
では、なぜそれとは別に「ウルトラコード(ultracode)」なんてものが用意されているのでしょうか。 名前が ultra + code なので「もっとすごいコードを書いてくれるモード」に見えます。 でも、そうではありません。
ウルトラコードがすごいのは、賢さではありません。
すごいのは、人数です。
そして——5、6人でうまくいくやり方は、100人になると壊れる。
ウルトラコードは、その「壊れる」を回避するための仕組みです。
まず、いつものやり方を確認しましょう。難しく考える必要はありません。 Claude は部長です。
あなたが「調べて、直して、確認して」と頼むと、部長は部下(サブエージェント)を呼びます。 「君はコードを調べてきて」「君は修正して」「君は動作確認して」。 部下たちは仕事を終えると、報告書を部長の机の上に置きます。 部長はそれを読み、考え、次に誰を呼ぶかを決める。
部下が5人なら、机の上には報告書が5通。余裕です。部長は全部読めます。 ここまでは、まったく問題ありません。 5、6人で済む仕事なら、「スーパーチームを作って」で完璧です。ウルトラコードは要りません。
ここが、この記事のいちばん大事なところです。下のつまみを右にずらして、 部下の人数を増やしてみてください。 左が「いつものスーパーチーム」、右が「ウルトラコード」の机です。
つまみを 50 あたりまで動かすと、左の机が埋まりはじめます。 これは比喩ではなく、実際に起きていたことです。 ワークフローという仕組みが登場する前は、 50体のサブエージェントを走らせると、50個の中間報告がコンテキストに積み上がり、 コンテキストが埋まり、仕事が終わるずっと前に品質が劣化していったと説明されています。
「100体まで」という上限があったわけではありません。 ただ、モデルの作業記憶が先に尽きるという、やわらかい壁があったのです。
机が溢れる以外にも、「部長が全部を頭の中で仕切る」やり方には、人数が増えるほど効いてくる弱点があります。4つあります。
部下の報告書は、1通残らず部長の机に戻ってきます。5通なら読めます。100通は読めません。 読めないまま「たぶんこうだろう」と判断が始まる。これが、いちばん静かで、いちばん怖い壊れ方です。
「50項目すべてレビューして」と頼むと、35項目やったところで、自信たっぷりのまとめを書いて 「完了しました」と言ってしまうことがあります。悪気はありません。人間だって同じです。 しかも困ったことに、やり残しは報告書に書かれません。
残りがゼロになるまで という繰り返し(ループ)で回す。
ループは疲れないし、飽きないし、忘れません。ただ同じ条件をもう一度確かめるだけです。
自分がやった仕事を自分で採点すると、どうしても甘くなります。 とくに「検証して」「間違いがないか確かめて」という仕事で、この傾向が出ます。
部長が「1人目の報告を読む → 考える → 2人目を呼ぶ」。 この“考える”の部分が、毎回モデルのターンです。つまり課金対象。 100人分の采配は、100回分の思考料金になります。
ここまで来れば、正体はもう単純です。ウルトラコードをオンにすると、Claude は いきなり作業を始める代わりに、まず「段取り書」を書きます。 それが JavaScript のプログラムです。そしてそのプログラムを、Claude Code のランタイムが実行します。
プログラムの中の agent( ... ) という 1 行が、部下 1 人に対応します。
実物はこんな形をしています。全部わからなくて大丈夫です。色のついた行だけ見てください。
// フェーズ1:まず1人、下調べに行かせる
const files = await agent('src/routes/ のファイル一覧を出せ');
// フェーズ2:ファイルの数だけ、部下を並列に起動する
const findings = await parallel(
files.map(f => () => agent(`${f} の認証漏れを探せ`))
);
// ← ここはただのJavaScript。モデルは1トークンも使っていない
const suspicious = findings.filter(x => x.risk > 0.5);
// フェーズ3:別の部下に、その指摘を潰させる(反証させる)
const verified = await parallel(
suspicious.map(x => () => agent(`本当か?反証せよ: ${x.claim}`))
);
return summarize(verified); // ← これだけが机に戻る
「なぜわざわざプログラムにするのか」——理由はもうお分かりだと思います。 プログラムは、疲れず、忘れず、甘い採点をせず、そして机を占領しないからです。 おまけに、ファイルとして残るので、翌週まったく同じ段取りをもう一度回せます。
混乱の原因は、実は名前です。/effort(考える深さ)のメニューの中に ultracode が並んでいるので、
「low → medium → high → ultracode」という賢さの階段に見えてしまう。
でも実際は違います。軸が 2 本あるのです。
| 軸A ── どれだけ深く考えるか | 軸B ── 誰が采配するか | |
|---|---|---|
ふつうの会話/effort high |
high | Claude(毎ターン自分で判断) |
プロンプトにultracode と書く |
変わらない | スクリプト(そのタスクだけ) |
/effort ultracode |
xhigh に固定 | スクリプト(セッション中ずっと自動) |
公式ドキュメントの言い方は、驚くほど素っ気ないものです。 「ウルトラコードは、モデルのエフォートレベルではなく Claude Code の設定である。 モデルには xhigh を送り、加えて、実質的なタスクに対して動的ワークフローを組ませる」。
つまり API に effort: "ultracode" という値は存在しません。
送られているのは xhigh です。ウルトラコードとは、
「頭は xhigh で回せ」+「段取りは毎回コードに書け」を、まとめてオンにするスイッチ。
それだけです。
| こういう仕事なら | 選ぶもの |
|---|---|
| 部下が数体で足りる | 「スーパーチームを作って」で十分 |
| 結果を自分の目で全部読みたい | 「スーパーチームを作って」で十分 |
| ちょっとした修正、質問、レビュー | ふつうの会話(/effort high) |
| 対象が数十〜数百ファイル | ウルトラコード |
| 「見落としがないこと」が成果物の価値 (セキュリティ監査、コードベース全体の点検) | ウルトラコード |
| 大規模な移行・書き換え | ウルトラコード |
| 一度作った段取りを、何度も回したい | ウルトラコード(保存して再実行) |
念のため書き添えておくと、公式ドキュメント自身が 「ほとんどのタスクにワークフローは必要ない」とはっきり書いています。 日常の作業には、ふつうの会話のほうが安く、速く、そして結果をレビューしやすい。
/effort ultracode は、Claude Code を立ち上げ直すと消えます。
これは仕様です。昨日の「全力監査モード」が、今日の 1 行タイポ修正に適用されたら困りますから。
通常業務に戻るときは /effort high に落としてください。effortLevel 設定、--effort フラグ、
CLAUDE_CODE_EFFORT_LEVEL 環境変数は、いずれも ultracode を受け付けません。
書いてもエラーを出さずに黙って無視されます。「動いているつもり」がいちばん危険です。
「スーパーチーム」は、
5、6人までなら完璧に機能します。
ウルトラコードは、
それが機能しなくなる規模のためにあります。
「スーパーチームで十分わかりやすいのに」と感じたなら、その直感は正しいのです。
あなたの仕事が、まだ壊れる規模に達していないだけ。
壊れたその日に、この記事を思い出してください。