UnityプロジェクトのGit管理におけるパッケージ更新のトラブルシューティングと再インストール手順

この資料は、UnityプロジェクトのGit管理において、manifest.jsonpackage-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.jsonpackage-lock.jsonはGitで管理すべきです。これにより、全ての開発者が同じパッケージバージョンを使って作業できるようになります。


2. manifest.jsonpackage-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.jsonpackage-lock.jsonの編集と自動更新

3.1 手動編集後のパッケージの再インストール

manifest.jsonpackage-lock.jsonを手動で編集した場合、Unityは次回プロジェクトを開いたときにそれらのファイルを基にパッケージの依存関係を自動的に再確認し、必要なパッケージの再インストールや更新を行います。

  • 自動更新が行われるタイミング
    • プロジェクトを開いた際
    • パッケージマネージャウィンドウを開いてパッケージ情報を更新した際

これにより、手動でパッケージバージョンを変更しても、プロジェクト内で正しいパッケージがインストールされます。

3.2 パッケージキャッシュの破損と再生成

UnityプロジェクトのLibrary/PackageCacheフォルダが破損した場合、Unityは次回プロジェクトを開く際にパッケージキャッシュを再生成します。この時も、manifest.jsonpackage-lock.jsonに基づいて、必要なパッケージが再インストールされます。

  • 手動でキャッシュをクリアする方法
    • Library/PackageCacheフォルダを削除
    • Unityを再起動して自動でキャッシュを再生成

4. Gitでのバージョン管理と競合の解決

4.1 バージョンの競合

複数の開発者がmanifest.jsonpackage-lock.jsonを編集した場合、Gitで競合が発生することがあります。これらの競合は手動で解決する必要があり、各開発者が適切なバージョンを選択し、コミットすることが求められます。

4.2 解決手順

  1. 競合が発生した場合、Gitが競合箇所を表示します。
  2. エディタでmanifest.jsonpackage-lock.jsonを開き、競合を解消します。
  3. 競合を解決後、変更をGitにコミットしてプッシュします。

再起動により、Unityはこれらのファイルの変更を検知し、依存関係の再インストールや更新を自動的に実行します。

なぜ再起動が必要なのか?

Unityはプロジェクトの起動時に、manifest.jsonpackage-lock.jsonを読み込んで、依存するパッケージの整合性をチェックします。通常、Unityが開いている間はこれらのファイルの変更を自動的には反映しません。Gitでブランチを切り替えたり、mainブランチから変更を取り込んだ際に、manifest.jsonpackage-lock.jsonが上書きされた場合は、再起動しないとこれらの変更がUnityに反映されないため、以下のような問題が発生する可能性があります

  • パッケージが最新の状態に更新されない
  • 必要なパッケージがインストールされない
  • 古いパッケージバージョンを使い続けてしまう

再起動することで得られる利点

  • 依存関係の再解決manifest.jsonpackage-lock.jsonが上書きされた場合、再起動によりUnityがこれらのファイルを読み込み、パッケージの依存関係を再解決します。
  • キャッシュの再生成:必要に応じて、パッケージキャッシュも再生成されます。
  • パッケージの自動インストール/更新:Unityが新しい依存関係を自動でインストールし、プロジェクトが期待通りの状態になるように整合性を保ちます。

再起動せずに行う方法(手動のリロード)

もし再起動せずにこれを行いたい場合は、以下の操作を手動で行うことも可能です:

  1. パッケージマネージャを開くWindow > Package Manager からUnityのパッケージマネージャを開き、一覧のリロードを行います。これによって、manifest.jsonの変更が反映され、必要なパッケージがインストールまたは更新されます。
  2. プロジェクトを再インポートAssets > Reimport All を選択して、プロジェクト内のすべてのアセットを再インポートし、依存関係がリフレッシュされるようにします。

まとめ

  • Gitでmanifest.jsonpackage-lock.jsonが更新された場合(mainブランチのマージなど)、Unityを再起動することで、変更が正しく反映され、依存関係の再インストールや更新が行われます。
  • 再起動が面倒な場合は、パッケージマネージャでリロードするか、プロジェクト全体を再インポートすることでも対応可能です。

再起動やリロードを忘れると、パッケージが最新でない状態や整合性のない状態で作業を続けてしまうリスクがあるため、プロジェクトの状態を正しく保つためにこれらの操作は重要です。

5. パッケージマネージャでのバージョン情報の表示

5.1 パッケージマネージャで表示される情報

Unityのパッケージマネージャで表示されるバージョン情報は、実際にインストールされているパッケージのバージョンを反映しています。manifest.jsonpackage-lock.jsonの内容を基に、正確なバージョンがインストールされているかを確認し、パッケージの更新やインストールを行います。

  • パッケージの自動更新:手動でmanifest.jsonを編集した場合や、パッケージキャッシュが破損している場合は、プロジェクトを再起動すると自動的に再インストールや更新が行われます。

6. まとめ

  • .gitignoreの設定:不要なファイルや一時ファイルをGitで管理しないように適切に設定することが重要です。
  • manifest.jsonpackage-lock.jsonの管理:これらのファイルは、プロジェクト内のパッケージ依存関係を他の開発者と共有するため、Gitで管理する必要があります。
  • パッケージの再インストール:手動でファイルを編集した場合やキャッシュが破損した場合、Unityは自動的にパッケージを再インストールしますが、プロジェクトの再起動やパッケージマネージャでの操作が必要です。
  • 競合の解決manifest.jsonpackage-lock.jsonで競合が発生した場合は、手動で解決する必要があります。