Version: 2021.2
パッケージアセットへのアクセス
解決と競合

スコープ付きレジストリ

スコープ付きレジストリにより、Unity は任意のカスタムパッケージレジストリサーバーの場所を Package Manager に伝え、ユーザーが複数のパッケージのコレクションに同時にアクセスできるようにします。ここでは、機能を理解するための重要な概念を説明します。

概念 説明
package registry server パッケージを記録し、保存する場所を提供するアプリケーション。Unity の Package Manager ウィンドウで、Unity Registry コンテキストを選択すると、Unity のレジストリに登録されているすべてのパッケージが、リストビュー に表示されます。
package manager 何が利用可能かをユーザーに伝え、ユーザーがプロジェクトのために要求するパッケージをダウンロードしてインストールするアプリケーションです。Unity では独自のPackage Manager を実装していますが、他にも同様のアプリケーションがいくつかあります。
scope com.example.mycompany.animationcom.example のように、パッケージ名や名前空間 (リバースドメイン形式) を定義します。ユーザーがパッケージを要求すると、Package Manager はレジストリからスコープに最も適合するパッケージを取得します。詳細については、後述の プロジェクトのスコープ付きレジストリの管理 を参照してください。


パッケージプロバイダーは、カスタムパッケージをホストして配布するために、Unity レジストリ に加えてカスタムレジストリサーバーを設定します。パッケージのユーザーは、カスタムパッケージプロバイダーのレジストリサーバーにアクセスするために、プロジェクトごとにスコープ付きのレジストリを設定します。

ノート: パッケージプロバイダーは、パッケージレジストリサーバーの設定が Unity の利用規約、特に Unity Package Guiding Principles & Guidelines に準拠していることを確認してください。Unity は、知識や制作物の共有を促進するために Package Manager へのアクセスを提供していますが、サードパーティ製品のマーケットプレイスとして提供しているわけではありません。

スコープされたレジストリは、以下のように役立ちます。

  • ツール、ライブラリ、その他のアセットを配布することで新しい機能を提供

    プロバイダーとして独自のレジストリを作成し、バージョン番号を付けてツールやスクリプト (または他のタイプのアセット) を配布することができます。バージョン番号は、パッケージの成熟度、アップデートによって API の破壊的な変更が含まれているか、マイナーな修正が行われるのかを示します (セマンティックバージョニング 参照)。また、Package Manager は パッケージの依存関係 をサポートしているので、他のパッケージのコードに依存することができます。

    ユーザーにとって、Package Manager でサードパーティのカスタムパッケージをブラウズしたりインストールしたりする体験は、Unity のパッケージの場合と同じです。

  • 既存の Unity のパッケージ機能を拡張

    ユーザーとしては、レジストリを手動で切り替えたり、異なるパッケージバージョンを明示的にインストールしたりすることなしに、カスタムパッケージが Unity パッケージをオーバーライドするシームレスな体験をすることができます。これは、パッケージを特定のレジストリにマップすることで、Package Manager が Unity レジストリまたはカスタムパッケージレジストリサーバーのいずれかから取得することができるためです。

  • クローズドネットワーク環境でパッケージにアクセス

    組織によっては、クローズドネットワーク (閉域網) の中で仕事をしているために、Unity 自体のパッケージレジストリにアクセスすることが困難な場合があります。このような場合、その組織は、クローズドネットワーク内のサーバーに独自のパッケージレジストリを設定することができます。ネットワーク管理者は、Unity のパッケージレジストリと定期的に同期して、スコープ付きレジストリに最新のパッケージがあることを確認します。

パッケージのユーザーである場合は、プロジェクトのスコープ付きレジストリの管理 を参照して、Unity プロジェクト内の既存のカスタムパッケージレジストリサーバーに接続する方法を確認してください。パッケージ製作者の場合は、パッケージの共有 ページで、サポートされているパッケージレジストリサーバーを確認し、それらをスコープ付きレジストリで使用するための設定方法に関する情報を参照してください。

ノート: アクセスが制限されているパッケージレジストリサーバーを指すスコープ付きレジストリを設定する場合、Package Manager が npm 認証トークンをサーバーに渡すように設定できます。詳細は、スコープ付きレジストリの認証 を参照してください。

スコープ付きレジストリのインポート

共有プロジェクトで作業をしているときに、他のユーザーがスコープ付きレジストリをプロジェクトに加えると、Unity は新しいスコープ付きレジストリが追加されたことを警告します。

プロジェクトのスコープ付きレジストリのリストに変更があると、Unity は警告を表示します。
プロジェクトのスコープ付きレジストリのリストに変更があると、Unity は警告を表示します。

Close ボタンをクリックすると、Package Manager プロジェクト設定ウィンドウが表示されるので、プロジェクトのスコープ付きレジストリを追加、変更、削除することができます。

代わりに Read more (詳しい情報) ボタンをクリックすると、Unity はこのページをデフォルトのウェブブラウザーで開きます。

Tip:
To access the Package Manager project settings window at any time, use the main menu in Unity (menu: Edit > Project Settings, then the Package Manager category) or select Advanced Project Settings from the advanced settings drop-down menu on the Package Manager window.

プロジェクトのスコープ付きレジストリの管理

プロジェクトのスコープ付きパッケージレジストリを管理するには、プロジェクトマニフェスト ファイルを直接編集するか、Package Manager プロジェクト設定ウィンドウを使用して、Unity にマニフェストを修正させることができます。

[プロジェクトマニフェストは、scopedRegistries プロパティを使用します。このプロパティには、スコープ付きレジストリ構成オブジェクトの配列が含まれています。各オブジェクトには、以下のプロパティが含まれています。

プロパティ JSON 型 説明
name 文字列 ユーザーインターフェースに表示されるスコープ名。Package Manager ウィンドウは パッケージの詳細ビュー にこの名前を表示します。

例えば、"name": "Tools"
url 文字列 npm と互換性のあるレジストリサーバーの URL。

例えば、"url": "https://mycompany.example.com/tools-registry"

ノート: すべてのレジストリプロバイダーが Unity の Package Manager と互換性があるわけではありません。追加しようとしているパッケージレジストリサーバーが、/-/v1/search または /-/all のエンドポイントを実装していることを確認してください。
scopes 文字列の配列 パッケージ名の正確な一致か、名前空間のいずれかでパッケージ名にマップするスコープの配列。ワイルドカードとその他のグロブパターンはサポートされていません。

例えば、"scopes": [ "com.example", "com.example.tools.physics" ]

ノート: このような設定は、パッケージが 逆ドメイン名表記 に従っていることを前提としています。これにより、com.unity が、com.unity.timelinecom.unity.2d.animationなどの com.unity 名前空間に一致するすべてのパッケージ名と同等であることが保証されます。

Package Manager が、どのレジストリからパッケージを取得するかを決定するとき。パッケージの namescopes の値を比較して、scopes が最もよくマッチするレジストリを見つけます。

例えば、以下のプロジェクトマニフェストには、 GeneralTools の 2 つのスコープ付きレジストリがあります。

{
    "scopedRegistries": [
        {
            "name": "General",
            "url": "https://example.com/registry",
            "scopes": [
                "com.example", "com.example.tools.physics"
            ]
        },
        {
            "name": "Tools",
            "url": "https://mycompany.example.com/tools-registry",
            "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 が com.example.animation パッケージを検索するとき、com.example 名前空間がその名前に最も近いと判断し、“General” レジストリからパッケージを取得します。

Package Manager が com.example.tools.physics パッケージを検索すると、“General” レジストリには、パッケージ名と完全に一致するスコープがあります。

Package Manager が com.example.mycompany.tools.animation パッケージを検索するとき、Package Manager は com.example.mycompany.tools 名前空間がその名前に最もよく合致することを発見し、次に “Tools” レジストリからパッケージを取得します。“General” スコープにも一致点はありますが、com.example 名前空間はそれほどマッチしません。

Package Manager が com.unity.animation パッケージを検索すると、スコープ付きレジストリのどれにもマッチしないため、デフォルトのレジストリからパッケージを取得します。


パッケージアセットへのアクセス
解決と競合