ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。
記事のバージョン: Enterprise Server 2.22
記事のバージョン: Enterprise Server 2.22

Node.jsパッケージの公開

継続的インテグレーション(CI)ワークフローの一部として、Node.jsのパッケージをレジストリに公開できます。

GitHub ActionsはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Oneで利用できます。 GitHub Actionsは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。

ここには以下の内容があります:

GitHub Actions の支払いを管理する GitHubは、macOSランナーのホストにMacStadiumを使用しています。

はじめに

本ガイドでは、継続的インテグレーション(CI)テストにパスした後、Node.jsのパッケージをGitHub Packages及びnpmレジストリに公開するワークフローの作成方法を紹介します。 1つのワークフローで、パッケージを1つのレジストリや複数のレジストリに公開できます。

必要な環境

ワークフローの設定オプションと、ワークフローファイルの作成方法についての基本的な知識を持っておくことをおすすめします。 詳しい情報については、「GitHub Actions を学ぶ」を参照してください。

Node.jsプロジェクトのためのCIワークフローの作成に関する詳しい情報については「GitHub ActionsでのNode.jsの利用」を参照してください。

また、以下の基本的な理解があれば役立ちます。

パッケージの設定について

package.jsonファイル中のname及びversionフィールドは、レジストリがパッケージをレジストリにリンクするために利用するユニークな識別子を作成します。 package.jsonファイル中にdescriptionを含めることによって、パッケージのリストページのためのまとめを追加できます。 詳しい情報については、npmのドキュメンテーション中の「package.jsonファイルの作成」及び「Node.jsモジュールの作成」を参照してください。

ローカルの.npmrcファイルがあり、registryの値が指定されている場合、npm publishコマンドは.npmrcファイルで設定されたレジストリを使います。 setup-nodeアクションを使って、デフォルトのレジストリとスコープを設定するローカルの.npmrcファイルをランナー上に作成できます。 setup-nodeアクションは、プライベートリポジトリへのアクセスやnodeパッケージの公開に使われる認証トークンも入力として受け付けます。 詳しい情報についてはsetup-nodeを参照してください。

setup-nodeアクションを使えば、ランナーにインストールされたNode.jsのバージョンを指定できます。

package.jsonファイルにpublishConfigフィールドを設定するステップをワークフローに追加したなら、setup-nodeアクションを使ってregistry-urlを指定する必要はありませんが、パッケージを公開するレジストリは1つだけに限られます。 詳しい情報についてはnpmドキュメンテーションの「Configの公開」を参照してください。

npmレジストリへのパッケージの公開

新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、createdという種類でreleaseイベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればnpmレジストリにパッケージを公開します。

ワークフロー中でnpmレジストリに対して認証を受けた操作を行うためには、npmの認証トークンをリポジトリの設定中にシークレットとして保存しなければなりません。 たとえばNPM_TOKENというシークレットを生成してください。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。

デフォルトでは、npmはpackage.jsonファイルのnameフィールドを使ってnpmレジストリを決めます。 グローバルな名前空間に公開する場合は、パッケージ名だけを含める必要があります。 たとえばhttps://www.npmjs.com/package/npm-hello-world-testnpm-hello-world-testという名前のパッケージを公開できます。

スコープのプレフィックスを含むパッケージを公開するなら、そのスコープをpackage.jsonファイルの名前に含めてください。 たとえばnpmのスコーププレフィックスがoctocatであり、パッケージ名がhello-worldなら、package.jsonファイル中のname@octocat/hello-worldとすべきです。 npmパッケージがスコーププレフィックスを使っており、パブリックであるなら、npm publish --access publicオプションを使う必要があります。 これは、意図せずプライベートパッケージを公開してしまうことを防ぐためにnpmが必要とするオプションです。

以下の例は、NPM_TOKENシークレットを環境変数のNODE_AUTH_TOKENに保存します。 setup-nodeアクションが.npmrcファイルを作成する際には、環境変数のNODE_AUTH_TOKENからトークンを参照します。

name: Node.js Package
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    # npmへの公開のための.npmrcファイルのセットアップ
    - uses: actions/setup-node@v1
      with:
        node-version: '12.x'
        registry-url: 'https://registry.npmjs.org'
    - run: npm install
    - run: npm publish
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

上の例では、setup-nodeアクションは以下の内容でランナー上に.npmrcファイルを作成します。

//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
registry=https://registry.npmjs.org/
always-auth=true

GitHub Packagesへのパッケージの公開

新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、createdという種類でreleaseイベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればGitHub Packagesにパッケージを公開します。

デフォルトでは、GitHub Packagesはpackage.jsonファイルのnameフィールドで指定されたGitHubのリポジトリにパッケージを公開します。 たとえば@my-org/testという名前のパッケージをGitHubリポジトリのmy-org/testに公開します。 詳しい情報については、npmドキュメンテーション中のnpm-scopeを参照してください。

ワークフロー中でGitHub Packagesレジストリに対して認証を受けた操作をするには、GITHUB_TOKENが使えます。 GITHUB_TOKENは、デフォルトでリポジトリ中に存在し、ワークフローが実行されるリポジトリ中のパッケージには読み書きの権限があります。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。

以下の例は、GITHUB_TOKENシークレットを環境変数のNODE_AUTH_TOKENに保存します。 setup-nodeアクションが.npmrcファイルを作成する際には、環境変数のNODE_AUTH_TOKENからトークンを参照します。

name: Node.js Package
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    # GitHub パッケージに公開する .npmrc ファイルを設定する
    - uses: actions/setup-node@v1
      with:
        node-version: '12.x'
        registry-url: 'https://npm.pkg.github.com'
        # デフォルトはワークフローファイルを所有するユーザまたは Organization
        scope: '@octocat'
    - run: npm install
    - run: npm publish
      env:
        NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

setup-nodeアクションは、ランナー上で.npmrcファイルを作成します。 setup-nodeアクションでscopeインプットを使うと、.npmrcファイルにはスコーププレフィックスが含まれます。 デフォルトでは、setup-nodeアクションは.npmrcファイルのスコープを、ワークフローファイルを含むアカウントに設定します。

//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://npm.pkg.github.com
always-auth=true

yarnを利用したパッケージの公開

パッケージマネージャーのYarnを使う場合、Yarnを使ってパッケージのインストールと公開が行えます。

name: Node.js Package
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    # npm に公開する .npmrc ファイルを設定する
    - uses: actions/setup-node@v1
      with:
        node-version: '12.x'
        registry-url: 'https://registry.npmjs.org'
        # デフォルトはワークフローファイルを所有するユーザまたは Organization
        scope: '@octocat' 
    - run: yarn
    - run: yarn publish
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

npmとGitHub Packagesへのパッケージの公開

ノート: 異なるスコーププレフィックスを持つレジストリへ公開する必要がある倍は、ランナー上のpackage.jsonファイルを修正してスコーププレフィックスを変更しなければなりません。 たとえばnpmに対しては@monaスコープで、GitHub Packagesに対しては@octocatスコープでパッケージを公開する場合は、npmへの公開後、GitHub Packagesへの公開前にランナー上のpackage.jsonファイルの@monaスコープを@octocatで置き換えることができます。

setup-nodeアクションをそれぞれのレジストリに対して利用すれば、npmレジストリとGitHub Packagesの両方にパッケージを公開できます。

両方のレジストリにパッケージを公開するなら、npm上のスコーププレフィックスがGitHubのユーザ名もしくはOrganization名と一致することを確認する必要があります。 パッケージをスコーププレフィックス付きでパブリックなレジストリに公開するには、npm publish --access publicコマンドが使えます。 詳しい情報については、npmドキュメンテーション中のnpm-scope及び「スコープ付きのパブリックパッケージの作成と公開」を参照してください。

package.jsonファイルにGitHubレジストリとnpmレジストリのスコープが含まれていることを確かめてください。 たとえば、octocat/npm-hello-world-testリポジトリ内のパッケージをGitHub及びhttps://www.npmjs.com/package/@octocat/npm-hello-world-testに公開する計画をしているなら、*package.json*ファイル内の名前は`"name": "@octocat/npm-hello-world-test"`となるでしょう。

ワークフロー中でGitHub Packagesレジストリに対して認証を受けた操作をするには、GITHUB_TOKENが使えます。 GITHUB_TOKENは、デフォルトでリポジトリ中に存在し、ワークフローが実行されるリポジトリ中のパッケージには読み書きの権限があります。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。

setup-nodeアクションでscopeインプットを使うと、このアクションはスコーププレフィックスを含む.npmrcファイルを作成します。 デフォルトでは、setup-nodeアクションは.npmrcファイル中のスコープを、ワークフローファイルを所有するユーザもしくはOrganizationに設定します。

このワークフローは、setup-nodeアクションを2回呼びます。 setup-nodeアクションは、実行されるたびに.npmrcファイルを上書きします。 .npmrcファイルは、パッケージレジストリに対する認証を受けた操作を行えるようにしてくれるトークンを、環境変数のNODE_AUTH_TOKENから参照します。 このワークフローは、環境変数のNODE_AUTH_TOKENnpm publishコマンドが実行されるたびに設定します。初回はnpmへの公開のためのトークン(NPM_TOKEN)が、続いてGitHub Packagesへの公開のためのトークン(GITHUB_TOKEN)が使われます。

name: Node.js Package
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    # npmに公開する.npmrcファイルを設定する
    - uses: actions/setup-node@v1
      with:
        node-version: '10.x'
        registry-url: 'https://registry.npmjs.org'
    - run: npm install
    # npmに公開する
    - run: npm publish --access public
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
    # GitHub パッケージに公開する .npmrc ファイルを設定する
    - uses: actions/setup-node@v1
      with:
        registry-url: 'https://npm.pkg.github.com'
        # デフォルトはワークフローファイルを所有するユーザまたは Organization
        scope: '@octocat'
    # GitHub パッケージに公開する
    - run: npm publish
      env:
        NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.