# AI と 2 か月で VRChat ゲームワールド「Takt of Tact」を作った話 ― 開発ガイドと導入手順
AI 集会の LT「AI と 2 か月で VRChat ゲームワールドを作ったら 10 万 visits になった話」の補足記事です。
発表で話しきれなかった **導入手順** と、開発中に AI(Claude Code)と一緒に育てた **ルール集** をまとめました。
– 発表スライド(PDF): ai集会のDiscordに貼ってあります
– ワールド: [Takt of Tact](https://vrchat.com/home/world/wrld_21caa170-53db-4ec2-bc77-fe1dc4ce43f7)
ゲームデザインの深い話や課金アイテムの設計は、別の記事で書く予定です。
—
## 結果の数字
| | |
|—|—|
| 作り始め → β公開 | **35 日** |
| 作り始め → 正式公開 | **約 2 か月(63 日)** |
| 正式公開 → 10 万 visits | **16 日** |
| visits(2026-10-12 時点) | 約 12.7 万(正式公開ワールドのみ) |
| コミット数 | 2,159(うち 99% が AI との共同作業) |
| アップデート | 39 版(β 24 版+正式公開から 1 か月で 15 版) |
## 先にお伝えしたいこと:AI を使った範囲
| | 担当 |
|—|—|
| 3D モデル・イラスト | **自作+購入アセット(生成 AI 不使用)** |
| └ 例外 | アイテム枠の装飾のみ AI 出力 |
| プログラム | AI(シェーダー修正も) |
| セリフ | AI が下書き → 人が監修(日本語・英語) |
| 翻訳(英・中・韓) | AI(英語は人が確認。中国語・韓国語は AI 翻訳のまま) |
指揮棒のモデルはすべて自作、マップやモンスターは購入したアセットです。
シェーダー修正は「買ったアセットを VR で正しく映すためのコード修正」で、見た目は元のアセットのままです。
## 去年の自分との違い
| | KatanaSurvivor(2025) | Takt of Tact(2026) |
|—|—|—|
| AI の使い方 | Gemini に相談して、コードは自分で書く | Claude Code が Unity を直接さわって実装する |
| 開発期間 | 1 か月 | 約 2 か月 |
| 想定プレイ時間 | 2 時間 | 50 時間 |
| visits | 約 4.8 万 | 約 12.7 万 |
変わったのは道具です。AI が Unity エディタを直接操作できるようになったことで、自分の仕事は
「コードを書く」から「仕様書を書いて、判断して、VRChat で確かめる」に変わりました。
実は今年の 2〜3 月に一度、このゲームを作りかけて止まっています。理由のひとつが
「使いたいエフェクトのアセットが VR に対応していない(右目と左目でパーティクルの出る場所が全然ちがう)」ことでした。
7 月に Claude Code で再挑戦したところ、開発 1〜2 日目でシェーダーを直してくれて、そのまま最後まで作りきれました。
—
## 導入手順
### 必要なもの
– **Unity 2022.3.22f1**(VRChat SDK が指定するバージョン)と **VRChat Creator Companion(VCC)**
– **Claude Code**(有料プラン。私は Max 20x を使いました)
– **Python 3.10 以上** と **uv**(Unity MCP のサーバーを動かすのに使う)
– **Node.js**(UdonSharp 用のスキルを入れるのに使う)
### 1. Claude Code を入れる
公式の手順に従ってインストールします: https://code.claude.com/docs
Unity プロジェクトのフォルダで `claude` を起動すれば、そのプロジェクトの作業相手になります。
### 2. Unity MCP を入れる(AI が Unity を直接さわれるようにする)
Unity 公式の MCP は Unity 6 以降が必要で、VRChat の Unity 2022.3 では使えません。
そこで、ローカルで動く **CoplayDev の MCP for Unity** を使います(私は v10.0.1)。
1. uv を入れる(PowerShell)
“`
winget install –id=astral-sh.uv -e
“`
2. Unity の Package Manager → **Add package from git URL** に次を貼る
“`
https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#v10.0.1
“`
3. Unity のメニュー `Window > MCP for Unity` の Connect タブで **Start Server**
(Transport: HTTPLocal / `http://127.0.0.1:8080`)
4. プロジェクトのルートに `.mcp.json` を置く
“`json
{ “mcpServers”: { “UnityMCP”: { “type”: “http”, “url”: “http://127.0.0.1:8080/mcp” } } }
“`
5. Claude Code を再起動して、プロジェクトの MCP サーバーを承認する
6. 動作確認: 「原点に Cube を作って Rigidbody を付けて」と頼んで、シーンに出てくれば成功
### 3. UdonSharp 用のスキルとチェックを入れる
UdonSharp は普通の C# と違って使えない書き方が多いので、コミュニティ製のスキル
[niaka3dayo/agent-skills-vrc-udon](https://github.com/niaka3dayo/agent-skills-vrc-udon) を入れています。
“`
npx skills add niaka3dayo/agent-skills-vrc-udon
“`
`.cs` を書き換えるたびに自動で走る静的チェック(`List
ただしこれはパターン検査で、本物のコンパイルではありません。最終確認は Unity のコンパイル結果で行います。
### 4. CLAUDE.md に「現場のルール」を書く
`CLAUDE.md` は、Claude Code が毎回最初に読むルールブックです。
**破ると取り返しがつかないことだけ**を短く書き、ルールには「なぜか(いつ何が起きたか)」を 1 行添えます。
理由のないルールは「この場合は例外だろう」と判断されがちだからです。
Takt of Tact で育てたものを縮めたひな形です。`<>` の中は自分のプロジェクトに合わせてください。
“`markdown
# CLAUDE.md — <ワールド名>(VRChat ワールド)
Unity + UdonSharp + VCC。全体像は Docs/ProjectMap.md を最初に読むこと。
## 環境前提
– Unity <版> / VRChat SDK3 Worlds(VCC 管理。.unitypackage で入れない)
– スクリプトは UdonSharp のみ(MonoBehaviour は VRChat 上で動かない)
– ターゲット:
## UdonSharp で使えないもの
– List
– static メソッドを持つユーティリティクラス(const だけの static class は可)
## ⚠ コンパイルは通るのに VRChat でだけ止まるもの
– Unity コンポーネントの設定値を Udon から実行時に書かない → prefab やアセットに焼く
– (byte) などの縮小キャストは範囲外で例外 → その部品が止まる。`& 0xFF` でマスクしてから
– [UdonSynced] 配列は null や短い長さで届くことがある → 受信時に長さを直してから使う
– 新しい同期・API を入れたら「要 VRChat 実機確認」と書く。エディタで動いただけで完成扱いしない
## 値と配線
– 数値・文言は Inspector に焼かない(コードを直しても古い値が勝つ)。コードの定数か CSV に置く
– Inspector の参照は手でつながない。エディタ拡張(Setup メニュー)で毎回同じ結果になるようにつなぐ
## パフォーマンス
– Update はワールドに 1 本(GameManager)だけ。各ギミックは Tick(now) を出して呼ばれる側になる
– サーバー時刻の取得は 1 フレーム 1 回
## Git
– テキストだけ管理。重いアセットは VCC の Make Backup(クラウド同期)で守る
– git add -A 禁止。変更したファイルを明示して add する
## 確認の要否
– 削除・上書き・大きなシーン変更・履歴の書き換え・外部への公開は、やる前に聞く
– それ以外は前提を置いて進め、最後に【今回置いた前提】を列挙する
“`
—
## うまく回すコツ
### 「エディタで動いた」は「VRChat で動く」の証明にならない
Udon は例外が 1 回出ると、その部品が二度と動かなくなります。しかもエディタでは再現しないことが多い。
新しい同期や API を入れたら必ず「要 VRChat 実機確認」と書かせ、実機で確かめる台帳(実機試験表)を作りました。
### 失敗を仕組みに変える
AI は VRChat 固有の罠を最初から知っているわけではありません。そこで次のルールで回しました。
– 1 回目の失敗 → AI のメモリに「症状・原因・対処」を記録する
– 2 回目 → CLAUDE.md に書くか、機械で検出するチェックを作る
– 繰り返す作業 → 手順書(スキル)にする
例えば「セーブデータの鍵になる ID が書き換わっていないか」は、コミット前に自動でチェックしています。
チェックを機械に任せられたので、細かいアップデートを短い間隔で何度も出せました。
### 配線は手でやらない
Inspector で参照をドラッグしてつなぐ作業は、AI に任せると不安定になりがちです。
「配線するエディタ拡張(Setup メニュー)を AI に書かせて、それを実行する」形にすると、何度やっても同じ結果になります。
全部の配線を順番に流す `Wire All` と、配線漏れを調べる `Validate` を用意して、ビルド前に必ず流していました。
### 開発者だけが見る画面ほどリッチにする
武器・モンスター・セリフなどの表データは CSV にまとめ、ブラウザで編集する専用の HTML エディタを AI に作らせました
(表 39 種・エディタ 24 本)。保存してボタンを 1 つ押せばゲームに反映されます。
プレイヤーは見ない画面ですが、見た目が良いと触るのが楽しく、モチベーションの維持にも効きました。
### Unity MCP の作法
– MCP の呼び出しは 1 つずつ順番に(並べて投げると接続が切れやすい)
– Play 中に強制コンパイルしない(Unity が落ちることがある)
– 「エラー 0 件」は Unity の `Editor.log` で確かめる(コンソール読み取りは取りこぼすことがある)
– ユーザーが保存していないシーンの変更を捨てさせない
### 使用量の節約
Max 20x でも 1 週間の使用量の枠がかつかつでした。
出力の質が高い Fable に設計(プラン)を書かせ、実装は Opus に任せて使用量を浮かせていました。
—
## AI にまだ任せられないこと
– **同期の取捨選択**: 同期処理そのものは仕様どおりに作れます。でも「何をどの速さで同期するか」「どこはズレても許せて、どこは完全に一致させたいか」はゲーム体験の判断で、人が決める必要がありました
– **UI の設計**: 「この画面で何をしたいか」を決め、どの順番で何を見せるかは人の仕事でした
– **実機試験**: AI もテストはかなりしてくれますが、最後は人が VRChat で確かめるしかありません
– **セリフの監修**: 6 つの性格・呼び方・価値観を決めて AI にセリフの下書きを作らせました(4 言語で約 8,000 通り)。
そのうち日本語と英語の約 4,000 通りは人が目で確認しています。監修は必須でした
まとめると、AI に任せて良かったのは「量」と「機械的な正しさ」、人に残ったのは「体験のための取捨選択」でした。
## お金の話(ちらっと)
– AI 代: Claude の Max 20x(月 200 ドル)× 2 か月で約 6 万円
– 売上: ワールド内の販売が正式公開から 1 か月で約 84,000 クレジット(1 クレジット ≒ 0.005 ドル換算で約 6.3 万円)
– アセット代: 約 4 万円
アセット代まで入れるとちょっと赤字ですが、AI 代はほぼ回収できました。
## おわりに
質問があれば【連絡先(X など)】までどうぞ。






