Skip to main content

NuGetレジストリの利用

GitHub Packages に NuGet パッケージを公開し、GitHub Packages に保存されたパッケージを依存関係として .NET プロジェクトで利用するよう dotnet コマンドライン インターフェイス (CLI) を構成できます。

Note

サイト管理者はサポートされている各パッケージの種類を有効または無効にできるので、このパッケージの種類はインスタンスで利用できない可能性があります。 詳しくは、「Enterprise 向けのパッケージエコシステムサポートを設定する」を参照してください。

GitHub Packages への認証を行う

Note

GitHub Packages では、personal access token (classic)を使用した認証のみがサポートされています。 詳しくは、「個人用アクセス トークンを管理する」を参照してください。

非公開パッケージ、内部パッケージ、公開パッケージを発行、インストール、削除するには、アクセス トークンが必要です。

personal access token (classic) を使って、GitHub Packages または GitHub Enterprise Server API の認証を受けることができます。 personal access token (classic) を作成するときは、必要に応じてさまざまなスコープをトークンに割り当てることができます。 personal access token (classic) のパッケージ関連のスコープの詳細については、「GitHub Packagesの権限について」を参照してください。

GitHub Actionsワークフロー内でGitHub Packagesレジストリに認証を受けるには、以下の方法が使えます。

  • GITHUB_TOKEN では、ワークフロー リポジトリに関連付けられているパッケージを発行します。
  • read:packages 以上のスコープが設定された personal access token (classic) では、他のプライベート リポジトリ (GITHUB_TOKEN ではアクセスできない) に関連付けられているパッケージがインストールされます。

GitHub Actions ワークフローにおける認証

リポジトリ内の nuget.config ファイルでpersonal access tokenをハードコーディングするのでなく、GITHUB_TOKEN を使用して GitHub Actions ワークフローで GitHub Packages に対して認証を行うには、以下のコマンドを使用してください。

dotnet nuget add source --username USERNAME --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.HOSTNAME/NAMESPACE/index.json"

NAMESPACE を、パッケージがホストされているリポジトリを所有しており、個人アカウントまたは Organization の名前に置き換えます。

USERNAME を認証済みソースに接続するときに使用されるユーザー名で置き換えます。

GitHub Actions ワークフローで使われる GITHUB_TOKEN の詳細については、「自動トークン認証」を参照してください。

personal access token で認証を行う

Note

GitHub Packages では、personal access token (classic)を使用した認証のみがサポートされています。 詳しくは、「個人用アクセス トークンを管理する」を参照してください。

非公開パッケージ、内部パッケージ、公開パッケージを発行、インストール、削除するには、アクセス トークンが必要です。

personal access token (classic) を使って、GitHub Packages または GitHub Enterprise Server API の認証を受けることができます。 personal access token (classic) を作成するときは、必要に応じてさまざまなスコープをトークンに割り当てることができます。 personal access token (classic) のパッケージ関連のスコープの詳細については、「GitHub Packagesの権限について」を参照してください。

GitHub Actionsワークフロー内でGitHub Packagesレジストリに認証を受けるには、以下の方法が使えます。

  • GITHUB_TOKEN では、ワークフロー リポジトリに関連付けられているパッケージを発行します。
  • read:packages 以上のスコープが設定された personal access token (classic) では、他のプライベート リポジトリ (GITHUB_TOKEN ではアクセスできない) に関連付けられているパッケージがインストールされます。

GitHub Packages でパッケージを発行およびインストールするには、適切なスコープで personal access token (classic) を使う必要があります。 詳しくは、「GitHub Packages の概要」を参照してください。

dotnet コマンド ライン インターフェイス (CLI) で GitHub Packages に対して認証を行うには、dotnet CLI クライアントの packageSources に GitHub Packages をソースとして指定して、プロジェクト ディレクトリに nuget.config ファイルを作成してください。

以下のように置き換えてください。

  • USERNAME を GitHub の個人アカウントの名前に。
  • TOKEN をpersonal access token (classic) に。
  • NAMESPACE を、パッケージがホストされているリポジトリを所有しており、個人アカウントまたは Organization の名前に。
  • HOSTNAME を お使いの GitHub Enterprise Server インスタンス のホスト名に。

インスタンスで Subdomain Isolation が有効になっている場合:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="github" value="https://nuget.HOSTNAME/NAMESPACE/index.json" />
    </packageSources>
    <packageSourceCredentials>
        <github>
            <add key="Username" value="USERNAME" />
            <add key="ClearTextPassword" value="TOKEN" />
        </github>
    </packageSourceCredentials>
</configuration>

インスタンスで Subdomain Isolation が無効になっている場合:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="github" value="https://HOSTNAME/_registry/nuget/NAMESPACE/index.json" />
    </packageSources>
    <packageSourceCredentials>
        <github>
            <add key="Username" value="USERNAME" />
            <add key="ClearTextPassword" value="TOKEN" />
        </github>
    </packageSourceCredentials>
</configuration>

パッケージの公開

nuget.config ファイルを使用して認証を行うか、GitHub personal access token (classic) とともに --api-key コマンド ライン オプションを使用するか、dotnet コマンド ライン インターフェイスパッケージ (CLI) を用いたコマンド ラインから直接実行できるコマンドを使うことで、GitHub Packages にパッケージを公開できます。

OWNER をユーザー名または会社名に置き換え、YOUR_GITHUB_PAT を personal access token に置き換えます。

dotnet nuget add source --username OWNER --password YOUR_GITHUB_PAT --store-password-in-clear-text --name github "https://nuget.HOSTNAME/OWNER/index.json"

GitHub personal access token を API キーとして使用してパッケージを公開する

GitHub のアカウントで使用する personal access token がまだない場合は、「個人用アクセス トークンを管理する」を参照してください。

  1. 新しいプロジェクトを作成します。 PROJECT_NAME は、プロジェクトに付ける名前に置き換えます。

    dotnet new console --name PROJECT_NAME
    
  2. プロジェクトをパッケージ化してください。

    dotnet pack --configuration Release
    
  3. personal access token を API キーとして使用してパッケージを発行します。 PROJECT_NAME はプロジェクトの名前に、1.0.0 はパッケージのバージョン番号に、YOUR_GITHUB_PAT は personal access token に置き換えます。

    dotnet nuget push "bin/Release/PROJECT_NAME.1.0.0.nupkg" --api-key YOUR_GITHUB_PAT --source "github"
    

パッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しくは、「パッケージの表示」を参照してください。

nuget.config ファイルを使用してパッケージを公開する

発行時に .csproj ファイルに指定されているリポジトリの OWNER は、nuget.config 認証ファイルで使っている NAMESPACE と一致する必要があります。 .csproj ファイルでバージョン番号を指定もしくはインクリメントし、dotnet pack コマンドを使用してそのバージョンのための .nuspec ファイルを作成してください。 パッケージの作成の詳細については、Microsoft ドキュメントの「パッケージの作成と公開」を参照してください。

  1. GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。

  2. 新しいプロジェクトを作成します。 PROJECT_NAME は、プロジェクトに付ける名前に置き換えます。

    dotnet new console --name PROJECT_NAME
    
  3. プロジェクト固有の情報をプロジェクト ファイル (末尾が .csproj のファイル) に追加します。 必ず次のように置き換えてください。

    • 1.0.0 をパッケージのバージョン番号に。
    • OWNER を、パッケージのリンク先にしたいリポジトリを所有しているパッケージを公開。
    • REPOSITORY を、パッケージを接続するリポジトリの名前に。
    • HOSTNAME を お使いの GitHub Enterprise Server インスタンス のホスト名に。
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>PROJECT_NAME</PackageId>
        <Version>1.0.0</Version>
        <Authors>AUTHORS</Authors>
        <Company>COMPANY_NAME</Company>
        <PackageDescription>PACKAGE_DESCRIPTION</PackageDescription>
        <RepositoryUrl>https://HOSTNAME/OWNER/REPOSITORY</RepositoryUrl>
      </PropertyGroup>
    
    </Project>
    
  4. プロジェクトをパッケージ化してください。

    dotnet pack --configuration Release
    
  5. nuget.config ファイルで指定した key を使用してパッケージを公開します。 PROJECT_NAME をプロジェクトの名前に、1.0.0 をパッケージのバージョン番号に置き換えます。

    dotnet nuget push "bin/Release/PROJECT_NAME.1.0.0.nupkg" --source "github"
    

パッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しくは、「パッケージの表示」を参照してください。

同じリポジトリへの複数パッケージの公開

複数のパッケージを同じリポジトリに接続するには、同じ GitHub リポジトリの URL をすべての .csproj プロジェクト ファイルの RepositoryURL フィールドで使います。 GitHubは、そのフィールドに基づいてリポジトリをマッチします。

次の例では、プロジェクト MY_APP とプロジェクト MY_OTHER_APP が同じリポジトリに公開されます。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>MY_APP</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octocat</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds a singing Octocat!</PackageDescription>
    <RepositoryUrl>https://HOSTNAME/my-org/my-repo</RepositoryUrl>
  </PropertyGroup>

</Project>
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>MY_OTHER_APP</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octocat</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds a dancing Octocat!</PackageDescription>
    <RepositoryUrl>https://HOSTNAME/my-org/my-repo</RepositoryUrl>
  </PropertyGroup>

</Project>

パッケージのインストール

プロジェクトで GitHub のパッケージを使うことは、nuget.org のパッケージを使うことと似ています。パッケージの名前とバージョンを指定して、パッケージの依存関係を .csproj ファイルに追加してください。 プロジェクトで .csproj ファイルを使う方法の詳細については、Microsoft ドキュメントの NuGet パッケージの利用に関するページを参照してください。

  1. GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。

  2. パッケージを使用するには、 .csproj プロジェクト ファイルで ItemGroup を追加し、PackageReference フィールドを構成します。 Include="PACKAGE_NAME"PACKAGE_NAME 値をパッケージ依存関係に置き換え、Version="X.X.X"X.X.X 値を、使うパッケージのバージョンに置き換えます。

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>My-app</PackageId>
        <Version>1.0.0</Version>
       <Authors>Octocat</Authors>
        <Company>GitHub</Company>
       <PackageDescription>This package adds an Octocat!</PackageDescription>
        <RepositoryUrl>https://HOSTNAME/OWNER/REPOSITORY</RepositoryUrl>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="PACKAGE_NAME" Version="X.X.X" />
      </ItemGroup>
    
    </Project>
    
  3. restore コマンドを使用してパッケージをインストールします。

    dotnet restore
    

トラブルシューティング

想定されているリポジトリに .csproj 内の RepositoryUrl が設定されていない場合、NuGet パッケージのプッシュに失敗する可能性があります。

nuspec ファイルを使っている場合は、repository 要素と必須の type 属性と url 属性が含まれていることを確認してください。

GITHUB_TOKEN を使って GitHub Actions ワークフロー内の GitHub Packages レジストリの認証を受けている場合、そのトークンからは、ワークフローの実行場所とは異なるリポジトリ内にあるプライベート リポジトリベースのパッケージにアクセスできません。 他のリポジトリに関連付けられたパッケージにアクセスするには、代わりにスコープが read:packages の personal access token (classic) を生成し、このトークンをシークレットとして渡します。

参考資料