知人から化粧品ショッピングモールの構築依頼を受けた。職場でCだけ書いていたので、新しい技術スタックを試す機会だった。決済はToss Payments、フロントはReact。「金融圏の次世代が全部Reactに行く」という話が気になっていたし、Toss PaymentsはNode親和的だった。方向はすぐ決まった。
当然このスタックを使ったことはなかった。やる気はあるが、勉強してから作れるような納期ではなかった。だからバイブコーディングを試してみた。
「化粧品を販売するためのショッピングモールを作って、リファレンスサイトのURLは〜だよ。」それだけだったのに、一人でカタカタやって、思いもよらない部分まで設計したモックアップができあがった。ああ、バイブコーディングが出て1年以上経つのに、完全に遅れていた。
Claudeが作るコードをもとに新しいスタックを学ぶという計画は愚かだった。コードを読む速度よりClaudeが生産する速度の方がはるかに速かった。だから自分でレビューするのではなく、自分自身でレビューするよう依頼した。(人間時代の終わりが来るようだ。)
そうやって使っていると、Claudeが前の内容を引き継げない現象が起きた。「context」という単語をググって原因を知った。サブエージェントで役割を分ければいいということもそこで見つけた。pm、dba、back、front、qa — 5つの構造をセットアップした。CLAUDE.mdにパスルールからセッション運用ガイドまで全て定義した。使用量は10%台半ば。これで十分じゃないか、と思った。
それから3時間後、You've hit your limit · resets 3am を見た。
午前3時リセットという文言は理解できた。でも理解できなかった。なぜ3時間で?
最初からボタンの掛け違いだった
5つのエージェントをセットアップしながら、間違った仮説を持っていた。「Claudeが多く考えるほどトークンが多くかかる。」根拠はなかった。ただそう思っただけだ。
エージェントごとにif-thenルールをびっしり整理した。Claudeが判断する余地をなくせば推論コストが減ると信じていた。CLAUDE.mdもその論理で埋めた。
limitを経験してからやっとググった。間違っていたとその時知った。Claudeが消費するトークンの大部分は推論ではなく読み込みだった。エージェントは実行されるたびにCLAUDE.mdを最初から全部読む。一生懸命埋めたCLAUDE.mdが毎回丸ごとコンテキストにロードされていた。
散文形式の説明をテーブルに圧縮し、重複項目を削除した。消費速度が減った。
もっと分割すればトークンが減るだろう
軽量化後、Compacting conversation...の頻度が減った。contextがうまく維持された。嬉しかった。
しかしトークン消費を見ると、むしろもっと漏れていた。
「役割をもっと細かく分ければ、各エージェントが扱う範囲が狭くなるんじゃないか。」これが次の試みだった。
5つから12に増やした。api-designer、ui-designer、performance-engineer、security-auditor… 段階的に体系的に分けた構造だった。
contextはうまく維持された。でもトークンがもう少し漏れている気がした。
涙を飲んで統廃合
Claudeに原因を診断してもらった。まるで裁判の判決を受けるようだった。token.. my precious…
エージェント数 = CLAUDE.md読み込み回数だった。12のエージェントがそれを12回ずつ全てコンテキストにロードした。分割するほど速く燃えていた。
減らさなければならなかった。本当に一生懸命作ったが、涙を飲んで統合した。
api-designerはbackend-developerに、ui-designerはfrontend-developerに、performance-engineerはcode-reviewerに吸収させた。
| 項目 | 前 | 後 | 削減 |
|---|---|---|---|
| エージェントファイル全体容量 | 112KB | 40KB | -64% |
| エージェント数 | 12個 | 9個 | -3個 |
使用量の消費速度が目に見えて変わった。
だからMaxにした
構造を整えてからやっとClaudeの作業速度を実感した。お金がかかるのは確かだ。でも処理速度が想像を超えていた。自分でやれば数日かかる作業が1セッションで終わった。
Maxプランに上げて、無駄なく充実に使おう。
構造の問題は解決した。my preciousを守るためにググるのをやめなかった。そして発見した。Claudeがファイルを読む時、500行なら500行全部読んでいた。テストを実行すると成功したケースまで結果全体をコンテキストにロードしていた。エージェント数の問題ではなかった。Claudeが見ること自体が問題だった。
どうすればClaudeに必要なものだけを見せることができるだろうか。
このシリーズの他の記事
参考