Version: 2019.3
Git URL
パッケージの競合

スコープ付きパッケージレジストリ

スコープ付きレジストリは、Unity のデフォルトのレジストリに加えてレジストリを使用することを可能にし、独自のパッケージをホストできます。スコープ付きレジストリを使用すると、Package Manager は常に 1 つのパッケージを 1 つのレジストリにマップし、ネットワークの条件にかかわらず一貫した結果を保証します。

例えば、Unity のパッケージの一部をホストする独自のサーバーを設定すると、もし 1 つのレジストリが一時的に利用できなくなると、たとえ Package Manager が常に同じ順序でレジストリを検索しても、誤ったレジストリからパッケージを取得する可能性があります。ただし、独自のサーバーにスコープ付きレジストリを設定すると、 パッケージは常に 1 つのレジストリにのみマップされるため 、ネットワークの条件にかかわらず一貫した結果が保証されます。

サポートされるレジストリタイプ

Unity Package Manager は npm プロトコルに基づくレジストリをサポートします。既成の npm レジストリサーバーはなんでも使用でき、動作するはずですが、Verdaccio は素早く設定でき、多くの設定を必要としません。

これらのサーバーを設定したら、それらを スコープ付きレジストリ として加えることができます。これは npm が使用する概念と同じです。

制限

一部の npm レジストリサーバーは、/all Web API ルートですべてのパッケージの検索をサポートするわけではありません。Package Manager Search API は、設定されたスコープ付きレジストリに依存してこの古い npm API プロトコルをサポートします。公開されたすべてのパッケージのメタデータを返す HTTP エンドポイントがあります (例えば、https://registry.my-company.com/-/all)。

If you have a tool that uses the Package Manager API to list available packages, you might experience unexpected results if your registry does not support the old protocol. For example, in this case, the Package Manager window does not display packages from those scoped registries in the All packages tab. However, this limitation does not apply to package resolution, so you can still manually add packages from scoped registries to the Project manifest.

スコープ付きレジストリの設定

To set up your scoped registries in your Project manifest, use the scopedRegistries attribute, which takes an array of scoped registry configuration objects. Each object contains a name, a url location, and a list of scopes for each package name pattern you want to map to that scoped registry. When the Package Manager decides which registry to fetch a package from, it compares the package name to the scopes values and finds the registry whose scopes most closely match.

For example, in the Project manifest below, there are two scoped registries, Main and Tools:

{
  "scopedRegistries": [
    {
      "name": "Main",
      "url": "https://my.company.com/registry",
      "scopes": [
        "com.my-company", "com.my-company.tools.foo"
      ]
    },
    {
      "name": "Tools",
      "url": "https://my.company.com/tools-registry",
      "scopes": [
        "com.my-company.tools"
      ]
    }
  ],
  "dependencies": {
    "com.unity.cinemachine": "1.0.0",
    "com.unity.2d.common": "1.0.0",
    "com.unity.2d.animation": "1.0.0",
    "com.my-company.bar": "1.0.0"
  }
}

ユーザーが com.my-company.bar パッケージをリクエストすると、Package Manager は com.my-company.* 名前空間がその名前に最も一致することを見つけ、Main レジストリからパッケージを取得します。

ユーザーが com.my-company.tools.foo パッケージをリクエストすると、 Main レジストリに正確に一致する名前空間を持つスコープがあります。

ユーザーが com.my-company.tools.animation パッケージをリクエストすると、Package Manager は com.my-company.tools.* 名前空間がその名前に最も近いことを見つけ、Tools レジストリからパッケージを取得します。Main スコープにも一致しますが、com.my-company.* 名前空間はそれほど近く一致しません。

ユーザーが com.other-company.bar パッケージをリクエストすると、Package Manager はスコープされたどのレジストリーでも一致するものを見つけられないため、 デフォルトのレジストリからパッケージを取得します。

設定

Configure scoped registries with the scopedRegistries attribute in the Project manifest. The scopedRegistries attribute contains an array of entries (objects) that represent all of the registries.

各レジストリオブジェクトには、一意の名前 (name)、場所 (url)、名前空間 (scopes) の配列が含まれます。Package Manager は scopes を使用して、 パッケージ名とレジストリを一致させます。

属性 JSON 型 説明
name 文字列 ユーザーインターフェースに表示されるスコープ名。Package Manager ウィンドウはパッケージの詳細ビューにこの名前を表示します。例えば、"name": "Tools"
url 文字列 The URL to the npm-compatible registry. For example, "url": "https://my.company.com/tools-registry"
scopes 文字列の配列 スコープの配列。パッケージ名の正確な一致か、名前空間のいずれかでパッケージ名にマップできます。

例えば、"scopes": [ "com.my-company", "com.my-company.tools.foo" ]

ノート: このような設定は、パッケージが 逆ドメイン名表記 (英語) に従っていることを前提としています。これにより、com.unitycom.unity.* と同じであることが保証されます。
Git URL
パッケージの競合