--- title: "ProGetでNuget (.Net) フィード ホストする方法" order: 1 hidden: true ---
NuGetは、無料のオープンソース.NETのライブラリを配布するためにMicrosoftが開発したパッケージ形式です。
NuGetのパッケージは NuGet.org で公開されており、Visual Studio または NuGet.exe のコマンドライン・クライアントから使用します。
ProGet を使用すると、NuGet パッケージを使用して、非公開の独自ライブラリを配布できます。
ライブラリを配布するには、次のように NuGet フィードを作成するだけです。
[Feeds (フィード)] > [Create New Feed (新しいフィードの作成)] > [Type = NuGet]
次に、フィードを新しいパッケージソースとして使用できるように Visual Studio の設定をします。
ProGet を NuGet.org のプロキシとして使用して、不適切なライセンスやセキュリティの脆弱性をブロックし、インターネットや NuGet.org との接続が切れてしまった場合にパッケージをキャッシュしておくこともできます。
プロキシを使用するには、コネクタを作成します。
[Feeds (フィード)] > [Connectors (コネクタ)] > [Create New Connector (新しいコネクタの作成)] > [NuGet]
コネクタをフィードに関連付けます。
[Manage Feed (フィードの管理)] > [Connectors (コネクタ)]
NuGet パッケージは、 NuGet CLI を使用してインストールします。ProGetフィードからパッケージをインストールするには、次のコマンドを使用します。
(参照:Quickstart: Install and use a package using the dotnet CLI)
NuGet install {package-name} -Version {package-version} -Source http://{proget-server}/NuGet/{feed-name}/
NuGet のパッケージ形式については参照サイトなどに、多くの情報が公開されています。Visual Studio で作成する、または NuGet.exe を使用するなど、さまざまな方法でパッケージが作成できます。
参照:Quickstart: Create and publish a NuGet package using Visual Studio (.NET Standard, Windows only)
作成したパケージを、ProGet で公開するには次の4つの方法があります。
注:このフィードのURLについては、現時点では NuGet v2 の URL をご記入いただくことが必要です。(例 https://NuGet.org/api/v2)
パッケージをフィードに追加する方法の詳細については、NuGet フィードの [Add Package (パッケージの追加)] ボタンをクリックしてご覧ください。
NuGet クライアントツール(NuGet.exe や NuGet パッケージ エクスプローラーなど)には、パッケージ公開の認証方法として「NuGet APIキー」を使用するオプションが備わっています。これは、コミュニティが運営の NuGet ギャラリーのサイトにおいて、誰でも自身のパッケージを公開できるようにするために、非常に重要なオプションです。しかし、企業組織内では「個々のパッケージの所有権」の概念が、しっかりと意識されているかと言うとそうではありません。
ProGet をご使用になる場合、(ユーザーまたはグループの)プリンシパルは、フィードにパッケージ公開する権限を持っているか、持っていないかのどちらかです。ProGet 管理者は、API キーなどによる管理方法ではなく、LDAP とグループを介してアクセスや利用を、簡単に制御できます。ただし、ProGet にプッシュする際に、NuGet の API キーをご使用になりたい場合には次の2つの方法があります。
ProGet 5.0 以前には、 NuGet の (Quirks) フィードは [Manage Feed (フィードの管理)] のページで、APIキーの定義をサポートしていました。
ただし、ProGet 5.0 以前のキーは、ProGet 5.3 へのアップグレード時に削除されます。(参照:Legacy (Quirks) NuGet Feeds)
レガシー NuGet API キーは、ProGet API キーとは多少は異なる動作をします。認証済みのユーザーのほかに、フィードに定義されているレガシーキーの確認も実施します。そして同じキーがレガシーキーと ProGet キーの両方で定義されている場合には、ProGetキーの方を優先します。
ProGet の NuGet フィードは Visual Studio や WinDbg などのデバッガーとも、互換性のあるシンボルサーバやソースサーバを構成します。詳細については、「ProGet のシンボルとソースサーバ」をご参照ください。
ProGetは、サードパーティの API、NuGet ODATA プロトコルを実装しています。
また役立つと思われる一般的なクエリも、いくつかご紹介します。
https://«proget-server»/NuGet/«feed-name»/Packages?$format=json
https://«proget-server»/api/v2/package/«feed-name»/«packageName»/«versionNumber[optional]»
https://«proget-server»/NuGet/{feed-name}/Packages?$filter=Id%20eq%20'«package-name»'
https://«proget-server»/NuGet/{feed-name}/Packages()?$filter=Id%20eq%20%27«package-name»%27%20and%20IsAbsoluteLatestVersion&$top=1
NuGet.orgとNuGet クライアント ツールはいずれも、ODATA(v2)とJSON-LD(v3)の2種のAPIプロトコルをサポートしています。ProGet 5.3 以降はどちらもサポートしていますが、以前のバージョンでは、ODATA(v2)のみをサポートしていました。
NuGet フィードで JSON-LD(v3)が有効になっている場合、v3 のAPI URLがNuGet フィードページに表示され、ODATA(v2)とJSON-LD(v3)を有効にすると、どちらもご使用いただけます。
ODATA(v2)API は、
«proget-base»/NuGet/«feed-name»
JSON-LD(v3)APIは、
«proget-base»/NuGet/«feed-name»/v3/index.json
構成には関係なく、NuGet.org へのコネクタとして、必ずhttps://api.NuGet.org/v3/index.jsonにある、JSON-LD(v3)のエンドポイントを使用することにご留意ください。(参照:https://api.NuGet.org/v3/index.json)http://NuGet.org/api/v2#v2のように、NuGet.orgのURLの末尾にオーバーライドするトークン( #v2 )を追加して、ODATA(v2)プロトコルを強制することができます。
ProGet 5.0 より前に作成された NuGet フィードは、レガシー(Quirks)NuGetフィードと見なされます。Quirks フィードのタイプは、NuGet.org が過去に採用していた、あまり制度化されていない頃の、セマンティック バージョニング ルールに基づいています。新しい NuGet フィードがプレリリース バージョンの文字列にセマンティック バージョニング 2.0 ルール(以下SemVer2) を適用したため、ProGet 5.0 には、より洗練されたバージョニング スキームを導入しました。ただし、SemVer2 の仕様に適合しないバージョンも、SemVer2 フィードには表示されています。
レガシー(Quirks)NuGet フィードを移行するには、フィード管理ページの [migrate (移行)] リンクをクリックします。ProGet では、いくつかの移行オプションに、確認ダイアログのポップアップ表示をしています。移行を実行すると、ProGet は次の手順へと進みます。
移行はすべてデータベースでの処理で行うため、パッケージを実際に操作する必要はまったくありません。デフォルトでは、移行は単一のデータベース トランザクションとして実行されるため、万が一障害が発生した場合にはロールバックする可能性があります。フィードに非常に多くのパッケージ(10,000以上)がある場合は、移行を実行する前に ProGet SQL データベースのバックアップを実行したうえで、[migrate feed (フィードの移行)] ダイアログの適切なチェックボックスをオフにして、単一トランザクション モードは無効にしておくことを強くおすすめします。
レガシー(Quirks)の NuGet フィードは ProGet 5.3 で削除され、フィードをすべて移行するか削除しない限りは、アップグレードをブロックします。
ProGet では、NuGet フィードのインデックス再作成を、はじめから SemVer2 フィード(つまりレガシーではない)のシンボルサーバーとソースサーバーのインデックスを再作成するように設計しています。ProGet v5.0 以降では、さらに、次の追加アクションを実行するように修正しました。詳細は、「ProGet のシンボルとソースサーバ」をご覧ください。
NuGet フィードでインデックスの再作成を実行するには、NuGet、Chocolatey、または PowerShell フィードの
[Manage Feed (フィードの管理)] ページにアクセスし、[Symbol Server feed property (シンボルサーバーフィードのプロパティ)] セクションで [re-index (インデックスの再作成)] を選択してください。
再パッケージ化は、パッケージの内容を変更せずにパッケージのバージョンを変更するプロセスであり、プレリリース パッケージを安定版の方に変更するなどのユースケースのご提供が可能です。
ProGet は、NuGet の再パッケージ化をサポートしています。CI/CD システムで RepackagingAPI を使用して完了させる方法の例は、パブリック BuildMaster インスタンスのサンプルアプリケーションで閲覧が可能です。(参照:Repackaging API)
フィードから NuGet パッケージを削除(完全に削除)またはリストから外す(検索結果では、ほぼ非表示にする)には、パッケージページに移動し、対象パッケージを [Delete Package (パッケージの削除)] または [Unlist Package (パッケージをリストから外す)] ボタンをクリックして実行します。削除やリスト解除を実行するには、Feeds_DeletePackage または Feeds_UnlistPackageそれぞれの属性でのパーミションが必要です。
プログラムでフィードからパッケージを削除するには、NuGet CLI の delete コマンドを使用するか、HTTP 経由で DELETE リクエストを作成します。(参照:delete command (NuGet CLI))
DELETE http://{proget-server}/NuGet/{feed-name}/package/{ID}/{VERSION}`
NuGet CLI の delete コマンド操作は、パッケージをリスト解除するだけのNuGet.org の DELETE コマンドとは異なることにご注意ください。(参照:Delete a package)
プログラムでパッケージをリストから解除(または再リスト)するには、ネイティブAPIでNuGetPackagesV2_SetListed メソッドを使用します。(参照:Native API Reference)