{"meta":{"title":"Node.jsパッケージの公開","intro":"このチュートリアルでは、継続的インテグレーション (CI) ワークフローの一部として、Node.js パッケージをレジストリに公開する方法について学びます。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/enterprise-cloud@latest/actions","title":"GitHub Actions"},{"href":"/ja/enterprise-cloud@latest/actions/tutorials","title":"チュートリアル"},{"href":"/ja/enterprise-cloud@latest/actions/tutorials/publish-packages","title":"パッケージの公開"},{"href":"/ja/enterprise-cloud@latest/actions/tutorials/publish-packages/publish-nodejs-packages","title":"Node.js パッケージを公開する"}],"documentType":"article"},"body":"# Node.jsパッケージの公開\n\nこのチュートリアルでは、継続的インテグレーション (CI) ワークフローの一部として、Node.js パッケージをレジストリに公開する方法について学びます。\n\n## 概要\n\nこのガイドでは、継続的インテグレーション (CI) テストが成功した後、Node.js パッケージを GitHub Packages および npm レジストリに発行するワークフローを作成する方法について説明します。\n\n## 前提条件\n\nワークフローの設定オプションと、ワークフローファイルの作成方法についての基本的な知識を持っておくことをおすすめします。 詳しくは、「[ワークフローの書き込み](/ja/enterprise-cloud@latest/actions/how-tos/write-workflows)」をご覧ください。\n\nNode.js プロジェクト用に CI ワークフローを作る方法については、「[Node.js のビルドとテスト](/ja/enterprise-cloud@latest/actions/tutorials/build-and-test-code/nodejs)」をご覧ください。\n\nまた、以下の基本的な理解があれば役立ちます。\n\n* [npmレジストリの利用](/ja/enterprise-cloud@latest/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)\n* [変数に情報を格納する](/ja/enterprise-cloud@latest/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables)\n* [GitHub Actions でのシークレットの使用](/ja/enterprise-cloud@latest/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)\n* [ワークフローでの認証に GITHUB\\_TOKEN を使用する](/ja/enterprise-cloud@latest/actions/tutorials/authenticate-with-github_token)\n\n## パッケージの設定について\n\n`name` ファイル内の `version` および `package.json` フィールドでは、パッケージをレジストリにリンクするためにレジストリで使用される一意識別子を作成します。\n`description` ファイルに `package.json` フィールドを含めることによって、パッケージのリスト ページの概要を追加できます。 詳細については、npm ドキュメントの「[package.json ファイルの作成](https://docs.npmjs.com/creating-a-package-json-file)」と「[Node.js モジュールの作成](https://docs.npmjs.com/creating-node-js-modules)」を参照してください。\n\nローカルの `.npmrc` ファイルが存在し、`registry` 値が指定されている場合、`npm publish` コマンドでは `.npmrc` ファイルに構成されたレジストリが使用されます。 `setup-node` アクションを使用して、既定のレジストリとスコープを構成するローカルの `.npmrc` ファイルをランナーに作成できます。 `setup-node` アクションは、プライベート リポジトリへのアクセスや node パッケージの公開に使われる認証トークンも入力として受け付けます。 詳細については、[`setup-node`](https://github.com/actions/setup-node/) をご覧ください。\n\n`setup-node` アクションを使用して、ランナーにインストールされている Node.js バージョンを指定できます。\n\n`publishConfig` ファイルに `package.json` フィールドを構成するステップをワークフローに追加する場合は、`setup-node` アクションを使用して registry-url を指定する必要はありませんが、パッケージを公開するレジストリは 1 つに限られます。 詳細については、npm ドキュメントの「[publishConfig](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#publishconfig)」を参照してください。\n\n## npmレジストリへのパッケージの公開\n\n新しいリリースを公開するたびに、パッケージを公開するワークフローをトリガーできます。 次の例のプロセスは、type が `published` のリリース イベントがトリガーされたときに実行されます。 CI テストに合格すると、プロセスによってパッケージが npm レジストリにアップロードされます。 詳しくは、「[リポジトリのリリースを管理する](/ja/enterprise-cloud@latest/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release)」をご覧ください。\n\nワークフロー中で npm レジストリに対して認証を受けた操作を行うためには、npm の認証トークンをシークレットとして保存しなければなりません。 たとえば、`NPM_TOKEN` というリポジトリ シークレットを作成します。 詳しくは、「[GitHub Actions でのシークレットの使用](/ja/enterprise-cloud@latest/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)」をご覧ください。\n\n既定では、npm で `name` ファイルの `package.json` フィールドを使用して、公開されたパッケージの名前を判断します。 グローバルな名前空間に公開する場合は、パッケージ名だけを含める必要があります。 たとえば、`my-package` という名前のパッケージを `https://www.npmjs.com/package/my-package` に公開します。\n\nスコープのプレフィックスを含むパッケージを公開している場合は、そのスコープを `package.json` ファイルの名前に含めます。 たとえば、npm スコープのプレフィックスが \"octocat\" で、パッケージ名が \"hello-world\"、`name` ファイル内の `package.json` は `@octocat/hello-world` である必要があります。 npm パッケージでスコープ プレフィックスが使用され、そのパッケージがパブリックである場合は、オプション `npm publish --access public` を使用する必要があります。 これは、意図せずプライベートパッケージを公開してしまうことを防ぐためにnpmが必要とするオプションです。\n\n来歴付きでパッケージを公開するには、`--provenance` コマンドに `npm publish` フラグを指定します。 これにより、パッケージがビルドされた場所と方法を公開および検証可能に確立できるため、パッケージを使用するユーザーのサプライ チェーンセキュリティは強化されます。 詳細については、npm ドキュメントの [「実証ステートメントの生成](https://docs.npmjs.com/generating-provenance-statements) 」を参照してください。\n\nこの例では、`NPM_TOKEN` 環境変数に `NODE_AUTH_TOKEN` シークレットを格納します。\n`setup-node` アクションによって `.npmrc` ファイルが作成されると、`NODE_AUTH_TOKEN` 環境変数からトークンが参照されます。\n\n```yaml copy\nname: Publish Package to npmjs\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      id-token: write\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to npm\n      - uses: actions/setup-node@v7\n        with:\n          node-version: '20.x'\n          registry-url: 'https://registry.npmjs.org'\n      - run: npm ci\n      - run: npm publish --provenance --access public\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\n上の例では、`setup-node` アクションによって、ランナーに次の内容の `.npmrc` ファイルが作成されます。\n\n```shell\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\nregistry=https://registry.npmjs.org/\nalways-auth=true\n```\n\n資格情報を適切に構成するには、`registry-url` で `https://registry.npmjs.org/` を `setup-node` に設定する必要があることに注意してください。\n\n## GitHub Packages へのパッケージの発行\n\n新しいリリースを公開するたびに、パッケージを公開するワークフローをトリガーできます。 次の例のプロセスは、type が `published` のリリース イベントがトリガーされたときに実行されます。 CI テストに合格すると、プロセスによってパッケージが GitHub Packagesにアップロードされます。 詳しくは、「[リポジトリのリリースを管理する](/ja/enterprise-cloud@latest/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release)」をご覧ください。\n\n### 宛先リポジトリの設定\n\nGitHub Packages キーを使用してパッケージを`repository`にリンクすることは省略可能です。\n`repository` ファイルに `package.json` キーを指定しない場合、パッケージは発行時にリポジトリにリンクされませんが、後でパッケージをリポジトリに接続することもできます。\n\n`repository` ファイルに`package.json` キーを指定した場合、そのキー内のリポジトリがGitHub Packagesの宛先 npm レジストリとして使用されます。 たとえば、次の`package.json`を発行すると、`my-package``octocat/my-other-repo` リポジトリに発行GitHubという名前のパッケージが作成されます。\n\n```json\n{\n  \"name\": \"@octocat/my-package\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/octocat/my-other-repo.git\"\n  },\n}\n```\n\n### 宛先リポジトリへの認証\n\nワークフロー内の GitHub Packages レジストリに対して認証された操作を実行するには、 `GITHUB_TOKEN`を使用できます。 ワークフロー内のジョブが開始されるたびに、`GITHUB_TOKEN` シークレットはそのリポジトリのアクセス トークンに設定されます。 ワークフロー ファイルでこのアクセス トークンにアクセス許可を設定して、`contents` アクセス許可に対する読み取りアクセスと、`packages` アクセス許可に対する書き込みアクセスを付与する必要があります。 詳しくは、「[ワークフローでの認証に GITHUB\\_TOKEN を使用する](/ja/enterprise-cloud@latest/actions/tutorials/authenticate-with-github_token)」をご覧ください。\n\nパッケージを別のリポジトリに発行する場合は、コピー先リポジトリ内のパッケージに書き込むアクセス許可を持つ personal access token (classic) を使用する必要があります。 詳細については、「[個人用アクセス トークンを管理する](/ja/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)」および「[GitHub Actions でのシークレットの使用](/ja/enterprise-cloud@latest/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)」を参照してください。\n\n### ワークフローの例\n\nこの例では、`GITHUB_TOKEN` 環境変数に `NODE_AUTH_TOKEN` シークレットを格納します。\n`setup-node` アクションによって `.npmrc` ファイルが作成されると、`NODE_AUTH_TOKEN` 環境変数からトークンが参照されます。\n\n```yaml copy\nname: Publish package to GitHub Packages\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to GitHub Packages\n      - uses: actions/setup-node@v7\n        with:\n          node-version: '20.x'\n          registry-url: 'https://npm.pkg.github.com'\n          # Defaults to the user or organization that owns the workflow file\n          scope: '@octocat'\n      - run: npm ci\n      - run: npm publish\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n`setup-node` アクションにより、ランナーに `.npmrc` ファイルが作成されます。\n`scope` アクションに対して `setup-node` 入力を使用すると、`.npmrc` ファイルにスコープ プレフィックスが含まれます。 既定では、`setup-node` アクションにより、`.npmrc` ファイルのスコープが、そのワークフロー ファイルを含むアカウントに設定されます。\n\n```shell\n//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n@octocat:registry=https://npm.pkg.github.com\nalways-auth=true\n```\n\n## Yarn を利用したパッケージの公開\n\nパッケージマネージャーのYarnを使う場合、Yarnを使ってパッケージのインストールと公開が行えます。\n\n```yaml copy\nname: Publish Package to npmjs\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to npm\n      - uses: actions/setup-node@v7\n        with:\n          node-version: '20.x'\n          registry-url: 'https://registry.npmjs.org'\n          # Defaults to the user or organization that owns the workflow file\n          scope: '@octocat'\n      - run: yarn\n      - run: yarn npm publish // for Yarn version 1, use `yarn publish` instead\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\n発行中にレジストリで認証を行うには、認証トークンも `yarnrc.yml` ファイルで定義されていることを確認します。 詳しくは、Yarn のドキュメントの記事「[設定](https://yarnpkg.com/configuration/yarnrc#npmAuthToken)」をご覧ください。"}