Unityプロジェクトをgitで管理して、2つのAIに同時に作らせる
同じ仕様書で Claude Code と Codex に並行でゲームを作らせるために、git worktree でフォルダを2つに分けました。Unity の .gitignore と .meta の扱い、エディターを2つ立てたときのポート、スクショがアセットとして紛れ込む罠まで、実際に踏んだところを残します。
公開 2026年9月16日
この記事の要点5 points
- git worktree なら同じリポジトリのまま、別ブランチを別フォルダに展開できる。 AI を2つ同時に走らせる土台になる。
- Unity エディターを2つ開くと、操作用のローカル API のポートが 7800 と 7801 に分かれる。 必ずプロジェクトを指定して叩く。
- Library / Temp / Builds はコミットしない。 追跡しているのは126ファイルだけだった。
- .meta は必ずコミットする。 落とすと参照が切れる。
- AI に撮らせたスクショが Assets の下に入り、そのまま git の対象になった。 相対パスは Assets 基準だった。
目次5章
検証した環境最終確認 2026年9月16日
- Unity 6.6(6000.6.0f1)
- git(Windows 版)・Git Bash
- Unity CLI 1.0.0-beta.9 / com.unity.pipeline 0.7.0-exp.1
- Windows 11
書いてあるのは、この環境で実際に試した結果です。ツールの仕様や料金は変わるので、重要な判断の前には公式の情報も確認してください。
同じ仕様書で、Claude Code と Codex に同じゲームを作らせて比べる。これをやるには、同じ起点から始まる作業フォルダが2つ要ります。
クローンを2つ作るのは面倒です。git worktree を使いました。
2
作業フォルダ
履歴は1つのまま
7801
2つ目のエディターのポート
1つ目は 7800
126
git が追跡するファイル
フォルダ全体は数万
0回
AI がしたコミット
3回の無人実行で
worktree で2つ目のフォルダを作る
git worktree add ../breakout-codex -b codex/v1 6110383
これで、6110383(仕様書だけが入ったコミット)を起点にした codex/v1 ブランチが、隣のフォルダに展開されます。履歴は1つのままなので、あとで両方のブランチを並べて見られます。
STEP 01
起点コミット
仕様書だけが入った状態
STEP 02
claude/v1
元のフォルダ・エディター①
STEP 03
codex/v1
worktree・エディター②
エディターはフォルダごとに開きます。2つ目のエディターは、操作用のローカル API のポートが自動的に 7801 になりました(1つ目は 7800)。
Unity の .gitignore で何を外すか
Unity が作り直せるものは入れない。
入れない
Library/ … インポート結果のキャッシュ。数GB・環境依存
Temp/ … 実行中の一時ファイル
Builds/ … ビルド成果物(今回は 7〜10MB)
Logs/ UserSettings/ … ログと個人の設定
*.csproj *.sln … Unity が再生成する
必ず入れる
Assets/ の中身 … 本体
.meta ファイル … ファイルと GUID の対応。落とすと参照が切れる
ProjectSettings/ … ビルド・入力・品質の設定
Packages/manifest.json … 使っているパッケージの一覧
結果として、このブロック崩しで git が追跡しているのは126ファイルです。Unity プロジェクトのフォルダを丸ごと見ると数万ファイルありますが、意味があるのはこれだけでした。
AI に触らせたときに紛れ込んだもの
スクショが Assets の下に入った
Unity CLI の capture_game_view で、AI にゲーム画面を撮らせました。保存先に Temp/shots/01.png を指定したところ、実際に保存されたのは Assets/Temp/shots/01.png でした。相対パスは Assets/ 基準です。
しかもプロジェクトのフォルダ外は指定できません。
Pipeline server returned 400 Bad Request: Parameter Validation Failed. Path '…' is outside the project root
スクショは必ず Assets/ の下に落ちる。
そのまま git の対象になり、アセットとしてインポートもされます。撮ったら消すか、.gitignore に入れておく必要があります。
AI はコミットしない
指示文に書かなければ、エージェントはコミットしません。今回、無人実行を3回やってコミットは0回でした。作業が中断したとき、履歴は空のままです。
保存するのは人間の仕事として組んでおくのが安全です。
worktree の片付けで踏んだところ
実行が中断した2回目の状態を残したくて、フォルダを別名に移そうとしました。
$ git worktree move ... Permission denied
原因は単純で、自分のシェルの作業フォルダがその中にあったからです。Windows は開いているフォルダを移動できません。リポジトリのルートに戻ってから実行したら通りました。
AI エージェントに操作させていると、「どこにいるか」を見落としがちです。移動・削除の前にルートへ戻す、と決めておくと楽です。
まとめ
git worktreeなら、同じ履歴のまま作業フォルダを2つに分けられる。AI を並行で走らせる土台になる- エディターを2つ開くと操作用のポートが分かれる。CLI は必ずプロジェクトを指定して叩く
LibraryTempBuildsは入れない。.metaは必ず入れる- AI に撮らせたスクショは
Assets/の下に落ちる。git に紛れ込む - コミットは人間がやる。AI は指示しなければ1回もしない
FAQ
よくある質問
なぜクローンを2つ作らずに worktree なのですか?
履歴が1つのままだからです。あとで2つのブランチを見比べたり、同じ起点から作り直したりするのが簡単になります。クローンを分けると、比較のたびにリモート越しの操作が要ります。
Library フォルダはコミットしないと、2つ目のフォルダで作り直しになりませんか?
なります。2つ目のエディターは Library の作成に数分かかり、メモリも2GB ほど使いました。それでもコミットすべきではありません。環境に依存する生成物で、サイズも桁が違います。
Git LFS は要りますか?
画像や音を入れるなら要ります。ただし置き場所のサーバー側が古いと使えないことがあるので、素材を増やす前に置き場所の git のバージョンを確認しておくほうが安全です。今回の題材は画像素材ゼロなので、まだ入れていません。
シーンやプレハブの衝突はどうしますか?
Unity 付属の UnityYAMLMerge を mergetool に設定します。今回は2つのブランチを合流させない方針(別々の成果物として残す)なので、実際には使っていません。
エディターを2つ開いて重くないですか?
重いです。Library の作成中は特に食います。ただ、片方がビルド中でももう片方でテストを回せるので、待ち時間は減りました。
SOURCES
出典
- 01Unity.gitignoreGitHubUnity 用 .gitignore の元ネタ
- 02Smart mergeUnity Documentationシーン・プレハブの衝突を解決する UnityYAMLMerge の設定
この記事は役に立ちましたか?
NEXT
あわせて読む
Claude CodeとCodexに同じ仕様書でブロック崩しを作らせた
同じ仕様書1枚を Claude Code(Opus 5)と Codex(GPT-5.6 Sol)に渡し、Unity 6.6 でブロック崩しを作らせて比べました。かかった時間、テストの数、詰まった場所、消えた利用枠まで、実測値をそのまま載せています。
AIエージェントを放置して走らせると何が起きるか(3回の実測)
同じ指示文で Codex を3回、最長60分の無人実行にかけました。1回目は4秒で死に、2回目は自分のビルドを6分で強制終了してPCのスリープで中断、3回目でようやく42分で完走。放置する前に決めておくべきことを、起きたことそのままで残します。
WindowsでAIにUnityを操作させて踏んだ落とし穴14個
Unity CLI と Claude Code・Codex で実際にゲームを1本作る間に踏んだ問題を、症状・原因・対処の形で残します。PowerShell で引用符が消える、テストが0件になる、PC のスリープで打ち切りタイマーが効かない、など。