ロックファイルには、Package Manager におけるプロジェクトの依存関係解決の結果が含まれています。Package Manager は、パッケージの依存関係グラフを解決するときにロックファイルを使用して決定論的な結果を提供します。Unity Package Manager が正しい解決を計算すると、その解決が、プロジェクトの Packages フォルダーの packages-lock.json という JSON ファイルに保存されます。プロジェクトマニフェストまたは変更可能なパッケージのマニフェスト (埋め込みまたはローカルフォルダーからインストールのいずれか) を変更すると、Package Manager が解決済みのパッケージバージョンの強制的に再計算する可能性があります。ただし、ロックファイル内のパッケージのバージョンが依存関係のバージョンと解決で暗示されている範囲を満たしていれば、パッケージはそのバージョンでロックされたままになります。
例えば、ロックファイルの典型的なエントリは次のとおりです。
"com.unity.textmeshpro": {
"version": "2.0.1",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.ugui": "2.0.0"
},
"url": "https://packages.unity.com"
},
etc.
Package Manager は、競合する間接的な依存関係を解決する場合に、ロックされたパッケージを可能な限り再利用しようとします。これにより、後続の依存関係の解決が、同じ一揃いの依存関係に対して同じ結果をもたらすことが保証されます。また、パッケージのダウンロード、抽出、コピーなど、時間のかかる操作を最低限に抑えることができます。
ロックされたパッケージのみが含まれている解決がない場合、Package Manager は最もリスクが少ないアップグレードを行うパッケージセットを選択します。つまりマイナーまたはメジャーのアップグレードよりもパッチによるアップグレードを、メジャーアップグレードよりもマイナーアップグレードを優先します。実際には、アップグレードのリスクレベルはカスタマイズできます。詳細については、解決策のカスタマイズを参照してください。
間接的な依存関係のバージョンを強制的に更新するには、ロックファイルを削除します。
ロックファイルを手動で変更しないでください。Package Manager はロックファイルを作成し、維持します。そのため、手動で加えた変更は Package Manager によって上書きされてしまいます。
ロックファイルをソース管理下に置きます。すると、同じ一揃いのパッケージを一貫して再現でき、経時的に、異なるマシンでも、プロジェクトの一貫性を保つことができます。
デフォルトでは、Package Manager は依存関係図の計算に成功するとロックファイルを作成または更新します。予期しない結果が出た場合は、プロジェクトマニフェストの enableLockFile プロパティを false に設定してロックを使用不可にできます。ただし、ロックファイルを不可にすると、Package Manager は Git URL パッケージを再度クローンするため、パフォーマンスが低下したり、ネットワーク使用量が増えたりします。また、2 つの解決の間に新しいコミットをリモート Git リポジトリにプッシュすると、非決定的な結果になる可能性があります。