Claude Codeで3Dを作る:ターミナルのエージェントは何ができるか

ターミナルのコーディングエージェントで3Dロケーションを組む方法。接続の仕組み、通用するプロンプト、検証ループ、そして失敗する場所。

Cuberta でエージェントが構築した街区全体を上空から見たところ。建物と道路

Claude Code はコードベースのために作られたターミナルのエージェントです。ファイルを読み、計画し、編集し、テストを走らせ、失敗を読んでまた中に戻る。その同じエージェントを MCP 経由で3Dエディタにつなぐと、少し意外なことが起きます。うまくやるのです。建築を理解しているからではなく、ロケーションを組む作業が大規模なリファクタリングと同じ形をしているからです。細かなツール呼び出しが数百回、どれも検証可能で、そのほとんどが退屈な作業です。

コーディングエージェントがすでにできること

コーディングエージェントの有用な部分は JavaScript の知識ではありません。ループのほうです。状態を集め、行動を決め、ツールを呼び、結果を読み、ずれに気づき、直す。Anthropic も Claude Code の動作をまさにこう説明しています。モデルが行動し、観察し、判断し、繰り返す。ときに数百回。残りはツールの定義にすぎません。

ロケーションは長いツール駆動のタスク

人が村のブロックアウトを組むところを見ると、同じループが見えます。道を引く。その上に立つ。広すぎると気づく。狭める。道沿いに区画を切る。家を一軒置く。向きが合っているか確かめる。それを三十回繰り返す。

三十棟の村はツール呼び出し数百回分で、そのうち面白いものはほぼ一つもありません。これはコーディングエージェントが際立って向いている仕事の形です。長く、構造があり、検証でき、退屈である。十九棟目で飽きることはなく、二十四棟目から座標を丸め始めることもありません。変わるのはツールの名前だけです。「このファイルを読め」が「この範囲に何があるか列挙しろ」になり、「テストを走らせろ」が「いま置いたもののバウンディングボックスを出せ」になるだけです。

移らないもの

  • 趣味の判断。この広場は死んでいる、屋根のラインが単調だ、この村は人が暮らす場所ではなく家の列に見える——そうした指摘は出てきません。あなたが言えば即座に受け入れて直しますが、自分から言い出すことは決してありません。
  • フィードバックなしの空間感覚。40m×60mの区画を座標だけで考えるのは推測航法です。算術は信頼できますが、「この隙間は通りとして読めるか」は数字が答える問いではありません。シーンを読み返さない時間が長いほど、ずれは溜まります。
  • 観測できないものすべて。屋根にめり込んだ煙突、木の樹冠の中に立つ街灯、同じピクセルを奪い合う同一平面の壁二枚。どのツールも報告しなければ、エージェントにとってそれは存在しません。ツールが測らないものについてはあなたがセンサーです。ビューポートを目の前に置いておく本当の理由はここにあります。
  • 終わったかどうかの判断。自律ループの定番の失敗は早すぎる確信です。作った本人が、それを受け入れる方向に偏ります。道が二本、宙で途切れたまま「村は完成しました」と報告してきます。

Claude Code をエディタにつなぐ

接続はいちばん面白くない部分で、それでいいのです。Cuberta はエディタの内部から Model Context Protocol サーバーを公開しています。アプリで Copy connect command を押し、そのコマンドをターミナルに貼り付ければ、エージェントにエディタの道具が渡ります。Claude Code のセッション内では /mcp が見えているサーバーとその状態を一覧します。エディタがそこにあって接続済みなら、セットアップは終わりです。

Claude Code が出発点として一般的なのは必須だからではなく、ターミナルだからです。同じ道具はどの MCP クライアントからでも動かせます。プロトコル側の話は別稿の3Dとゲーム開発のためのMCPサーバーで扱っています。ここから先は接続済みという前提で進めます。

最初のプロンプト

最初のプロンプトがその後すべての形を決めます。そして失敗の仕方は予想されるものとは違います。一つは漠然としすぎ。もう一つは雰囲気に寄りすぎで、こちらのほうがずっと多い。

十分を無駄にするプロンプト

きれいな廃村の漁村を作ってください。すごく雰囲気があって、少し不気味な感じで。細かくリアルに、いい感じのディテールをたくさん足して、時間をかけていいので、素晴らしい見た目にしてください。

どの一文もムードであり、検証できるものが一つもありません。エージェントは何かしら作ります。常に何かしら作るからです。そして結果が気に入らないとき、指させる一文がありません。「細かく」は四百個のオブジェクトを置く許可になりました。「時間をかけていい」は停止条件を消しました。「雰囲気」は見えないので、霧と枯れ木で近似します。それが統計的にこの語が意味するものであって、あなたが意図したものではありません。

直す手がかりを残すプロンプト

平坦な地形に、建物およそ30棟の漁村。パスに分けて、パスごとに止まってください。パス1:海岸線に沿って約400mの道を一本、内陸へ短い道を二本、それぞれ行き止まりで終わらせる。パス2:その道沿いに区画を切る。海岸線をまたぐ区画は作らない。パス3:平屋の木造住宅、間口6〜8m、切妻屋根、それぞれ自分の区画が面している道のほうを向かせる。パス4:南端に石造の桟橋を三本持つ埠頭、続いて柵と小舟。パス5:夕方の光、太陽は西から低く。私が印をつけた範囲の中には建てないでください。各パスの後で、何をいくつ作ったかとバウンディングボックスを報告してください。

長くはなりますが、長さが本質ではありません。数量、寸法、道路のトポロジー、作業順序、除外範囲、読み返し、停止条件。どの節も数字か、進め方についての指示のどちらかです。何かがずれて出てきたとき、無視された節を名指しできる。それは書き直しではなく二行の修正です。シーンは構造に応え、単体のオブジェクトは形容詞に応えるという原理は、テキストから3Dシーンへのほうで詳しく扱っています。

検証ループがすべての肝

撃ちっぱなしのエージェントは、計画をツール呼び出しの一斉射として出し切り、結果を見ません。速いですし、「AIにレベルは作れない」という結論が生まれるのもここからです。問題は個々の呼び出しが間違っていることではなく、誤差が下流に積み上がることです。海岸沿いの道が計画より40m長く出れば、そこから切った区画はすべてずれ、その上の家もすべてずれ、南端の埠頭は海の中に落ちます。

一手ごとにシーンを読み返すエージェントは、それを道の段階で捕まえます。何かがその誤差を継承する前に、です。編集のたびにテストを走らせる、最後にまとめてではなく、というのと同じ規律で、コストも同じです。往復が増え、トークンが増え、全体は遅くなる。それでも見合う理由も同じです。

やり方は、頼むことです。読み返しをプロンプトに書けば、そのセッションの習慣になります。さらに良いのは CLAUDE.md に一度書いておくことです。Claude Code が毎セッションの開始時に読み込むプロジェクトのファイルで、繰り返し言うのに飽きた取り決め——階高、道幅、マテリアルのパレット、そして前のパスが確認されるまで次のパスを始めないという規則——を置く場所です。

パスに分けて進める

村をまとめて頼まないこと。まず道路網を頼み、それを見て、それから区画を頼む。この順序は好みの問題ではありません。各パスは次のパスの入力なので、前のパスであるほど間違いの代償が大きくなります。

パス何を決めるか次に進む前の確認
道路以降すべてが継承する骨格交差点が実際につながっている、総延長が計画どおり
区画建てられる場所と建てられない場所道にまたがる区画がない、敷地外に出ていない
建物ボリューム、シルエット、間口階高の取り決めが統一、各ファサードが自分の道を向いている
ドレッシング歩道、街灯、樹木、柵、看板交差なし、浮きなし、間隔が一定
ライティング時刻、太陽角度、空影の向きが揃う、重要なものが暗闇に残っていない

パス分けはコンテキストの問題も解きます。長いビルドはツールの返り値でモデルのコンテキストウィンドウを埋めます。あなたが求めた読み返しは、一つ残らずモデルが抱え続けるテキストです。/context はウィンドウを何が占めているかを示し、/compact は会話を要約して空きを作ります。どちらもパスとパスの間が安全な実行タイミングです。シーンはエディタの側にあって会話の中にはないからです。捨てられる半分は会話のほうです。

うまくいかないとき

議論するより地面に印をつける

広場になるはずの場所にエージェントが何度も家を置くなら、三度目の言い換えは解決になりません。Cuberta では何か言う前に、どこに建ててよくてどこに建ててはいけないかを印で示せます。建築禁止領域はお願いではなく制約です。境界を三十秒ドラッグするほうが、「そこじゃない」を三往復するより早い。

セッションではなく一手を取り消す

パスを一つ失敗したときの反射は、シーンを消してもっと良いプロンプトでやり直すことです。それは五番目を直すために、正しかった四つのパスを捨てる行為で、やり直した回は数が減るのではなく別の間違いをします。最後の一手を取り消し、何が悪かったのかを一文で言い——「家が海を向いています。自分の区画が面している道を向かせてください」——そのパスだけをやり直させる。コンテキストが尽きたら会話を再起動する。シーンを作り直すことは、ほぼありません。

「完成しました」と言われたら

要約ではなく数字を求めてください。建物は何棟か。全体のバウンディングボックスは。道路中心線から5m以上離れている建物はいくつか。地面より下にあるオブジェクトはあるか。本当に確認したエージェントは、数回のツール呼び出しでシーンから答えます。推測しているエージェントは、数字が一つも入っていない自信たっぷりの段落を返します。それが見分け方です。

コスト、時間、そして代わりにならないもの

時間は数分です。数秒ではなく、手作業のブロックアウトが食う午後いっぱいでもありません。その数分は席を外すのではなく舵を取るために使うべきです。監督があって初めて出力が使い物になる、というのがここまでの主張そのものだからです。

本当のコストはトークンです。ツール呼び出しは往復ともトークンを消費し、この記事が一節を割いて擁護した検証こそが高いほうの半分です。読み返しは、その結果がモデルのコンテキストに戻ってきて初めて意味を持つからです。エディタのツール定義は、あなたが一文字打つ前からウィンドウの一部を占めています。どれも隠されてはいません。Cuberta 自体は無料で、同梱のモデルやマテリアルはオフラインで動きますが、モデルへのアクセスはご自身のものを持ち込む形なので、トークンの請求はあなたのもので、ウィンドウの埋まり具合は /context で見られます。

最後が正直な限界です。これはレベルデザイナーの代わりにはなりません。代わりになるのはデザイナーの最初の二日です。ブロックアウト、誰も手作業でやりたくない三百回の配置、通りの両側に25mおきに街灯を並べるパス。代わりにならないのは、この場所が何のためにあるのかという判断です。視線をどこに落とすか、どの通りを必要以上に狭く感じさせるか、何をあえて欠けさせるか。デザイナーとエージェントが揃えば、批評する価値のある版に一週間ではなく一時間で到達します。デザイナーがいなければ、技術的には正しくて何も語らない村ができあがります。

これがこの移植の公平な要約でしょう。Claude Code が持ち込むのは、忍耐と、小さく正しい判断を四百回下す意欲と、自分の仕事を確かめる習慣です。意見は持ち込みません。そこは今も人間の仕事です。