Web開発経験者が学ぶPico VR開発:Unityプロジェクトにおけるバージョン管理(GitとLFS)
Pico VR開発に興味をお持ちのWebエンジニアの皆様、こんにちは。この「Pico VR開発スタートガイド」では、皆様の既存のプログラミングスキルを活かしながら、新しいVR開発の世界へスムーズに入っていただけるよう、基礎から応用まで様々な情報を提供しています。
この記事では、Unityを使ったPico VRプロジェクト開発において非常に重要となる「バージョン管理」について解説します。Web開発でGitを使われている方にとっては馴染み深い概念ですが、ゲーム開発特有のファイル形式やプロジェクト構造に対応するためには、いくつか押さえておくべきポイントがあります。特に、大きなバイナリファイルを効率的に扱うための「Git LFS (Large File Storage)」の活用は必須と言えます。
なぜゲーム開発にバージョン管理が必要か
Web開発と同様に、ゲーム開発においてもバージョン管理はプロジェクトの健全な進行に不可欠です。
- 変更履歴の追跡: いつ、誰が、どのような変更を行ったかを記録できます。
- 過去の状態への復旧: 問題が発生した場合や、特定の機能が不要になった場合に、簡単に過去の安定した状態に戻すことができます。
- 並行開発: 複数の開発者が同時に異なる機能を開発し、後からそれらを統合することができます。
- 実験的な機能開発: メインの開発ラインに影響を与えることなく、新しいアイデアや機能を試すためのブランチを作成できます。
Web開発におけるコード(テキストファイル)の管理と同じように、Unityプロジェクトのファイルもバージョン管理システムで管理することで、これらのメリットを享受できます。しかし、Unityプロジェクトにはコードファイルだけでなく、3Dモデル、テクスチャ、音声、シーンファイル、Prefabといった様々な種類のファイルが含まれており、その中にはサイズが非常に大きいバイナリファイルが多く存在するという特徴があります。
ゲーム開発におけるGitの課題とGit LFS
標準的なGitは、テキストファイルの差分管理に非常に長けています。しかし、バイナリファイルに関しては、差分を効率的に記録・管理することが苦手です。バイナリファイルに変更があるたびに、Gitはファイル全体をリポジトリに記録しようとします。これにより、リポジトリのサイズが急激に肥大化し、クローンやフェッチといった操作に時間がかかるようになる、ストレージ容量を圧迫するといった問題が発生します。特にUnityプロジェクトでは、小さな修正でもシーンファイルやPrefabファイルといったバイナリファイルが大きく変更されることが頻繁にあります。
ここで登場するのがGit LFS (Large File Storage)です。Git LFSは、大きなバイナリファイルをGitリポジトリ本体には直接保存せず、専用のリモートストレージに保存するようにするためのGitの拡張機能です。Gitリポジトリには、バイナリファイルの実体ではなく、そのファイルへのポインタ(小さなテキストファイル)だけが記録されます。これにより、Gitリポジトリ本体のサイズを小さく保ちつつ、バイナリファイルを含むプロジェクト全体をGitのワークフローで管理することが可能になります。
Web開発でGitを使った経験がある方なら、Gitの基本的なコマンドや概念(コミット、ブランチ、プル、プッシュなど)は理解されていると思います。Git LFSは、その既存のGitワークフローにスムーズに統合されるように設計されています。
UnityプロジェクトでGitとGit LFSをセットアップする手順
ここでは、UnityプロジェクトをGitとGit LFSで管理するための基本的なセットアップ手順を説明します。
1. GitとGit LFSのインストール
Gitがインストールされていない場合は、まずGitをインストールしてください。多くのOSで利用可能です。 Git LFSも別途インストールが必要です。以下の公式サイトからダウンロードできます。
インストール後、ターミナルやコマンドプロンプトで以下のコマンドを実行し、Git LFSを有効化します。
git lfs install
2. Gitリポジトリの初期化
UnityプロジェクトのルートディレクトリでGitリポジトリを初期化します。
cd path/to/your/unity/project
git init
3. .gitignoreファイルの設定
Unityプロジェクトには、一時ファイル、ライブラリファイル、ビルド生成物など、バージョン管理に含めるべきではないファイルやディレクトリが多数存在します。これらを無視するために.gitignoreファイルを適切に設定することが重要です。
Unity用の.gitignoreファイルのテンプレートは、GitHubなどで公開されています。例えば、Unityの公式ドキュメントや多くのボイラープレートリポジトリで提供されています。基本的な内容は以下のようになります。
# Unity generated files
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/Assets/AssetStoreTools*
# Autogenerated VS/MD solution and project files
ExportedObj/
.consulo/
.idea/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.lslic
*.ghuser
*.vspscc
*.vsscc
*.vssscc
*.controller
# Rider
*.csproj.DotSettings
*.csproj.DotSettings.user
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Logs
*.log
# MemoryCaptures can get large and are rarely needed for debugging.
# uncommenting the next line is recommended:
# MemoryCaptures/
# Uncomment this line if you don't want to store the unity executable scripts
# in the git:
# ScriptTemplates/
# Virtual reality SDKs
# NDK
# SDK
# Build
# Any build artifacts (e.g., apk, exe, etc.)
# *.apk
# *.exe
# *.app
# *.ipa
# Add any other files/folders you wish to ignore
Unityプロジェクトのルートディレクトリに.gitignoreという名前でこのファイルを作成し、上記の内容をコピー&ペーストしてください。
4. .gitattributesファイルの設定とGit LFSの追跡対象指定
Git LFSで追跡したいバイナリファイルを指定するために、.gitattributesファイルを作成します。このファイルに、どの拡張子のファイルをGit LFSで管理するかを記述します。
例えば、UnityプロジェクトでよくLFSの対象となるファイル拡張子は以下の通りです。
.unity(シーンファイル).prefab(プレハブファイル).asset(アセットファイル、設定など).mat(マテリアルファイル).fbx,.obj,.blend,.max,.dae(3Dモデルファイル).png,.jpg,.tga,.psd(テクスチャファイル).wav,.mp3,.ogg(音声ファイル).anim(アニメーションクリップ).controller(Animator Controller)
これらのファイルをGit LFSで追跡するには、.gitattributesに以下のように記述します。
*.unity filter=lfs diff=lfs merge=lfs -text
*.prefab filter=lfs diff=lfs merge=lfs -text
*.asset filter=lfs diff=lfs merge=lfs -text
*.mat filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.obj filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -text
*.max filter=lfs diff=lfs merge=lfs -text
*.dae filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.anim filter=lfs diff=lfs merge=lfs -text
*.controller filter=lfs diff=lfs merge=lfs -text
# Optional: specify specific directories if needed
# Assets/Models/*.fbx filter=lfs diff=lfs merge=lfs -text
Unityプロジェクトのルートディレクトリに.gitattributesという名前でこのファイルを作成し、上記の内容(追跡したいファイルに合わせて適宜調整)を記述してください。
または、コマンドラインで追跡対象を指定することもできます。例えば .fbx ファイルを追跡するには:
git lfs track "*.fbx"
このコマンドは、指定したパターンに対応する行を自動的に.gitattributesに追加します。
5. 最初のコミットとリモートへのプッシュ
.gitignoreと.gitattributesファイルを作成・編集したら、これらをステージングし、コミットします。
git add .gitignore .gitattributes
git commit -m "Add gitignore and gitattributes for Unity and LFS"
その後、プロジェクトの全てのファイル(.gitignoreで無視されるものを除く)をステージングし、最初のコミットを行います。
git add .
git commit -m "Initial commit of Unity project"
このコミットに含まれるLFS追跡対象ファイルは、Git LFSによって管理されます。最後に、リモートリポジトリ(GitHub, GitLab, Bitbucketなど)を作成し、ローカルリポジトリをリモートに紐付けてプッシュします。
git remote add origin <リモートリポジトリのURL>
git push -u origin master # または main ブランチ
これにより、プロジェクトファイルがリモートリポジトリにアップロードされ、LFSで指定したバイナリファイルはGit LFSストレージに保存されます。
チーム開発での注意点
チームでUnityプロジェクトを開発する場合、以下の点に注意が必要です。
.gitignoreと.gitattributesの共有: これらのファイルはリポジトリに含め、チームメンバー全員が同じ設定を使用するようにしてください。これにより、管理対象外のファイルやLFS追跡対象が統一されます。- LFSファイルのプル: プロジェクトをクローンしたり、変更をプルしたりする際に、Git LFSで管理されているファイルが正しくダウンロードされているか確認してください。
git lfs pullコマンドで手動でダウンロードすることも可能です。 - コンフリクトの解消: シーンファイルやPrefabファイルといったバイナリファイルでコンフリクトが発生した場合、テキストエディタでのマージは困難です。UnityにはシーンやPrefabのマージツールが組み込まれています(Unity Hubのインストール時にGit LFSとともにインストールされる場合があります)。これらを活用するか、どちらかの変更を採用するなどの対応が必要になります。Web開発のコードマージとは異なる対応が求められる場合があることを理解しておきましょう。
まとめ
この記事では、Web開発でGitを使った経験のある方を対象に、Pico VR開発のためのUnityプロジェクトにおけるバージョン管理の重要性と、バイナリファイル管理に不可欠なGit LFSの活用方法について解説しました。
Git LFSを適切に設定することで、UnityプロジェクトのGitリポジトリの肥大化を防ぎ、チーム開発を効率的に進めることが可能になります。.gitignoreと.gitattributesファイルを適切に設定し、Unityプロジェクトの特性を理解した上でバージョン管理に取り組んでみてください。
皆様のPico VR開発が、バージョン管理によってより安全で効率的なものになることを願っています。