スコープ付きレジストリによって、任意のカスタムパッケージレジストリサーバーの場所が Package Manager に伝達され、複数のパッケージのコレクションに同時にアクセスできるようになります。
ここでは、この機能の理解に役立つ重要な概念を説明します。
| コンセプト | 説明 |
|---|---|
| package registry server | パッケージを追跡し、保存場所も提供するアプリケーションです。Unity の Package Manager ウィンドウで Unity Registry コンテキストを選択すると Unity のレジストリに登録されているすべてのパッケージがリストパネルに表示されます。 |
| package manager | どのパッケージが利用できるかをユーザーに伝え、ユーザーがプロジェクトのためにリクエストするパッケージをダウンロードしてインストールするアプリケーションです。Unity では独自の Package Manager を実装していますが、他にも同様のアプリケーションがいくつかあります。 |
| scope |
com.example.mycompany.animation や com.example など、パッケージ名や名前空間 (逆ドメイン形式) を定義します。ユーザーがパッケージをリクエストすると、Package Manager はスコープに最もマッチするパッケージをレジストリから取得します。詳細については、プロジェクトのスコープ付きレジストリの管理を参照してください。 |
スコープ付きレジストリを操作する方法は、ロールによって異なります。
パッケージプロバイダーとして、設定するパッケージレジストリサーバーが Unity のサービス利用規約と Unity Package Guiding Principles & Guidelines (Unity パッケージの指針となる原則とガイドライン) に準拠していることを確認してください。Unity は、知識や制作物の共有を促進するために Package Manager へのアクセスを提供しており、サードパーティ製品のマーケットプレイスとして提供しているわけではありません。
パッケージのユーザーは、スコープ付きレジストリをインストールする場合に、サードパーティ製のソフトウェアをインストールするときと同じレベルの注意を払う必要があります。
スコープ付きレジストリは、以下のように役立ちます。
ツール、ライブラリ、その他のアセットを配布することで新しい機能を提供。
プロバイダーとして独自のレジストリを作成し、ツールやスクリプト (または他のタイプのアセット) を配布することができます。この際にはバージョン番号を付け、パッケージの成熟度を示します。バージョン番号はセマンティックバージョニングに基づき、更新によって破壊的な API 変更が発生するのか、またはマイナーな修正かも示します。また、Package Manager はパッケージの依存関係をサポートしているため、他のパッケージのコードに依存させることができます。
Package Manager でサードパーティ製のカスタムパッケージをユーザーとしてブラウズまたはインストールする操作は、Unity のパッケージの場合と同じです。
既存の Unity のパッケージ機能を拡張。
ユーザーは、レジストリの手動での切り替えや、異なるパッケージバージョンの明示的なインストールなしに、カスタムパッケージで Unity パッケージをシームレスにオーバーライドできます。これは、ユーザーがパッケージを特定のレジストリにマップすることで、Unity Registry またはカスタムパッケージレジストリサーバーのいずれかから、Package Manager によって取得できるようになるためです。
クローズドネットワーク環境でパッケージにアクセス。
組織によっては、クローズドネットワーク (閉域網) 内で作業をしているために、Unity のパッケージレジストリへのアクセスが難しい場合があります。このような場合、その組織は、クローズドネットワーク内のサーバーに独自のパッケージレジストリをセットアップすることができます。その後、ネットワーク管理者が Unity のパッケージレジストリと定期的に同期し、スコープ付きレジストリに最新のパッケージを確保します。
パッケージのユーザーは、プロジェクトのスコープ付きレジストリの管理を参照して、Unity プロジェクト内の既存のカスタムパッケージレジストリサーバーに接続する方法を確認してください。パッケージ製作者の場合は、サポートされているパッケージレジストリサーバーについて、パッケージの共有を参照してください。この情報には、スコープ付きレジストリで使用するための設定方法に関する内容へのリンクも含まれています。
注意アクセスが制限されているパッケージレジストリサーバーをポイントするスコープ付きレジストリをセットアップする場合、npm 認証トークンをサーバーに渡すように Package Manager を設定できます。詳細は、スコープ付きレジストリ認証を参照してください。
プロジェクトのスコープ付きレジストリを追加、変更、削除するには、Project Settings ウィンドウの Package Manager カテゴリを使用します。
共有プロジェクトで作業をしているときに、他のユーザーがスコープ付きレジストリをプロジェクトに追加すると、Unity は他のユーザーが新しいスコープ付きレジストリを追加したことを警告します。
Close ボタンをクリックすると、Package Manager の Project Settings ウィンドウが表示され、プロジェクトのスコープ付きレジストリを追加、変更、削除できるようになります。
Read more をクリックすると、現在表示されているページがデフォルトのウェブブラウザーで開きます。
ヒント:Package Manager の Project Settings ウィンドウにアクセスするには、Unity のメインメニュー (Edit > Project Settings から Package Manager カテゴリを選択) を使用します。Package Manager ウィンドウの Advanced Settings メニューから、Advanced Project Settings を選択することもできます。
プロジェクトのスコープ付きパッケージレジストリを管理するには、以下のいずれかを行います。
プロジェクトマニフェストは、スコープ付きレジストリ設定オブジェクトの配列を含む scopedRegistries プロパティを使用します。各オブジェクトには以下のプロパティがあります。
| プロパティ | JSON 型 | 説明 |
|---|---|---|
| name | 文字列 | ユーザーインターフェースに表示されるスコープ名です。Package Manager ウィンドウは、詳細パネルにこの名前を表示します。 例: "name": "Tools"
|
| url | 文字列 | npm と互換性のあるレジストリサーバーの URL。 例: "url": "https://mycompany.example.com/tools-registry"ノート: Unity の Package Manager と互換性のないレジストリプロバイダーもあります。追加しようとしているパッケージレジストリサーバーが、 /-/v1/search または /-/all のエンドポイントを実装していることを確認してください。 |
| overrideBuiltIns | Boolean | ビルトインパッケージのバージョン (パッケージがスコープ付きレジストリに存在する場合) を決定する true 値または false 値です。false に設定すると、Package Manager は Unity エディターに用意されているビルトインバージョンを使用します。これがデフォルトの設定です。true に設定し、ビルトインパッケージがスコープ付きレジストリにも存在する場合、Package Manager はスコープ付きレジストリ内のバージョンをダウンロードします。このプロパティのスコープは、URL プロパティで指定されたすべてのパッケージに適用されます。 |
| scopes | 文字列の配列 | パッケージ名の正確な一致と名前空間の一致のいずれかでパッケージ名にマップするスコープの配列です。ワイルドカードやその他の glob パターンはサポートされていません。 例: "scopes": [ "com.example", "com.example.tools.physics" ]ノート: この設定タイプは、パッケージが逆ドメイン名表記に従っていることを前提としています。これにより com.unity は、com.unity.timeline や com.unity.2d.animation など com.unity 名前空間と一致するすべてのパッケージ名と同等になります。注意:Unity は npm のスコープ表記をサポートしていません。 |
以下のプロジェクトマニフェストには、General と Tools という 2 つのスコープ付きレジストリがあります。
{
"scopedRegistries": [
{
"name": "General",
"url": "https://example.com/registry",
"overrideBuiltIns": false,
"scopes": [
"com.example", "com.example.tools.physics"
]
},
{
"name": "Tools",
"url": "https://mycompany.example.com/tools-registry",
"overrideBuiltIns": true,
"scopes": [
"com.example.mycompany.tools"
]
}
],
"dependencies": {
"com.unity.animation": "1.0.0",
"com.example.mycompany.tools.animation": "1.0.0",
"com.example.tools.physics": "1.0.0",
"com.example.animation": "1.0.0"
}
}
Package Manager がどのレジストリからパッケージを取得するかを決定するとき、パッケージの name と scopes の値を比較して、scopes の値が最も一致するレジストリを見つけます。
com.example.animation パッケージを検索すると、com.example 名前空間がその名前に最も一致したため、General レジストリからそのパッケージを取得します。com.example.tools.physics パッケージを検索すると、パッケージ名と完全に一致するスコープが General レジストリに見つかります。com.example.mycompany.tools.animation パッケージを検索すると、com.example.mycompany.tools 名前空間がその名前に最も一致したため、Tools レジストリからそのパッケージを取得します。General スコープにも一致しますが、com.example 名前空間はそれほど一致しません。com.unity.animation パッケージを検索する場合、スコープ付きレジストリのいずれにも一致を見つけられません。この場合、デフォルトのレジストリからパッケージを取得します。
General および Tools のレジストリにビルトインパッケージがあり、それがエディターにも存在する場合、Package Manager はそれらを次のように解決します。
General スコープ付きレジストリのビルトインパッケージをスキップします。これは、overrideBuiltIns 値が false であるためです。代わりに、Package Manager は Unity エディターに含まれているビルトインバージョンを使用します。Tools スコープ付きレジストリのビルトインパッケージをエディターの代わりに使用します。これは overrideBuiltIns 値が true であるためです。