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

依存関係と競合の解決

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

Package Manager ウィンドウでインストールするパッケージのバージョンを選択すると、 依存関係プロジェクトマニフェスト に加えることになります。これは、プロジェクトを動かすために、特定のパッケージの特定のバージョンが必要であるという宣言です。プロジェクトマニフェスト に示される依存関係は、“直接” 依存関係と呼ばれます。

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

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

パッケージのバージョンを依存関係として加える場合、そのバージョンは Package Manager がインストールするバージョンとは限りません。なぜならば、プロジェクトにあるすべての依存関係を、直接か間接かにかかわらず考慮しなければならないからです。どのパッケージをインストールするかを決定するために、Package Manager はすべての直接および間接的な依存関係のリストを作成します。

Package Manager は、一度に 1 つのバージョンのパッケージしかインストールできません。そのため、各パッケージのどのバージョンをインストールするかを決定するために、依存関係グラフ を構築する必要があります。Package Manager は、すべてのバージョンの競合の解決に成功すると、その解決を ロックファイル に保存し、決定性を確保し (毎回同じパッケージが確実にインストールされます)、依存関係グラフの再計算にかかる時間とリソースを減らすことができます。


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