Version: 2021.1
言語: 日本語
スコープ付きレジストリ
ロックファイル

解決と競合

パッケージをプロジェクトマニフェストに追加すると、Unity はそのパッケージをプロジェクトの 依存関係 とみなします (直接依存)。ただし、 パッケージは他のパッケージへの依存関係を持つこともできます。それにより、そのパッケージを必要とするプロジェクトで間接的な依存関係が作成される場合があります。

ほとんどのプロジェクトでは、ゲームやアプリケーションを開発するために複数のパッケージを必要とします。Package Manager は、レジストリから取得するために要求されたすべてのパッケージバージョンを評価し(直接または間接を問わず)、それらのパッケージバージョンのうちどれをインストールするかを決定しなければなりません。これを行うためには、プロジェクトのすべての 直接と間接の依存関係 を満たす 1 組のパッケージを計算します。プロジェクトの依存関係から始めて、各間接的な依存関係を再帰的に調べ、すべての依存関係情報を収集してから、競合することなく依存関係の要件を満たす 1 組のパッケージを選択します。たとえば、この依存関係図は、4 つの直接依存関係とそれらのすべての間接依存関係を持つプロジェクトを表しています。

プロジェクトの直接的および間接的なパッケージの依存関係図
プロジェクトの直接的および間接的なパッケージの依存関係図

この例で

  • 水色のノードは、プロジェクトの直接の依存関係を表しています。
  • 青のノードは、このプロジェクト内で間接的な依存関係である同じパッケージとバージョンを示しています。
  • 赤いノードは、同じパッケージの 2 つの異なるバージョンを示しており、これは競合しています。

ノート: バージョンで宣言されたパッケージの依存関係のみ解決する必要があります。Package Manager は、他の ソース (例えば 組み込みパッケージローカルパスGit URLビルトイン パッケージで宣言された依存関係) からインストールされたパッケージを、バージョンに基づいた依存関係よりも優先して選択します。

最適な解決策の選択

プロジェクトマニフェストで定義されているパッケージのセットによって、考えられるすべてのパッケージの組み合わせを評価するには、長い時間がかかる可能性があります。1 つのプロジェクトが何百ものパッケージに依存する可能性があり、それぞれのパッケージが何百もの他のパッケージに依存し、そのほとんどが異なるバージョンを必要とします。

ロックファイルと解決策

最も効率的なソリューションを提供するために、Package Manager は、ロックファイル で追跡することによって、以前に使用したパッケージのバージョンを優先します。これにより、同じ入力を使用した後続の依存関係の解決が、同じ出力になることが保証されます。また、パッケージのダウンロード、抽出、コピーなど、時間のかかる操作を最低限に抑えることができます。

Package Manager は、ロックされたパッケージのみを含む解決策を見つけられないことがあります。この場合、Package Manager は、デフォルトでは、マイナーまたはメジャーアップグレードよりもパッチアップグレードを優先し、メジャーアップグレードよりもマイナーアップグレードを優先するような、最もリスクの低いアップグレードを伴う解決策を使用します。ただし、resolutionStrategy プロパティを使用して、上位バージョンを検討する場合に Package Manager にどの程度積極的に対応させるかをカスタマイズすることができます。

この例では、以下のパッケージの複数のバージョンが必要です。

  • burst@1.2.2 (2 回) と burst@1.3.0-preview.3
  • collections@0.5.1-preview.11collections@0.5.2-preview.8
  • jobs@0.2.4-preview.11 (2 回) と jobs@0.2.5-preview.20

1 組の 直接的間接的 な依存関係を使って、Package Manager は、バーストパッケージの最高バージョン (burst@1.3.0-preview.3) を選択し、collections@0.5.2-preview.8 パッケージの依存関係を満たします。

依存関係の図では、青いノードは、Package Manager がどのバージョンを選択したかを示しています。
依存関係の図では、青いノードは、Package Manager がどのバージョンを選択したかを示しています。



  • 新しいパッケージ依存関係ソルバー (SAT) は Unity 2019.4 で追加NewIn20194

スコープ付きレジストリ
ロックファイル