Unity のプロジェクトフォルダは、放っておくとすぐ 2GB を超えます。そのまま git に入れると、clone にも push にも耐えられません。
実際に使っている2本ぶんの数字がこれです。
1.9GB
Library(除外)
Unity が作り直せる
160
追跡しているファイル
うち .meta が70
1MB
リポジトリの大きさ
もう1本は 1.9MB
0個
画像・音声ファイル
LFS が要らない理由
除外するのは「Unity が作り直せるもの」
判断はこれだけです。消してもエディターが作り直せるものは入れない。
除外したフォルダ
土台は GitHub 公式の Unity.gitignore で足ります。そこから、このプロジェクトでは2行だけ足しました。
# Claude Code の個人設定(共有する .claude/settings.json は含める)
.claude/settings.local.json
# 計測用に一時的に置くページ(ビルドのフォルダは元から対象外)
measure.html
⚠️ 除外したフォルダは git が掃除してくれない
Builds/ を除外していると、古いビルドがいつまでも残ります。 実際に、前のビルドの残骸が入ったままのフォルダをまるごとアップロードして、古い中身を本番に配ってしまいました。git の管理外にあるものは、自分で消すか、公開用のスクリプト側で検査する必要があります。
.meta は必ずコミットする(追跡ファイルの44%)
Unity は、ファイル同士の参照をパスではなく .meta に書かれた GUID で解決します。スクリプトをコンポーネントに割り当てた情報も、この GUID 経由です。
.meta を除外すると、別の端末で開いたときに参照が全部切れます。追跡している160ファイルのうち70ファイル、全体の44%が .meta でした。数は多いですが、どれも小さいテキストです。
逆に、除外したフォルダの中の .meta は要りません(そもそも生成されません)。
シーンとプレハブは、AI に直接書き換えさせない
ここがいちばん効きました。
.unity や .prefab は、GUID と入れ子の参照を持つ YAML です。人が読める形ではありますが、AI に「このオブジェクトを足して」と言ってファイルを書き換えさせると、静かに壊れます。 壊れ方も分かりにくい(開くと空のシーンになる、参照だけ外れる、など)。
そこで、シーンをコードから作り直すようにしました。
[MenuItem("Wallflip/シーンを作り直す")]
public static void CreateScene()
{
var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
var camGo = new GameObject("Main Camera", typeof(Camera));
camGo.tag = "MainCamera";
var cam = camGo.GetComponent<Camera>();
cam.orthographic = true;
// …(以下、必要なオブジェクトを同じように足していく)
この形にすると、こうなります。
シーンを手(AI)で書き換える
シーンをコードから作り直す
実際、コミットされている .unity は254行あります。これは「スクリプトの出力結果」であって、正本はスクリプトのほうです。
シーンファイルは成果物として扱う。正本はそれを作るコードに置く。
LFS が使えない置き場なら、素材を持たない作りにする
このプロジェクトの git の置き場は自前のサーバーで、git は 1.8.3 系・git-lfs 無しです。大きいバイナリを入れる前提がありません。
置き場を変える手もありましたが、先に作り方のほうを変えました。画像も音声もファイルを持たず、図形と波形をコードで作る方式です(素材ファイルなしで音と絵を作る)。結果として、LFS が必要になる場面自体が来ていません。
素材を持つ前提で進める
- 置き場を LFS 対応のものに移す
- 拡張子ごとに LFS の設定を管理する
- 別端末の clone が重くなる
この段階で選んだ方
- 素材ファイルを持たない作りにする
- リポジトリは 1MB と 1.9MB のまま
- 素材が増える段階になったら、そのとき置き場を見直す
ゲームは、サイトとは別のリポジトリにした
このサイトの本体(Next.js とドキュメント)と、ゲームは別のリポジトリにしています。サイト側の .gitignore の1行目が /games/ です。
理由は3つあります。
- 1
デプロイに巻き込まない
サイトは push でデプロイまで走らせるので、ゲームの作業中のコミットを混ぜたくない - 2
履歴を分ける
ゲームの履歴は「その1本の作業記録」。サイトの記事の履歴と混ざると、あとから読めない - 3
置き場を変えやすくする
素材が増えてゲームだけ別の置き場に移す、という判断がしやすい
別の端末で作業を始めるときは、サイトを clone してから、games/ の下に各ゲームを clone します。ここだけ手順が1つ増えますが、別々に動かせる利点のほうが大きいと判断しました。
まとめ
- 除外の基準は「Unity が作り直せるか」。
Library/は 1.9GB あるが入れなくてよい .metaは必ずコミットする(参照が GUID で繋がっている。追跡ファイルの44%)- 🔴 シーンとプレハブのファイルは AI に直接書かせない。 コードから作り直す形にすると、差分がレビューできて壊れても作り直せる
- LFS が使えない置き場なら、素材を持たない作りにするほうが早い
- 除外したフォルダは git が掃除しない。ビルドの残骸を配ってしまう事故は、公開用のスクリプト側で止める