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

このバージョンの GitHub Enterprise はこの日付をもって終了となります: 2022-06-03. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

Node.jsパッケージの公開

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

ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情報を見ることができます。

はじめに

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

必要な環境

ワークフローの設定オプションと、ワークフローファイルの作成方法についての基本的な知識を持っておくことをおすすめします。 詳しい情報については、「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 というリポジトリシークレットを作成します。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。

By default, npm uses the name field of the package.json file to determine the name of your published package. グローバルな名前空間に公開する場合は、パッケージ名だけを含める必要があります。 For example, you would publish a package named npm-hello-world-test to https://www.npmjs.com/package/npm-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からトークンを参照します。

YAML
name: Publish Package to npmjs
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v2
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
      - run: npm ci
      - 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

Please note that you need to set the registry-url to https://registry.npmjs.org/ in setup-node to properly configure your credentials.

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

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

宛先リポジトリの設定

package.json ファイルで repository キーを指定しない場合、GitHub Packages は package.json ファイルの name フィールドで指定した GitHub リポジトリにパッケージを公開します。 たとえば、@my-org/test という名前のパッケージは、my-org/test GitHub というリポジトリに公開されます。

ただし、repository キーを指定すると、そのキーのリポジトリが GitHub Packages の宛先 npm レジストリとして使用されます。 たとえば、以下の package.json を公開すると、my-amazing-package という名前のパッケージが octocat/my-other-repo GitHub リポジトリに公開されます。

{
  "name": "@octocat/my-amazing-package",
  "repository": {
    "type": "git",
    "url": "https://github.com/octocat/my-other-repo.git"
  },

宛先リポジトリへの認証

ワークフロー中でGitHub Packagesレジストリに対して認証を受けた操作をするには、GITHUB_TOKENが使えます。 ワークフロー内のジョブが開始されるたびに、GITHUB_TOKENはそのリポジトリのアクセストークンに設定されます。 これは、ワークフローが実行されるリポジトリ内でパッケージに対する読み取り及び書き込み権限を持っています。 詳しい情報については「GITHUB_TOKENでの認証を参照してください。

パッケージを別のリポジトリに公開する場合は、宛先リポジトリ内のパッケージに書き込む権限を持つ個人アクセストークン (PAT) を使用する必要があります。 詳しい情報については、「個人アクセストークンを作成する」および「暗号化されたシークレット」を参照してください。

ワークフローの例

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

YAML
name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest 
    steps:
      - uses: actions/checkout@v2
      # Setup .npmrc file to publish to GitHub Packages
      - uses: actions/setup-node@v2
        with:
          node-version: '16.x'
          registry-url: 'https://npm.pkg.github.com'
          # Defaults to the user or organization that owns the workflow file
          scope: '@octocat'
      - run: npm ci
      - 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を使ってパッケージのインストールと公開が行えます。

YAML
name: Publish Package to npmjs
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v2
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
          # Defaults to the user or organization that owns the workflow file
          scope: '@octocat'
      - run: yarn
      - run: yarn publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}