🚀

.NETパッケージをNuGetにAPI経由でアップロードする方法

に公開

.NETで開発したライブラリやツールをNuGetパッケージとして公開する際、手動でのアップロードは手間がかかります。特にCI/CDパイプラインで自動化したい場合、API経由でのプッシュが不可欠です。

この記事では、dotnet nuget push コマンドとAPIキーを使用して、.NETパッケージをNuGet.orgに安全かつ効率的にアップロードする方法を解説します。

記事を読むとできるようになること

  • NuGet.orgからAPIキーを取得する方法
  • dotnet nuget push コマンドを使ったパッケージのプッシュ方法
  • CI/CDでの利用を想定したAPIキーの安全な取り扱い方

事前準備

記事を進める前に、以下の準備が必要です。

  1. .NETプロジェクト: パッケージ化したい.NETプロジェクトが用意されていること。
  2. NuGetパッケージファイル: プロジェクトがビルドされ、.nupkg 拡張子のパッケージファイルが生成されていること。(例: YourPackage.1.0.0.nupkg
  3. NuGet.orgアカウント: パッケージを公開するためのNuGet.orgアカウント。

Step 1: NuGet APIキーの取得

NuGetパッケージをAPI経由でプッシュするには、NuGet.orgから発行されるAPIキーが必要です。このキーは、パッケージのプッシュ権限を証明するものとなります。

  1. NuGet.orgにログイン: https://www.nuget.org/ にアクセスし、アカウントでログインします。
  2. API Keysページへ移動: 画面右上にあるユーザー名をクリックし、ドロップダウンメニューから API Keys を選択します。
  3. 新しいキーの作成: + Create ボタンをクリックします。
  4. キーの設定:
    • Key Name: キーを識別するための名前を入力します(例: MyProject-CI-Key)。
    • Expires in: キーの有効期限を選択します。セキュリティのため、必要以上に長くしないことを推奨します。
    • Scopes: Push スコープを選択し、パッケージのプッシュ権限を付与します。必要に応じて Package pattern で特定のパッケージのみに限定することも可能ですが、ここでは *(すべて)で構いません。
  5. キーの生成とコピー: 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の設定方法

  1. リポジトリのSettingsに移動: GitHubリポジトリのページで Settings タブをクリックします。
  2. Secrets and variables > Actions を選択: 左側のメニューから Secrets and variables を展開し、Actions をクリックします。
  3. New repository secret をクリック: New repository secret ボタンをクリックして、新しいシークレットを作成します。
  4. シークレットの設定:
    • Name: NUGET_API_KEY と入力します。これは、ワークフローファイル(.yml)で {{ secrets.NUGET_API_KEY }} として参照される名前です。
    • Secret: NuGet.orgから取得したAPIキーをここに貼り付けます。
  5. 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