{"meta":{"title":"NuGetレジストリの利用","intro":"dotnetに NuGet パッケージを発行し、.NET プロジェクトの依存関係としてGitHub Packagesに格納されているパッケージを使用するように、GitHub Packagesコマンド ライン インターフェイス (CLI) を構成できます。","product":"GitHub Packages","breadcrumbs":[{"href":"/ja/packages","title":"GitHub Packages"},{"href":"/ja/packages/working-with-a-github-packages-registry","title":"GitHub Packagesレジストリの利用"},{"href":"/ja/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry","title":"NuGetレジストリ"}],"documentType":"article"},"body":"# NuGetレジストリの利用\n\ndotnetに NuGet パッケージを発行し、.NET プロジェクトの依存関係としてGitHub Packagesに格納されているパッケージを使用するように、GitHub Packagesコマンド ライン インターフェイス (CLI) を構成できます。\n\n<!-- 2148AF7B-5FF8-4B28-A808-D692FEE2225A -->\n\n## GitHub Packages に認証を行う\n\n> \\[!NOTE]\n> GitHub Packages では、 personal access token (classic)を使用した認証のみがサポートされます。 詳しくは、「[個人用アクセス トークンを管理する](/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)」をご覧ください。\n\n非公開パッケージ、内部パッケージ、公開パッケージを発行、インストール、削除するには、アクセス トークンが必要です。\n\npersonal access token (classic)、あるいは GitHub Packages API で認証を受けるのに、GitHub を利用できます。 personal access token (classic) を作成するときは、必要に応じてさまざまなスコープをトークンに割り当てることができます。 personal access token (classic) のパッケージ関連のスコープについては、「[GitHub Packagesの権限について](/ja/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries)」を参照してください。\n\nGitHub Packagesワークフロー内でGitHub Actionsレジストリに認証を受けるには、以下の方法が使えます。\n\n* `GITHUB_TOKEN` では、ワークフロー リポジトリに関連付けられているパッケージを発行します。\n* 他のプライベート リポジトリに関連付けられたパッケージをインストールするために、少なくとも `read:packages` スコープが設定された personal access token (classic) (リポジトリにパッケージへの読み取りアクセス権が付与されている場合は、`GITHUB_TOKEN` を使用できます)。 「[パッケージのアクセス制御と可視性の設定](/ja/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)」を参照してください)。\n\n### GitHub Actions ワークフローでの認証\n\nこのレジストリでは、詳細なアクセス許可がサポートされています。\n詳細なアクセス許可をサポートするレジストリの場合、 GitHub Actions ワークフローがレジストリに対する認証に personal access token を使用している場合は、 `GITHUB_TOKEN`を使用するようにワークフローを更新することを強くお勧めします。\npersonal access tokenを使用してレジストリに対して認証を行うワークフローの更新に関するガイダンスについては、[GitHub Actionsでのパッケージの公開とインストール](/ja/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-a-registry-using-a-personal-access-token) を参照してください。\n\n> \\[!NOTE]\n> REST API を使ってパッケージを削除および復元する GitHub Actions ワークフローの機能は、現在 パブリック プレビュー 段階であり、変更される可能性があります。\n\nトークンにパッケージへのアクセス許可が`GITHUB_TOKEN`されている場合は、GitHub Actions ワークフローの`admin`を使用して、REST API を使用してパッケージを削除または復元できます。 ワークフローを使ってパッケージを発行するリポジトリと、パッケージに明示的に接続したリポジトリには、リポジトリ内のパッケージに対する `admin` アクセス許可が自動的に付与されます。\n\n`GITHUB_TOKEN` の詳細については、「[ワークフローでの認証に GITHUB\\_TOKEN を使用する](/ja/actions/tutorials/authenticate-with-github_token#using-the-github_token-in-a-workflow)」を参照してください。 アクションでレジストリを使うときのベスト プラクティスについて詳しくは、「[危険にさらされたランナー](/ja/actions/concepts/security/compromised-runners#cross-repository-access)」をご覧ください。\n\nGitHub Packages ワークフローで GitHub Actions に認証するには、リポジトリ内の nuget.config ファイルに `GITHUB_TOKEN` をハードコーディングする代わりに、personal access token を使用して次のコマンドを実行します。\n\n```shell\ndotnet nuget add source --username USERNAME --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github \"https://nuget.pkg.github.com/NAMESPACE/index.json\"\n```\n\n`NAMESPACE` を、パッケージのスコープ先であり、個人アカウントまたは組織の名前に置き換えてください。\n\n`USERNAME` を認証済みソースに接続するときに使用されるユーザー名で置き換えます。\n\nまた、パッケージに対するアクセス許可を個別に付与することも選択できますGitHub Codespaces とGitHub Actions。 詳細については、「[パッケージのアクセス制御と可視性の設定](/ja/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-github-codespaces-access-to-your-package)」および「[パッケージのアクセス制御と可視性の設定](/ja/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package)」を参照してください。\n\n### personal access tokenを使用した認証の実行\n\n> \\[!NOTE]\n> GitHub Packages では、 personal access token (classic)を使用した認証のみがサポートされます。 詳しくは、「[個人用アクセス トークンを管理する](/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)」をご覧ください。\n\n非公開パッケージ、内部パッケージ、公開パッケージを発行、インストール、削除するには、アクセス トークンが必要です。\n\npersonal access token (classic)、あるいは GitHub Packages API で認証を受けるのに、GitHub を利用できます。 personal access token (classic) を作成するときは、必要に応じてさまざまなスコープをトークンに割り当てることができます。 personal access token (classic) のパッケージ関連のスコープについては、「[GitHub Packagesの権限について](/ja/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries)」を参照してください。\n\nGitHub Packagesワークフロー内でGitHub Actionsレジストリに認証を受けるには、以下の方法が使えます。\n\n* `GITHUB_TOKEN` では、ワークフロー リポジトリに関連付けられているパッケージを発行します。\n* 他のプライベート リポジトリに関連付けられたパッケージをインストールするために、少なくとも `read:packages` スコープが設定された personal access token (classic) (リポジトリにパッケージへの読み取りアクセス権が付与されている場合は、`GITHUB_TOKEN` を使用できます)。 「[パッケージのアクセス制御と可視性の設定](/ja/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)」を参照してください)。\n\npersonal access token (classic) でパッケージを発行およびインストールするには、適切なスコープで GitHub Packages を使う必要があります。 詳しくは、「[GitHub Packages の概要](/ja/packages/learn-github-packages/introduction-to-github-packages#authenticating-to-github-packages)」をご覧ください。\n\nGitHub Packages コマンドライン インターフェイス (CLI) を使用して `dotnet` に認証するには、プロジェクト ディレクトリに *nuget.config* ファイルを作成し、GitHub Packages CLI クライアントの `packageSources` の下で、`dotnet` をソースとして指定します。\n\n以下のように置き換えてください。\n\n* `USERNAME`\n  GitHubの個人用アカウントの名前を指定します。\n* `TOKEN` を personal access token (classic)します。\n* `NAMESPACE`パッケージのスコープ先となっている個人アカウントまたは組織の名前で、。\n\n```xml\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <packageSources>\n        <clear />\n        <add key=\"github\" value=\"https://nuget.pkg.github.com/NAMESPACE/index.json\" />\n    </packageSources>\n    <packageSourceCredentials>\n        <github>\n            <add key=\"Username\" value=\"USERNAME\" />\n            <add key=\"ClearTextPassword\" value=\"TOKEN\" />\n        </github>\n    </packageSourceCredentials>\n</configuration>\n```\n\n## パッケージの公開\n\n> \\[!NOTE]\n> NuGet パッケージ バージョンの `nupkg` アーカイブのサイズは、2.147 GB 未満である必要があります。\n\nパッケージをGitHub Packagesに発行するには、nuget.configファイルを使用して認証するか、\\_\\_ で`--api-key`コマンド ライン オプションを使用するか、GitHubコマンド ライン インターフェイス (CLI) を使用してコマンド ラインから直接実行できるコマンドを使用します。\n\n`OWNER`をユーザー名または会社名に置き換え、`YOUR_GITHUB_PAT`をpersonal access tokenに置き換えます。\n\n```shell\ndotnet nuget add source --username OWNER --password YOUR_GITHUB_PAT --store-password-in-clear-text --name github \"https://nuget.pkg.github.com/OWNER/index.json\"\n```\n\nNuGet レジストリを使用すると、Organization または個人のアカウント内にパッケージを格納し、パッケージをリポジトリに関連付けることができます。 権限をリポジトリから継承するか、リポジトリとは別に細かい権限を設定するかを選ぶことができます。\n\nパッケージを最初に公開する際のデフォルトの可視性はプライベートです。 可視性の変更やアクセス許可の設定については、「[パッケージのアクセス制御と可視性の設定](/ja/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)」を参照してください。 発行済みパッケージとリポジトリのリンクの詳細については、 [リポジトリのパッケージへの接続](/ja/packages/learn-github-packages/connecting-a-repository-to-a-package) を参照してください。\n\nprojectの `RepositoryURL` ファイルで \\_\\_ を指定すると、発行されたパッケージは指定されたリポジトリに自動的に接続されます。 詳細については、「[NuGetレジストリの利用](/ja/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry#publishing-a-package-using-a-nugetconfig-file)」を参照してください。 既に公開されているパッケージをリポジトリにリンクする方法については、[リポジトリのパッケージへの接続](/ja/packages/learn-github-packages/connecting-a-repository-to-a-package) を参照してください。\n\n### GitHub personal access tokenを API キーとして使用してパッケージを発行する\n\npersonal access token のアカウントで使用する GitHub をまだお持ちでない場合は、「[個人用アクセス トークンを管理する](/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)」を参照してください。\n\n1. 新しいprojectを作成します。\n   `PROJECT_NAME` を、projectに付ける名前に置き換えます。\n\n   ```shell\n   dotnet new console --name PROJECT_NAME\n   ```\n\n2. projectをパッケージ化します。\n\n   ```shell\n   dotnet pack --configuration Release\n   ```\n\n3. personal access tokenを API キーとして使用してパッケージを発行します。\n   `PROJECT_NAME`をプロジェクト名に、`1.0.0`をパッケージのバージョン番号に、`YOUR_GITHUB_PAT`をお使いのpersonal access tokenに置き換えます。\n\n   ```shell\n   dotnet nuget push \"bin/Release/PROJECT_NAME.1.0.0.nupkg\" --api-key YOUR_GITHUB_PAT --source \"github\"\n   ```\n\nパッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しくは、「[パッケージの表示](/ja/packages/learn-github-packages/viewing-packages)」をご覧ください。\n\n### *nuget.config* ファイルを使用してパッケージを公開する\n\n発行時にパッケージをリポジトリにリンクする場合は`OWNER` ファイルで指定されたリポジトリの\\_\\_ が、`NAMESPACE` 認証ファイルで使用する\\_\\_ と一致している必要があります。\n*.csproj* ファイルでバージョン番号を指定もしくはインクリメントし、`dotnet pack` コマンドを使用してそのバージョンのための *.nuspec* ファイルを作成してください。 パッケージの作成の詳細については、Microsoft ドキュメントの「[パッケージの作成と公開](https://docs.microsoft.com/nuget/quickstart/create-and-publish-a-package-using-the-dotnet-cli)」を参照してください。\n\n> \\[!NOTE]\n> リポジトリにリンクされているパッケージを公開した場合、organization でアクセス許可の自動継承が無効にされていない限り、パッケージはリンクされたリポジトリのアクセス許可を自動的に継承し、リンクされたリポジトリ内の GitHub Actions ワークフローは自動的にパッケージにアクセスできるようになります。 詳しくは、「[パッケージのアクセス制御と可視性の設定](/ja/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#about-inheritance-of-access-permissions)」をご覧ください。\n\n1. GitHub Packagesに認証を受けてください。 詳しくは、「[GitHub Packages への認証](#authenticating-to-github-packages)」をご覧ください。\n\n2. 新しいprojectを作成します。\n   `PROJECT_NAME` を、projectに付ける名前に置き換えます。\n\n   ```shell\n   dotnet new console --name PROJECT_NAME\n   ```\n\n3. あなたのプロジェクトの特定の情報を、末尾が \\_.csproj\\_で終わるプロジェクトファイルに追加します。 必ず次のように置き換えてください。\n\n   * `1.0.0` をパッケージのバージョン番号に。\n   * `OWNER`\n     パッケージをリンクする先のリポジトリを所有する個人アカウントまたは組織の名前を指定して\n   * `REPOSITORY` パッケージを接続するリポジトリの名前を指定します。\n\n   ```xml\n   <Project Sdk=\"Microsoft.NET.Sdk\">\n\n     <PropertyGroup>\n       <OutputType>Exe</OutputType>\n       <TargetFramework>netcoreapp3.0</TargetFramework>\n       <PackageId>PROJECT_NAME</PackageId>\n       <Version>1.0.0</Version>\n       <Authors>AUTHORS</Authors>\n       <Company>COMPANY_NAME</Company>\n       <PackageDescription>PACKAGE_DESCRIPTION</PackageDescription>\n       <RepositoryUrl>https://github.com/OWNER/REPOSITORY</RepositoryUrl>\n     </PropertyGroup>\n\n   </Project>\n   ```\n\n4. projectをパッケージ化します。\n\n   ```shell\n   dotnet pack --configuration Release\n   ```\n\n5. 指定した `key` を *nuget.config* ファイルで使用してパッケージを公開します。\n   `PROJECT_NAME`をprojectの名前に置き換え、`1.0.0` をパッケージのバージョン番号に置き換えます。\n\n   ```shell\n   dotnet nuget push \"bin/Release/PROJECT_NAME.1.0.0.nupkg\" --source \"github\"\n   ```\n\nパッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しくは、「[パッケージの表示](/ja/packages/learn-github-packages/viewing-packages)」をご覧ください。\n\n## 同じリポジトリへの複数パッケージの公開\n\n複数のパッケージを同じリポジトリに接続するには、すべての GitHub プロジェクト ファイルの `RepositoryURL` フィールドで同じ\\_\\_ リポジトリ URL を使用します。\nGitHub は、そのフィールドに基づいてリポジトリと一致します。\n\n次の例では、プロジェクト MY\\_APP とプロジェクト MY\\_OTHER\\_APP が同じリポジトリに公開されます。\n\n```xml\n<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp3.0</TargetFramework>\n    <PackageId>MY_APP</PackageId>\n    <Version>1.0.0</Version>\n    <Authors>Octocat</Authors>\n    <Company>GitHub</Company>\n    <PackageDescription>This package adds a singing Octocat!</PackageDescription>\n    <RepositoryUrl>https://github.com/my-org/my-repo</RepositoryUrl>\n  </PropertyGroup>\n\n</Project>\n```\n\n```xml\n<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp3.0</TargetFramework>\n    <PackageId>MY_OTHER_APP</PackageId>\n    <Version>1.0.0</Version>\n    <Authors>Octocat</Authors>\n    <Company>GitHub</Company>\n    <PackageDescription>This package adds a dancing Octocat!</PackageDescription>\n    <RepositoryUrl>https://github.com/my-org/my-repo</RepositoryUrl>\n  </PropertyGroup>\n\n</Project>\n```\n\n## パッケージのインストール\n\nプロジェクトで GitHub のパッケージを使用することは、 *nuget.org* のパッケージの使用と似ています。パッケージ名とバージョンを指定して、パッケージの依存関係を *.csproj* ファイルに追加します。 projectで *.csproj* ファイルを使用する方法の詳細については、Microsoft ドキュメントの「[Working with NuGet packages](https://docs.microsoft.com/nuget/consume-packages/overview-and-workflow)」を参照してください。\n\n1. GitHub Packagesに認証を受けてください。 詳しくは、「[GitHub Packages への認証](#authenticating-to-github-packages)」をご覧ください。\n\n2. パッケージを使用するには、`ItemGroup` を追加し、`PackageReference` project ファイルの \\_\\_ フィールドを構成します。\n   `PACKAGE_NAME` の `Include=\"PACKAGE_NAME\"` 値をパッケージ依存関係に置き換え、`X.X.X` の `Version=\"X.X.X\"` 値を、使うパッケージのバージョンに置き換えます。\n\n   ```xml\n   <Project Sdk=\"Microsoft.NET.Sdk\">\n\n     <PropertyGroup>\n       <OutputType>Exe</OutputType>\n       <TargetFramework>netcoreapp3.0</TargetFramework>\n       <PackageId>My-app</PackageId>\n       <Version>1.0.0</Version>\n      <Authors>Octocat</Authors>\n       <Company>GitHub</Company>\n      <PackageDescription>This package adds an Octocat!</PackageDescription>\n       <RepositoryUrl>https://github.com/OWNER/REPOSITORY</RepositoryUrl>\n     </PropertyGroup>\n\n     <ItemGroup>\n       <PackageReference Include=\"PACKAGE_NAME\" Version=\"X.X.X\" />\n     </ItemGroup>\n\n   </Project>\n   ```\n\n3. `restore` コマンドを使用してパッケージをインストールします。\n\n   ```shell\n   dotnet restore\n   ```\n\n## トラブルシューティング\n\n`GITHUB_TOKEN`を使用してGitHub Packages ワークフロー内のGitHub Actions レジストリに対する認証を行う場合、トークンは、ワークフローが実行されている場所以外の別のリポジトリ内のプライベート リポジトリ ベースのパッケージにアクセスできません。 他のリポジトリに関連付けられているパッケージにアクセスするには、代わりにpersonal access token (classic) スコープを持つ`read:packages`を生成し、このトークンをシークレットとして渡します。\n\n### パブリック パッケージを復元するときの断続的な 403 エラー\n\n\\_\nGitHub Packagesを nuget.org\\_ と共に使用していて、標準のパブリック パッケージ (`Microsoft.Extensions.*` など) を復元するときに断続的な 403 Forbidden エラーが発生する場合は、NuGet がすべてのパッケージに対して構成されているすべてのパッケージ ソースに対してクエリを実行するためです。\nGitHub Packages認証が一時的に失敗すると、GitHub Packagesに存在しないパッケージであっても、復元全体がブロックされる可能性があります。\n\nこれを回避するには、 [NuGet パッケージ ソース マッピング](https://learn.microsoft.com/nuget/consume-packages/package-source-mapping) を使用して、パッケージを特定のソースにルーティングします。\n\n置換前のコード:\n\n* `NAMESPACE`\n  GitHub Packages NuGet フィードを所有する個人アカウントまたは組織の名前を指定します。\n* `PACKAGE-ID-PREFIX` には、 GitHub Packagesでホストされているパッケージに使用する NuGet パッケージ ID プレフィックスが付いています。 複数のプレフィックスを使用する場合は、各プレフィックスに `<package>` エントリを追加します。\n\n```xml\n<configuration>\n    <packageSources>\n        <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\n        <add key=\"github\" value=\"https://nuget.pkg.github.com/NAMESPACE/index.json\" />\n    </packageSources>\n    <packageSourceMapping>\n        <packageSource key=\"nuget.org\">\n            <package pattern=\"*\" />\n        </packageSource>\n        <packageSource key=\"github\">\n            <package pattern=\"PACKAGE-ID-PREFIX.*\" />\n        </packageSource>\n    </packageSourceMapping>\n</configuration>\n```\n\nNuGet では [最も具体的な照合パターン](https://learn.microsoft.com/nuget/consume-packages/package-source-mapping#package-pattern-precedence)が使用されるため、 `PACKAGE-ID-PREFIX.*` に一致するパッケージは GitHub Packagesからのみフェッチされ、他のすべてのパッケージは *nuget.org* からフェッチされます。これにより、プライベート パッケージが GitHub Packages フィードからのみ取得できるようにすることで、依存関係の混乱攻撃を防ぐのにも役立ちます。\n\n## 参考資料\n\n* [パッケージを削除および復元する](/ja/packages/learn-github-packages/deleting-and-restoring-a-package)"}