Skip to main content

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2022-10-12. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise にアップグレードします。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせく� さい

Node.js のビルドとテスト

Node.jsプロジェクトのビルドとテストのための継続的インテグレーション(CI)ワークフローを作成できます。

注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。

はじめに

このガイドでは、Node.jsのコードのビルドとテストを行う継続的インテグレーション(CI)ワークフローの作成方法を紹介します。 CIテストにパスしたなら、コードをデプロイしたりパッケージを公開したりすることになるでしょう。

前提条件

Node.js、YAML、ワークフローの設定オプションと、ワークフローファイルの作成方法についての基本的な知識を持っておくことをおすすめします。 詳細については、次を参照してく� さい。

GitHub Enterprise Server上でのセルフホストランナーの利用

GitHub Enterprise Server でセルフホスト ランナーと合わせてセットアップ アクション (actions/setup-LANGUAGE など) を使用するときに、インターネットにアクセスできないランナー上にツール キャッシュを設定する必要がある� �合があります。 詳細については、「インターネットにアクセスできないセルフホスト ランナーにツール キャッシュを設定する」を参照してく� さい。

Node.js スターター ワークフローの使用

GitHub では、ほとんどの Node.js プロジェクトで使用できる Node.js のスターター ワークフローを提供しています。 このガイドには、スターター ワークフローをカスタマイズして利用できる npm および Yarn の例が含まれます。 詳細については、Node.js のスターター ワークフローに関するページを参照してく� さい。

すぐに作業を開始するには、リポジトリの .github/workflows ディレクトリにスターター ワークフローを追� します。 以下に示すワークフローは、リポジトリのデフォルトブランチが main であることを前提としています。

YAML
name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [10.x, 12.x, 14.x, 15.x]

    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

様々なオペレーティングシステ� 上での実行

スターター ワークフローは、GitHub ホスト ubuntu-latest ランナーを使って Linux 上で実行するジョブを設定します。 runs-on キーを変更すると、別のオペレーティング システ� でジョブを実行するようにできます。 たとえば、GitHubホストのWindowsランナーを使うことができます。

runs-on: windows-latest

あるいはGitHubホストのmacOSランナーで実行させることもできます。

runs-on: macos-latest

Dockerコンテナ上でジョブを実行させたり、独自のインフラストラクチャ上で動作するセルフホストランナーを提供したりすることもできます。 詳細については、GitHub Actions のワークフロー構文に関するページを参照してく� さい。

Node.jsのバージョンの指定

最も簡単に Node.js のバージョンを指定する方法は、GitHub によって提供される setup-node アクションを使用することです。 詳細については、setup-node に関するページを参照してく� さい。

setup-node アクションでは Node.js のバージョンを入力として取り、ランナー上でそのバージョンを構成します。 setup-node アクションでは、各ランナーのツール キャッシュから特定のバージョンの Node.js を見つけ、必要なバイナリを PATH に追� します。これは、残りのジョブで永続化されます。 setup-node アクションを利用することは、GitHub Actions で Node.js を使用するための推奨される方法です。そうすることで様々なランナーや様々なバージョンの Node.js で一貫した動作が保証されるのです。 セルフホスト ランナーを使用している� �合は、Node.js をインストールし、それを PATH に追� する必要があります。

スターター ワークフローには、4 つの Node.js バージョン (10.x、12.x、14.x、および 15.x) を使用してコードをビルドおよびテストするマトリックス戦略が含まれています。 この'x'はワイルドカードキャラクターで、そのバージョンで利用できる最新のマイナー及びパッチリリースにマッチします。 node-version 配列で指定された Node.js の各バージョンに対して、同じステップを実行するジョブが作成されます。

各ジョブでは、matrix コンテキストを使用してマトリックス node-version 配列で定義された値にアクセスできます。 setup-node アクションでは、コンテキストが node-version 入力として使用されます。 setup-node アクションでは、コードのビルドとテストに先立って、様々な Node.js のバージョンで各ジョブを設定します。 マトリックスの戦略とコンテキストの詳細については、"GitHub Actions のワークフロー構文" および "コンテキスト" に関するページを参照してく� さい。

YAML
strategy:
  matrix:
    node-version: [10.x, 12.x, 14.x, 15.x]

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
  uses: actions/setup-node@v2
  with:
    node-version: ${{ matrix.node-version }}

あるいは、厳密にNode.jsバージョンを指定してビルドとテストを行うこともできます。

YAML
strategy:
  matrix:
    node-version: [8.16.2, 10.17.0]

または、Node.jsの1つのバージョンを使ってビルドとテストを行うこともできます。

YAML
name: Node.js CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '12.x'
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

Node.jsのバージョンを指定しなかった� �合、GitHubは環境のデフォルトのNode.jsのバージョンを使います。 詳細については、"GitHub-hosted runners の仕様" に関するページを参照してく� さい。

依存関係のインストール

GitHubホストランナーには、依存関係マネージャーのnpmとYarnがインストールされています。 コードのビルドとテストに先立って、npmやYarnを使ってワークフロー中で依存関係をインストールできます。 Windows及びLinuxのGitHubホストランナーには、Grunt、Gulp、Bowerもインストールされています。

npmの利用例

以下の例では、package.json ファイルで定義された依存関係がインストールされます。 詳細については、「npm install」を参照してく� さい。

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- name: Install dependencies
  run: npm install

npm ci を使用すると、該当するバージョンが package-lock.json または npm-shrinkwrap.json ファイルにインストールされ、ロック ファイルが更新されなくなります。 npm ci を使用する方法は一般に npm install を実行する方法よりも高速です。 詳細については、npm ci および「より高速で信� �性の高いビルドのための npm ci の導入」を参照してく� さい。

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- name: Install dependencies
  run: npm ci

Yarnの利用例

以下の例では、package.json ファイルで定義された依存関係がインストールされます。 詳細については、「yarn install」を参照してく� さい。

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- name: Install dependencies
  run: yarn

または、--frozen-lockfile を渡して該当するバージョンを yarn.lock ファイルにインストールし、yarn.lock ファイルが更新されないようにすることもできます。

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- name: Install dependencies
  run: yarn --frozen-lockfile

プライベートレジストリの利用と.npmrcファイルの作成の例

setup-node アクションを使用して、既定のレジストリとスコープを構成するローカルの .npmrc ファイルをランナーに作成できます。 setup-node アクションは、プライベート リポジトリへのアクセスや node パッケージの公開に使われる認証トークンも入力として受け付けます。 詳細については、setup-node をご覧く� さい。

プライベートレジストリに対して認証するには、npm 認証トークンをシークレットとして保存する必要があります。 たとえば、NPM_TOKEN というリポジトリ シークレットを作成します。 詳細については、「暗号化されたシークレットの作成と使用」を参照してく� さい。

以下の例では、NPM_TOKEN というシークレットには npm の認証トークンが保存されます。 setup-node アクションでは、NODE_AUTH_TOKEN 環境変数から npm 認証トークンを読み取るように、 .npmrc ファイルを構成します。 setup-node アクションを使用して .npmrc ファイルを作成する� �合は、npm 認証トークンを含むシークレットを使用して NODE_AUTH_TOKEN 環境変数を設定する必要があります。

依存関係をインストールする前に、setup-node アクションを使用して .npmrc ファイルを作成します。 このアクションには2つの入力パラメーターがあります。 node-version パラメーターによって、Node.js のバージョンが設定され、registry-url パラメーターによって既定のレジストリーが設定されます。 パッケージ レジストリでスコープが使用されている� �合は、scope パラメーターを使用する必要があります。 詳細については、「npm-scope」を参照してく� さい。

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    always-auth: true
    node-version: '12.x'
    registry-url: https://registry.npmjs.org
    scope: '@octocat'
- name: Install dependencies
  run: npm ci
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

上の例では、以下の内容で .npmrc ファイルを作成しています。

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

コードのビルドとテスト

ローカルで使うのと同じコマンドを、コードのビルドとテストに使えます。 たとえば、npm run build を実行することで、package.json ファイルで定義されたビルド ステップを実行し、さらに npm test を実行することでテスト スイートを実行する� �合は、それらのコマンドをワークフロー ファイルに追� します。

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- run: npm install
- run: npm run build --if-present
- run: npm test

成果物としてのワークフローのデータのパッケージ化

ビルドとテストのステップの成果物を保存し、ジョブの完了後に見ることができます。 たとえば、ログファイル、コアダンプ、テスト結果、スクリーンショットを保存する必要があるかもしれません。 詳細については、「アーティファクトを使用してワークフロー データを永続化する」を参照してく� さい。

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

CIテストにパスした後、Node.jsパッケージをパッケージレジストリに公開するようにワークフローを設定できます。 npm および GitHub Packages への発行の詳細については、「Node.js パッケージの公開」を参照してく� さい。