Version: 2023.1
言語: 日本語
パッケージの状態とライフサイクル
グローバルキャッシュ

依存関係と競合の解決

Package Manager ウィンドウで作業するとき、複数のソース (レジストリ、ローカル フォルダー.tgz ファイルGit URL) からパッケージをインストールすることができます。しかし、Package Manager は、これらのソースからパッケージをシームレスにインストールします。ただし、Package Manager は、これらのソースからパッケージをシームレスにインストールしますが、最初に一連の計算を行って、どのバージョンをインストールするか、また、それをサポートするのにインストールが必要な他のパッケージやバージョンを決定する必要があります。

直接的な依存関係

Package Manager ウィンドウでインストールするパッケージバージョンを選択すると、プロジェクトマニフェスト に “依存関係” を追加することになります。これは “プロジェクトが動作するために特定のパッケージの特定のバージョンが必要である” という宣言です。プロジェクトに依存関係を追加するには、<project-root>/Packages/manifest.json ファイルの dependencies プロパティに package-name@package-version という形式でパッケージとバージョンへの参照を追加します。これは、(プロジェクトがこれに直接依存することから) “直接的” 依存関係と呼ばれます。

間接的な依存関係

パッケージも、機能するために他のパッケージを必要とすることがあります。これは “間接的” または “推移的” 依存関係と呼ばれます。パッケージの開発者は、開発中にこれらの依存関係をパッケージマニフェストファイルの dependencies プロパティに加えます (<package-root>/package.json)。例えば、以下の図では、alembic@1.0.7 パッケージが timeline@1.0.0 パッケージに依存しているため、timeline パッケージは “間接的” 依存関係になります。一方、プロジェクトは cinemachine@2.6.0alembic@1.0.7 に依存しているため、これらは両方とも “直接的” 依存関係となります。

直接的な依存関係と間接的な依存関係を示す図。

バージョンオーバーライド

依存関係としてパッケージのバージョンを追加した場合、そのバージョンは必ずしも Package Manager がインストールするバージョンではありません。これは、直接/間接を問わずプロジェクト内の全ての依存関係が考慮される必要があるためです。例えば、以下のケースでは、リクエストされた XR Plugin Management パッケージはバージョン 4.0.3 でしたが、情報メッセージ (B) が示しているように、別のパッケージがより高いバージョンに依存していたため、実際にインストールされたバージョンは 4.0.6 です。

詳細ペインの情報ボタン (A) をクリックすると、なぜこのバージョンがインストールされたかを説明するテキストボックス (B) が表示されます。
詳細ペインの情報ボタン (A) をクリックすると、なぜこのバージョンがインストールされたかを説明するテキストボックス (B) が表示されます。

依存関係グラフ

Package Manager は、一度に 1 つのパッケージバージョンしかインストールできないため、依存関係グラフ を構築する必要があります。これは、プロジェクトの全ての直接的依存関係と間接的依存関係のリストです。依存関係グラフは、各パッケージのどのバージョンをインストールするかを決定します。

ロックファイル

Package Manager は、全てのバージョン競合の解決に成功すると、解決結果を ロックファイル 内に保存します。これにより、決定性が確保され (したがって毎回同じパッケージが確実にインストールされるようになり)、依存関係グラフを再度計算するのにかかる時間とリソースが削減されます。


パッケージの状態とライフサイクル
グローバルキャッシュ