Version: 2023.1
言語: 日本語
パッケージアセットへのアクセス
解決と競合

スコープ付きレジストリ

スコープ付きレジストリにより、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 へのアクセスを提供していますが、サードパーティ製品のマーケットプレイスとして提供しているわけではありません。

パッケージのコンシューマーとして、スコープ付きレジストリをインストールする際には、他のサードパーティ製ソフトウェアをインストールするときと同じレベルの注意を払ってください。

  • スコープ付きレジストリは、信頼できるソースからのみインストールしてください。なぜなら、それらのレジストリのパッケージには実行可能コードが含まれている可能性があるからです。
  • 有害であったり、適切な管理なしにデータを取得する可能性のあるサードパーティのレジストリに注意してください。また、Unity であると偽っていたり、Unity が認可またはサポートしていると偽っているサードパーティにも注意してください。

スコープ付きレジストリーの利点

スコープ付きレジストリは、以下ために役立ちます。

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

    プロバイダーとして独自のレジストリを作成し、バージョン番号を付けてツールやスクリプト (または他のタイプのアセット) を配布することができます。バージョン番号は、セマンティックバージョニング に基づいて、更新で 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 はこのページをデフォルトのウェブブラウザーで開きます。

ヒント: Package Manager のプロジェクト設定ウィンドウにいつでもアクセスするには、Unity のメインメニュー (Edit > Project Settings 、次に Package Manager カテゴリ) を使用するか、Package Manager ウィンドウの 詳細設定 メニューから Advanced Project Settings を選択します。

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

プロジェクト内のスコープされたパッケージレジストリを管理するには、プロジェクトマニフェストファイル を直接編集するか、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 パッケージを検索すると、スコープ付きレジストリのどれにもマッチしないため、デフォルトのレジストリからパッケージを取得します。


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