.NETパッケージをNuGetにAPI経由でアップロードする方法
.NETで開発したライブラリやツールをNuGetパッケージとして公開する際、手動でのアップロードは手間がかかります。特にCI/CDパイプラインで自動化したい場合、API経由でのプッシュが不可欠です。
この記事では、dotnet nuget push コマンドとAPIキーを使用して、.NETパッケージをNuGet.orgに安全かつ効率的にアップロードする方法を解説します。
記事を読むとできるようになること
- NuGet.orgからAPIキーを取得する方法
-
dotnet nuget pushコマンドを使ったパッケージのプッシュ方法 - CI/CDでの利用を想定したAPIキーの安全な取り扱い方
事前準備
記事を進める前に、以下の準備が必要です。
- .NETプロジェクト: パッケージ化したい.NETプロジェクトが用意されていること。
-
NuGetパッケージファイル: プロジェクトがビルドされ、
.nupkg拡張子のパッケージファイルが生成されていること。(例:YourPackage.1.0.0.nupkg) - NuGet.orgアカウント: パッケージを公開するためのNuGet.orgアカウント。
Step 1: NuGet APIキーの取得
NuGetパッケージをAPI経由でプッシュするには、NuGet.orgから発行されるAPIキーが必要です。このキーは、パッケージのプッシュ権限を証明するものとなります。
- NuGet.orgにログイン: https://www.nuget.org/ にアクセスし、アカウントでログインします。
-
API Keysページへ移動: 画面右上にあるユーザー名をクリックし、ドロップダウンメニューから
API Keysを選択します。 -
新しいキーの作成:
+ Createボタンをクリックします。 -
キーの設定:
-
Key Name: キーを識別するための名前を入力します(例:
MyProject-CI-Key)。 - Expires in: キーの有効期限を選択します。セキュリティのため、必要以上に長くしないことを推奨します。
-
Scopes:
Pushスコープを選択し、パッケージのプッシュ権限を付与します。必要に応じてPackage patternで特定のパッケージのみに限定することも可能ですが、ここでは*(すべて)で構いません。
-
Key Name: キーを識別するための名前を入力します(例:
-
キーの生成とコピー:
Createボタンをクリックすると、APIキーが生成されます。このキーは一度しか表示されないため、必ずコピーして安全な場所に保管してください。紛失した場合は、再度新規にキーを発行する必要があります。
【重要】APIキーの取り扱いについて
APIキーはパスワードと同様に非常に機密性の高い情報です。絶対にコードリポジトリに直接コミットしないでください。 CI/CD環境では、環境変数やシークレット管理ツールを利用して安全に管理しましょう。
Step 2: dotnet nuget push コマンドでのプッシュ
APIキーが準備できたら、dotnet nuget push コマンドを使用してパッケージをNuGet.orgにアップロードします。
基本コマンドは以下の通りです。
dotnet nuget push <PACKAGE_FILE> --api-key <YOUR_API_KEY> --source <SOURCE_URL>
各引数は以下の通りです。
-
<PACKAGE_FILE>: アップロードしたい.nupkgファイルのパスを指定します。 -
--api-key <YOUR_API_KEY>または-k <YOUR_API_KEY>: Step 1で取得したAPIキーを指定します。 -
--source <SOURCE_URL>または-s <SOURCE_URL>: パッケージをプッシュするターゲットのURLを指定します。NuGet.orgの場合はhttps://api.nuget.org/v3/index.jsonです。
例: NuGet.orgへのプッシュ
例えば、./bin/Release/YourPackage.1.0.0.nupkg というパッケージを、APIキー YOUR_API_KEY_HERE を使ってNuGet.orgにプッシュする場合のコマンドは以下のようになります。
dotnet nuget push ./bin/Release/YourPackage.1.0.0.nupkg --api-key YOUR_API_KEY_HERE --source https://api.nuget.org/v3/index.json
よく使うオプション
-
--skip-duplicate: 同じバージョンのパッケージが既に存在する場合に、エラーをスキップして続行します。CI/CDでビルドの再実行時に便利です。 -
--symbol-package: シンボルパッケージ(デバッグ情報)も一緒にプッシュします。 -
--force-english-error-messages: エラーメッセージを英語で表示します。
これらのオプションは、必要に応じてコマンドに追加してください。
CI/CDでの利用とシークレット管理
CI/CDパイプラインでパッケージのプッシュを自動化する場合、APIキーのような機密情報はコードに直接記述せず、安全な方法で管理する必要があります。GitHub Actionsでは、リポジトリの Secrets 機能を利用するのが一般的です。
GitHub Actions Secretsの設定方法
-
リポジトリのSettingsに移動: GitHubリポジトリのページで
Settingsタブをクリックします。 -
Secrets and variables > Actions を選択: 左側のメニューから
Secrets and variablesを展開し、Actionsをクリックします。 -
New repository secret をクリック:
New repository secretボタンをクリックして、新しいシークレットを作成します。 -
シークレットの設定:
-
Name:
NUGET_API_KEYと入力します。これは、ワークフローファイル(.yml)で{{ secrets.NUGET_API_KEY }}として参照される名前です。 - Secret: NuGet.orgから取得したAPIキーをここに貼り付けます。
-
Name:
- Add secret をクリック: 設定を保存します。
この設定により、ワークフローファイル内で {{ secrets.NUGET_API_KEY }} と記述するだけで、安全にAPIキーを利用できます。
GitHub Actionsワークフロー例
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.103' # 使用する.NET SDKのバージョンを指定
- name: Build NuGet package
run: dotnet pack --configuration Release -o out
- name: Push NuGet package
run: dotnet nuget push "out/*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
この例では、{{ secrets.NUGET_API_KEY }} がGitHub Secretsで設定したAPIキーを参照しています。
【重要】パッケージ出力パスの確認
dotnet nuget push コマンドで指定する .nupkg ファイルのパス(例: "out/*.nupkg")は、プロジェクトのビルド設定やCI/CD環境によって出力場所が異なります。
実際にパッケージが生成される場所を確認し、コマンド内のパスを適切に修正してください。 dotnet pack コマンドの実行ログや、ビルド成果物が格納されるディレクトリを確認すると、正しいパスを特定できます。
まとめ
APIキーを取得し、dotnet nuget push コマンドを適切に利用することで、NuGetパッケージのアップロードを効率化し、CI/CDパイプラインでの自動化が可能になります。APIキーの安全な管理(GitHub Secretsの利用など)を徹底し、スムーズなパッケージ公開を実現しましょう。
Discussion