Skip to main content

NuGetレジストリの利用

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

GitHub Packages は、GitHub Free、GitHub Pro、Organization の GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 3.0 以降、GitHub AE で利用できます。 GitHub Enterprise Server インスタンスのアップグレードについて詳しくは、「新しいリリースへのアップグレードについて」を参照してください。また、現在のリリース バージョンからのアップグレード パスについては、アップグレード アシスタント を参照してください。

注: サイト管理者はそれぞれのサポートされているパッケージの種類を有効化あるいは無効化できるので、このパッケージの種類はインスタンスで利用できないかもしれません。 詳細については、「エンタープライズ向けのパッケージ サポートの構成」を参照してください。

GitHub Packages への認証を行う

パッケージを発行、インストール、および削除するには、アクセス トークンが必要です。

個人アクセス トークン (PAT) を使用し、GitHub Packages または GitHub Enterprise Server API の認証を受けることができます。 個人トークンを作成する際には、必要に応じて様々なスコープをトークンに割り当てできます。 PAT のパッケージ関連のスコープの詳細については、「GitHub パッケージのアクセス許可について」を参照してください。

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

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

GitHub Actions における GITHUB_TOKEN での認証

リポジトリ内の nuget.config ファイルでトークンをハードコーディングする代わりに、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/OWNER/index.json"

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

個人アクセストークンでの認証

GitHub Packages内でパッケージを公開及びインストールするためには、適切なスコープで個人アクセストークンを使わなければなりません。 詳しくは、「GitHub Packages について」をご覧ください。

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

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

  • USERNAME を GitHub の個人アカウントの名前に。
  • TOKEN を個人用アクセス トークンに。
  • OWNER を、プロジェクトを含むリポジトリを所有しているユーザーまたは Organization アカウントの名前に。
  • HOSTNAME を your GitHub Enterprise Server instance のホスト名に。

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

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

パッケージの公開

nuget.config ファイルを使用して認証を行うか、コマンド ライン オプションの --api-key と GitHub 個人用アクセス トークン (PAT) を使うことで、パッケージを GitHub Packages に公開できます。

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

your GitHub Enterprise Server instance のアカウントで使う PAT がまだない場合は、「個人アクセス トークンを作成する」をご覧ください。

  1. 新しいプロジェクトを作成します。

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

    dotnet pack --configuration Release
  3. PATをAPIキーとして使用して、パッケージを公開します。

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

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

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

公開の際には、nuget.config 認証ファイルで使う csproj ファイルで、OWNER に同じ値を使う必要があります。 .csproj ファイルでバージョン番号を指定もしくはインクリメントし、dotnet pack コマンドを使用してそのバージョンのための .nuspec ファイルを作成してください。 パッケージの作成について詳しくは、Microsoft のドキュメントの「パッケージの作成と公開」をご覧ください。

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

  2. 新しいプロジェクトを作成します。

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

    • OWNER を、プロジェクトを含むリポジトリを所有しているユーザーまたは Organization アカウントの名前に。
    • REPOSITORY を、公開したいパッケージを含むリポジトリの名前に。
    • 1.0.0 をパッケージのバージョン番号に。
    • HOSTNAME を your GitHub Enterprise Server instance のホスト名に。
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>OctocatApp</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>
    
    </Project>
    
  4. プロジェクトをパッケージ化してください。

    dotnet pack --configuration Release
  5. nuget.config ファイルで指定した key を使用してパッケージを公開します。

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

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

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

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

たとえば、以下の OctodogAppOctocatApp プロジェクトは同じリポジトリに公開されます。

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>OctodogApp</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octodog</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds an Octodog!</PackageDescription>
    <RepositoryUrl>https://HOSTNAME/octo-org/octo-cats-and-dogs</RepositoryUrl>
  </PropertyGroup>

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>OctocatApp</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octocat</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds an Octocat!</PackageDescription>
    <RepositoryUrl>https://HOSTNAME/octo-org/octo-cats-and-dogs</RepositoryUrl>
  </PropertyGroup>

</Project>

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

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

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

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

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>OctocatApp</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="OctokittenApp" Version="12.0.2" />
      </ItemGroup>
    
    </Project>
    
  3. restore コマンドを使用してパッケージをインストールします。

    dotnet restore

トラブルシューティング

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

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

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

参考資料