UnityプロジェクトのGit管理におけるパッケージ更新のトラブルシューティングと再インストール手順
この資料は、UnityプロジェクトのGit管理において、manifest.json
やpackage-lock.json
の管理、手動での編集、パッケージの自動更新などについての技術的なポイントをまとめたものです。
1. UnityプロジェクトでのGit管理における.gitignore
の設定
UnityプロジェクトをGitで管理する際には、不要なファイルやビルドファイル、一時ファイルがコミットされないように.gitignore
ファイルを適切に設定する必要があります。以下は、一般的な.gitignore
の設定です。
# Unityで生成されるキャッシュやビルドフォルダを無視
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
# 大量のデータを含むMemoryCapturesやRecordingsの無視
/[Mm]emoryCaptures/
/[Rr]ecordings/
# Visual StudioやJetBrains Riderのキャッシュフォルダ、ソリューションファイルなどの無視
.vs/
.gradle/
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unityで生成されるメタファイル
*.pidb.meta
*.pdb.meta
*.mdb.meta
# クラッシュレポートファイルやビルドファイルの無視
sysinfo.txt
*.apk
*.aab
*.unitypackage
*.app
crashlytics-build.properties
# Packed Addressablesや一時ファイルの無視
/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*
/[Aa]ssets/[Ss]treamingAssets/aa.meta
/[Aa]ssets/[Ss]treamingAssets/aa/*
/.history
管理対象とするべきファイル
Unityプロジェクトのパッケージ依存関係を他の開発者と共有するために、manifest.json
とpackage-lock.json
はGitで管理すべきです。これにより、全ての開発者が同じパッケージバージョンを使って作業できるようになります。
2. manifest.json
と package-lock.json
の役割
2.1 manifest.json
manifest.json
は、Unityプロジェクトで使用するパッケージのバージョン指定を管理するファイルです。これにより、プロジェクトが依存しているパッケージやそのバージョンを記録します。
- 例:
{
"dependencies": {
"com.unity.textmeshpro": "2.1.1",
"com.unity.collab-proxy": "1.2.16",
"com.unity.addressables": "1.8.4"
}
}
2.2 package-lock.json
package-lock.json
は、manifest.json
に指定されたパッケージの依存関係を正確に記録するためのファイルです。これにより、パッケージのバージョンや依存関係がプロジェクト内で一貫していることを保証します。
3. 手動でのmanifest.json
やpackage-lock.json
の編集と自動更新
3.1 手動編集後のパッケージの再インストール
manifest.json
やpackage-lock.json
を手動で編集した場合、Unityは次回プロジェクトを開いたときにそれらのファイルを基にパッケージの依存関係を自動的に再確認し、必要なパッケージの再インストールや更新を行います。
- 自動更新が行われるタイミング:
- プロジェクトを開いた際
- パッケージマネージャウィンドウを開いてパッケージ情報を更新した際
これにより、手動でパッケージバージョンを変更しても、プロジェクト内で正しいパッケージがインストールされます。
3.2 パッケージキャッシュの破損と再生成
UnityプロジェクトのLibrary/PackageCache
フォルダが破損した場合、Unityは次回プロジェクトを開く際にパッケージキャッシュを再生成します。この時も、manifest.json
とpackage-lock.json
に基づいて、必要なパッケージが再インストールされます。
- 手動でキャッシュをクリアする方法:
Library/PackageCache
フォルダを削除- Unityを再起動して自動でキャッシュを再生成
4. Gitでのバージョン管理と競合の解決
4.1 バージョンの競合
複数の開発者がmanifest.json
やpackage-lock.json
を編集した場合、Gitで競合が発生することがあります。これらの競合は手動で解決する必要があり、各開発者が適切なバージョンを選択し、コミットすることが求められます。
4.2 解決手順
- 競合が発生した場合、Gitが競合箇所を表示します。
- エディタで
manifest.json
やpackage-lock.json
を開き、競合を解消します。 - 競合を解決後、変更をGitにコミットしてプッシュします。
再起動により、Unityはこれらのファイルの変更を検知し、依存関係の再インストールや更新を自動的に実行します。
なぜ再起動が必要なのか?
Unityはプロジェクトの起動時に、manifest.json
やpackage-lock.json
を読み込んで、依存するパッケージの整合性をチェックします。通常、Unityが開いている間はこれらのファイルの変更を自動的には反映しません。Gitでブランチを切り替えたり、mainブランチから変更を取り込んだ際に、manifest.json
やpackage-lock.json
が上書きされた場合は、再起動しないとこれらの変更がUnityに反映されないため、以下のような問題が発生する可能性があります。
- パッケージが最新の状態に更新されない
- 必要なパッケージがインストールされない
- 古いパッケージバージョンを使い続けてしまう
再起動することで得られる利点
- 依存関係の再解決:
manifest.json
やpackage-lock.json
が上書きされた場合、再起動によりUnityがこれらのファイルを読み込み、パッケージの依存関係を再解決します。 - キャッシュの再生成:必要に応じて、パッケージキャッシュも再生成されます。
- パッケージの自動インストール/更新:Unityが新しい依存関係を自動でインストールし、プロジェクトが期待通りの状態になるように整合性を保ちます。
再起動せずに行う方法(手動のリロード)
もし再起動せずにこれを行いたい場合は、以下の操作を手動で行うことも可能です:
- パッケージマネージャを開く:
Window > Package Manager
からUnityのパッケージマネージャを開き、一覧のリロードを行います。これによって、manifest.json
の変更が反映され、必要なパッケージがインストールまたは更新されます。 - プロジェクトを再インポート:
Assets > Reimport All
を選択して、プロジェクト内のすべてのアセットを再インポートし、依存関係がリフレッシュされるようにします。
まとめ
- Gitで
manifest.json
やpackage-lock.json
が更新された場合(mainブランチのマージなど)、Unityを再起動することで、変更が正しく反映され、依存関係の再インストールや更新が行われます。 - 再起動が面倒な場合は、パッケージマネージャでリロードするか、プロジェクト全体を再インポートすることでも対応可能です。
再起動やリロードを忘れると、パッケージが最新でない状態や整合性のない状態で作業を続けてしまうリスクがあるため、プロジェクトの状態を正しく保つためにこれらの操作は重要です。
5. パッケージマネージャでのバージョン情報の表示
5.1 パッケージマネージャで表示される情報
Unityのパッケージマネージャで表示されるバージョン情報は、実際にインストールされているパッケージのバージョンを反映しています。manifest.json
やpackage-lock.json
の内容を基に、正確なバージョンがインストールされているかを確認し、パッケージの更新やインストールを行います。
- パッケージの自動更新:手動で
manifest.json
を編集した場合や、パッケージキャッシュが破損している場合は、プロジェクトを再起動すると自動的に再インストールや更新が行われます。
6. まとめ
.gitignore
の設定:不要なファイルや一時ファイルをGitで管理しないように適切に設定することが重要です。manifest.json
とpackage-lock.json
の管理:これらのファイルは、プロジェクト内のパッケージ依存関係を他の開発者と共有するため、Gitで管理する必要があります。- パッケージの再インストール:手動でファイルを編集した場合やキャッシュが破損した場合、Unityは自動的にパッケージを再インストールしますが、プロジェクトの再起動やパッケージマネージャでの操作が必要です。
- 競合の解決:
manifest.json
やpackage-lock.json
で競合が発生した場合は、手動で解決する必要があります。
ディスカッション
コメント一覧
まだ、コメントがありません