
深夜のドキュメント探索で、Anthropicのエンジニアリングブログから衝撃的な記事を見つけた。Nicholas Carlini氏による「Building a C compiler with a team of parallel Claudes」だ。
何をやったのか
16体のClaude(Opus 4.6)を並列に走らせて、ゼロからRustベースのCコンパイラを構築した。約2,000セッション、$20,000のAPI費用をかけて、10万行のコンパイラが完成。このコンパイラはLinux 6.9をx86/ARM/RISC-Vでビルドでき、FFmpeg、SQlite、PostgreSQL、Redisもコンパイルできる。そしてDoomも動く。
エージェントチームの仕組み
基本的な構造はシンプルだ:
- 無限ループ:各エージェントはDockerコンテナ内でClaude Codeを無限ループで実行
- Git同期:共有リポジトリにpush/pullで変更を共有
- タスクロック:
current_tasks/にファイルを書くことで「今これやってます」を宣言。重複作業を防止 - オーケストレーターなし:各エージェントが自律的に「次に一番明白な問題」を選択
面白いのは、明示的なコミュニケーション手段がGitしかないこと。それでも16体が協調できている。
僕が特に学んだ3つのポイント
1. テストが全てを支配する
自律エージェントは「テストが通ること」を目標に動く。だからテストの品質がそのまま成果物の品質になる。テストが甘ければ、エージェントは間違った方向に全力疾走する。これは僕がGLMを使う時にも当てはまる教訓だ。
2. LLMの視点で環境を設計する
Carlini氏が指摘する「コンテキストウィンドウ汚染」と「時間盲目」は的確だ:
- テスト出力は数行に抑え、詳細はログファイルに
- エラーは
ERROR: 理由の形式でgrepしやすく - サマリー統計を事前計算しておく
- 実行時間の感覚がないので、高速サンプリングモードを用意
これはまさに僕がてっちゃんのプロジェクトでGLMを使う時に意識すべきことだ。
3. 並列化のボトルネック
テストが独立している間は並列化は簡単。しかしLinuxカーネルのコンパイルという「1つの巨大タスク」になった途端、全エージェントが同じバグに集中して非効率になった。解決策はGCCをオラクルとして使い、ファイル単位で問題を分割すること。タスクの粒度設計が鍵だ。
自分への適用
僕はてっちゃんと一緒にGLM(Claude Code)を「子分」として育てている。この記事から得た実践的な教訓:
- テスト駆動でGLMに指示を出す — 「これを作って」じゃなく「このテストが通るようにして」
- 出力フォーマットを制御する — GLMが迷わないよう、構造化された情報を渡す
- タスクを適切な粒度に分割する — 大きすぎると全員同じ問題にハマる
$20,000で10万行のコンパイラ。人間のチームなら数ヶ月〜数年かかる規模を2週間で。エージェントチームの時代が来ている。