Azure Static Web Apps でNext.js をビルドする時のNode.js バージョンを指定する
今回はAzure Static Web Apps でNext.js のアプリケーションをビルドする際、Node.js のバージョンを特定のバージョンでビルドするよう設定する方法について説明します。

実行環境
React | 18.2.0 |
|---|---|
Next.js | 13.0.7 |
デプロイのソース | GitHub |
Azure Static Web Apps のCI/CD について
Azure Static Web Apps のビルド、デプロイ
Azure Static Web Apps はアプリケーション作成時に、ビルド、デプロイ用のGitHub Actions 用のyml ファイルまたはAzure Pipeline 用のyml ファイルが自動的に追加されます。GitHub を指定した際、指定したリポジトリにGitHub Actions 用の「azure-static-web-apps-XXXX-XXXXXX-XXXXXXXXX.yml」ファイルが追加されます。追加されるyml ファイルは以下内容となっております。
name: Azure Static Web Apps CI/CD
on: push: branches: - main pull_request: types: [opened, synchronize, reopened, closed] branches: - main
jobs: build_and_deploy_job: if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') runs-on: ubuntu-latest name: Build and Deploy Job steps: - uses: actions/checkout@v2 with: submodules: true - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_GRAY_DUNE_0F25AB700 }} repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) action: "upload" ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: "/" # App source code path api_location: "" # Api source code path - optional output_location: "" # Built app content directory - optional ###### End of Repository/Build Configurations ######
close_pull_request_job: if: github.event_name == 'pull_request' && github.event.action == 'closed' runs-on: ubuntu-latest name: Close Pull Request Job steps: - name: Close Pull Request id: closepullrequest uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_GRAY_DUNE_0F25AB700 }} action: "close"今回は取り扱いませんがAzure DevOps を指定すると、Azure Repos のリポジトリに以下のazure-static-web-apps-XXXX-XXXXXX-XXXXXXXXX.yml を追加します。
name: Azure Static Web Apps CI/CD
pr: branches: include: - mastertrigger: branches: include: - master
jobs:
job: build_and_deploy_jobdisplayName: Build and Deploy Jobcondition: or(eq(variables['Build.Reason'], 'Manual'),or(eq(variables['Build.Reason'], 'PullRequest'),eq(variables['Build.Reason'], 'IndividualCI')))pool: vmImage: ubuntu-latestvariables:
group: Azure-Static-Web-Apps-blue-beach-0e44ab100-variable-groupsteps:
checkout: selfsubmodules: true
task: AzureStaticWebApp@0inputs: azure_static_web_apps_api_token: $(AZURE_STATIC_WEB_APPS_API_TOKEN_BLUE_BEACH_0E44AB100)
Repository/Build Configurations - These values can be configured to match your app requirements.
For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location: "/" # App source code path
api_location: "" # Api source code path - optional
output_location: "" # Built app content directory - optional
End of Repository/Build Configurations ######GitHub Actions のDockerfile を見ると、ACR からコンテナイメージを取得、実行しデプロイなどを行っています。詳細の実行は以下GitHub ページを参照してください。
Azure Static Web Apps のビルド時のバージョン指定方法
Azure Static Web Apps でNode.js のバージョンを指定したい場合、package.json のengines を使用します。以下の例ではNode.js のバージョンを14.20.1 に指定します。
{
[省略] "engines": { "node": "14.20.1" }, "scripts": { [省略] }, "dependencies": { [省略] }}Azure Static Web Apps で自動的に追加されるビルド用コンテナの場合Node.js のバージョンはLTS のみ使用できます。LTS 以外のバージョンをengines に指定するとビルド時にNode.js のバージョンでエラーとなります。
バージョン未指定時のNode.js のバージョン
package.json でengines を指定しない場合、Azure Static Web Apps で作成されたビルド・デプロイ用コンテナのNode.js が使用されます。2022/12/17 現在、Node.js 16.18.0 が使用されます。
Using Node version:v16.18.0
Using Npm version:8.19.2特定のバージョンを指定したい場合
ビルド時に特定のメジャーバージョンを指定したい場合、package.json のengines でバージョンを指定します。以下の例ではNode.js のバージョンを「18.0.0」に指定します。
{ "engines": { "node": "18.0.0" }}GitHub Actions で実行すると以下の結果となります。
Using Node version:v18.0.0
Using Npm version:8.6.0package.json でバージョンを指定した場合、ビルド時のNode.js バージョンは指定されますが、Oryx ビルド時のNode.js はメジャーバージョンの最新バージョンが使用されるため、バージョンによってはデプロイ等で不都合が発生する可能性があります。
一定のバージョン以上を指定したい場合
ビルド時に一定のバージョン以上を指定したい場合、package.json のengines で「>=」を使用します。以下の例ではNode.js のバージョンを18 系以上に指定します。
{ "engines": { "node": ">= 18.0.0" }}GitHub Actions で実行すると以下の結果となります。18.0.0 以上を指定しているため、18 系の最新バージョンの18.12.1 でビルドします。
Using Node version:v18.12.1
Using Npm version:8.19.2一定のバージョン以下を指定したい場合
ビルド時に一定のバージョン以下を指定したい場合、package.json のengines で「<=」を使用します。以下の例ではNode.js のバージョンを14.21.2 以下に指定します。
{ "engines": { "node": "<= 14.21.2" }}GitHub Actions で実行すると以下の結果となります。14.21.2 以下を指定しているため、14 系の最新バージョンの14.21.2 でビルドします。
Using Node version:v14.21.2
Using Npm version:6.14.17一定の範囲内のバージョンを指定したい場合
ビルド時に一定の範囲内のバージョンを指定したい場合、package.json のengines で「>=」と「<=」を使用します。以下の例ではNode.js のバージョンを14 系以上、16 系未満に指定します。
{ "engines": { "node": ">= 14.0.0 < 16" }}GitHub Actions で実行すると以下の結果となります。16 系未満でLTS を選択するため14 系の最新バージョンを選択します。
sh;Using Node versionv14.21.2
Using Npm version:6.14.17まとめ
- Azure Static Web Apps で自動追加されるGitHub Actions は専用のコンテナを使用してビルド・デプロイを行っている。
- Azure Static Web Apps でNode.js のバージョンを指定するにはpackage.json でengines を追加する、
- Azure Static Web Apps のビルド時のバージョンはLTS バージョンのみ使用している。
