パッケージ ID プレフィックスの予約

パッケージの所有者は、ID プレフィックスを予約することにより、自分の ID を予約して保護することができます。 パッケージのコンシューマーには、パッケージを使用するときに、使用するパッケージの識別プロパティが詐欺的なものでないことを示す追加情報が提供されます。

nuget.org および Visual Studio 2017 バージョン 15.4 以降では、パッケージが予約済み ID プレフィックスの名前付けパターンと一致する場合、所有者が予約済みパッケージ ID プレフィックスで送信したパッケージの視覚的なインジケーターが示されます。 以下のリファレンスでは、ID プレフィックスの予約に付随することと、所有者が ID プレフィックスを申請する方法について説明します。

ID プレフィックスの予約の詳細

パッケージ ID プレフィックスが予約されると、nuget.org ギャラリーおよび Visual Studio でいくつかのことが行われます。 さらに、"パブリック" としてのプレフィックスの設定や、複数の所有者に対するプレフィックスのサブセットの委任など、ID プレフィックスの予約によってサポートされる高度なシナリオがあります。

nuget.org での ID プレフィックスの予約

nuget.org でプレフィックスを予約すると、次のことが行われます。

  1. nuget.org で、プレフィックスの予約が所有者または所有者のセットに関連付けられます。

  2. nuget.org に送信されたパッケージに、予約された ID プレフィックスと一致する ID が含まれる場合、それが ID プレフィックスを予約した所有者からのものでないときは常に、パッケージは拒否されます。

  3. パッケージが予約済み ID プレフィックスと一致し、その ID プレフィックスを予約した所有者から送られてきたものである場合は、Visual Studio 2017 バージョン 15.4 以降および nuget.org では視覚的なインジケーターが表示されて、パッケージが予約済み ID プレフィックスのものであることが示されます。 これは、新しいパッケージの送信と、その所有者の既存のパッケージの両方に当てはまります。 注: Visual Studio のインジケーターは、パッケージ ソースとして 1 つのフィードが選択されている場合にのみ表示されます。

  4. 予約済み ID プレフィックスと一致する、以前に存在していたパッケージのうち、予約済みプレフィックスの所有者によって所有されて "いない" ものはすべて、変更されずに残っています (一覧からは削除されませんが、視覚的なインジケーターが表示されることもありません)。 さらに、これらのパッケージの所有者は、引き続きパッケージに新しいバージョンを送信できます。

これらの変更は次の条件に基づいており、追加の制限がいくつかあります。

  • 視覚的インジケーターが表示されるためには、予約済みプレフィックスを持っているパッケージの所有者が、1 人だけである必要があります (複数の所有者がいるパッケージの場合)。

  • パッケージに複数の所有者がいて、1 人以上の所有者が予約済みプレフィックスを持っていて、1 人以上の所有者が予約済みプレフィックスを持っていない場合、予約済みプレフィックスを持っている所有者だけが、予約済みプレフィックスを持っている他の所有者を削除できます。 予約済みプレフィックスを持っていない所有者は、予約済みプレフィックスを持っている所有者を削除できません。 そのような所有者が削除できるのは、やはり予約済みプレフィックスを持っていない他の所有者だけです。

  • いったんパッケージに視覚的インジケーターが付いた後は、"常に" 視覚インジケーターが付いている必要があります (予約済みプレフィックスを持っている少なくとも 1 人の所有者が、常に所有者として残っていることを保証します)

高度なプレフィックス予約のシナリオ

サブプレフィックスの委任や、パブリックとしてのプレフィックスのマークなど、以下で説明するような高度なプレフィックス予約のシナリオがさらにいくつかあります。 実行できるさらに高度なプレフィックスの予約を次に示します。

  • プレフィックスの予約の間に、所有者は、プレフィックスのサブセット (またはプレフィックス) を他の所有者に委任することを要求できます。 たとえば、"aspnet" が "Microsoft.AspNet.*" の予約を望んでいるのに、"Microsoft" が "Microsoft.*" を所有している場合、"Microsoft" は "Microsoft.AspNet.*" を aspnet アカウントに委任できます。

  • プレフィックスの予約の間に、所有者は、プレフィックスをパブリックにすることができます。 このようにしてもまだ、パッケージが予約済みプレフィックスからのものであることを示す視覚的インジケーターは表示されていますが、将来任意の所有者がそのプレフィックスでパッケージを送信してもブロックされません。 これは、多くの共同作成者がいるオープンソース プロジェクトで役に立ちます。上位または中核の共同作成者がプレフィックスを予約しても、すべての共同作成者に対してオープンにしておくことができます。

プレフィックスの予約の視覚的インジケーター

パッケージが予約済みプレフィックスからのものである場合、nuget.org ギャラリーおよび Visual Studio 2017 バージョン 15.4 以降では、次のような視覚的インジケーターが表示されます。

nuget.org ギャラリーnuget.org Gallery

Visual StudioVisual Studio

ID プレフィックスの予約の申請プロセス

  1. プレフィックス ID 予約の条件を確認します。

  2. 必要となる高度なプレフィックス予約シナリオに加えて、予約するプレフィックスを決定します。

  3. nuget.org での所有者の表示名と、要求する予約済みプレフィックスを、account@nuget.org にメールで送ります。 プレフィックスのサブセットを複数の所有者に委任する場合は、すべての所有者の表示名とプレフィックスのサブセットを記載してあることを確認します。

申請を送信した後、受理または拒否 (および拒否の原因となった条件) の通知を受け取ります。 所有者の身元を確認するために、追加の身元確認の質問が必要になることがあります。

ID プレフィックスの予約の条件

ID プレフィックスの予約に関する申請のレビューでは、NuGet.org のチームにより、以下の条件について申請が評価されます。 プレフィックスが予約されるためにすべての条件が満たされる必要はありませんが、条件が満たされていることの十分な証拠 (および説明) がない場合、申請が却下される可能性があることに注意してください。

  1. パッケージ ID プレフィックスでは、適切かつ明確に予約の所有者が示されていますか?

  2. そのパッケージ ID プレフィックスには個人所有者または組織に属すべきではない何らかの一般性がありますか? 4 文字より短い ID プレフィックスの予約と、一般的な単語や総称を避けるようにします。

  3. そのパッケージ ID プレフィックスを予約しても、コミュニティに対してあいまいさ、混乱、その他の害が発生することは "ありませんか"?

ID プレフィックスの予約内でパッケージを NuGet.org に発行する場合は、次のベスト プラクティスを考慮する必要があります。

  1. そのパッケージ ID プレフィックスと一致するパッケージの識別プロパティは明確かつ一貫していますか (特にパッケージの作成者)?

  2. パッケージにはライセンスがありますか (非推奨になった licenseUrl ではなく、license メタデータ要素を使用)?

  3. そのパッケージに (iconUrl メタデータ要素を使用する) アイコンがある場合、icon メタデータ要素も使用されていますか? iconUrl を削除することは要件ではありませんが、埋め込みアイコンを使用する必要があります。

上記のポイントに加えて、完全なパッケージ作成のベスト プラクティス ガイドを確認することを検討してください。

サード パーティのフィード プロバイダーのシナリオ

サード パーティのフィード プロバイダーが、独自のサービスを実装してプレフィックスの予約を提供することに関心がある場合、NuGet V3 フィード プロバイダーで検索サービスを変更することにより、それを行うことができます。 フィード検索サービスの変更とは、verified プロパティを追加することです。 NuGet クライアントでは、V2 フィードで追加されたプロパティはサポートされていません。

詳しくは、API の検索サービスに関するドキュメントをご覧ください。

パッケージ ID プレフィックス予約の争議ポリシー

上記の条件に反している NuGet.org の所有者にパッケージ ID プレフィックスの予約が割り当てられたと信じられる場合、または商標や著作権が侵害されている場合は、問題の ID プレフィックス、その ID プレフィックスの所有者、割り当てられたプレフィックス予約を争議する理由を明記して、support@nuget.org までメールをお送りください。