

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Elastic Beanstalk でのアプリケーションの依存関係の設定
<a name="nodejs-platform-dependencies"></a>

アプリケーションには、`require()` ステートメントで指定したモジュールなど、いくつかの Node.js モジュールに対する依存関係がある可能性があります。これらのモジュールは `node_modules` ディレクトリに保存されます。アプリケーションが実行されると、Node.js でこのディレクトリからモジュールを読み込みます。詳細については、Node.js ドキュメントの「[node\$1modules フォルダからの読み込み](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)」を参照してください。

これらのモジュールの依存関係は、`package.json` ファイルを使用して指定できます。Elastic Beanstalk がこのファイルを検出し、`node_modules` ディレクトリが存在しない場合、Elastic Beanstalk は *webapp* ユーザーとして `npm install` を実行します。この `npm install` コマンドでは、Elastic Beanstalk であらかじめ作成した `node_modules` ディレクトリに依存関係をインストールします。この `npm install` コマンドでは、パブリック npm レジストリまたは他のロケーションから `package.json` ファイルにリストされているパッケージにアクセスします。詳細については、[npm ドキュメント](https://docs.npmjs.com/about-the-public-npm-registry)のウェブサイトを参照してください。

Elastic Beanstalk で `node_modules` ディレクトリを検出した場合、`package.json` ファイルが存在していても Elastic Beanstalk で `npm install` を実行することはありません。Elastic Beanstalk では、依存関係パッケージは `node_modules` ディレクトリ内において Node.js でアクセスして読み込めることを前提としています。

次のセクションでは、アプリケーションにおける Node.js モジュールの依存関係の確立に関する詳細を確認できます。

**注記**  
Elastic Beanstalk で `npm install` の実行中にデプロイに関する問題が発生した場合は、別のアプローチを検討してください。アプリケーションソースバンドルに、依存関係モジュールを有する `node_modules` ディレクトリを含めます。そうすることで、問題を調査している間に、パブリック npm レジストリからの依存関係のインストールに伴う問題を回避できます。依存関係モジュールはローカルディレクトリから供給されるため、これを行うとデプロイ時間を短縮できる可能性もあります。詳細については、[node\$1modules ディレクトリに Node.js の依存関係を含める](#nodejs-platform-nodemodules)を参照してください。

## package.json ファイルを使用した Node.js の依存関係の指定
<a name="nodejs-platform-packagejson"></a>

プロジェクトの出典のルートに `package.json` ファイルを含めることにより、依存関係パッケージを指定し、スタートコマンドを指定します。`package.json` ファイルが存在し、プロジェクトソースのルートに `node_modules` ディレクトリが存在しない場合、Elastic Beanstalk は *webapp* ユーザーとして `npm install` を実行し、パブリック npm レジストリから依存関係をインストールします。また、Elastic Beanstalk で `start` コマンドを使用してアプリケーションを開始します。`package.json` ファイルの詳細については、「*npm ドキュメント*のウェブサイト」で「[`package.json` ファイルでの依存関係の指定](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file)」を参照してください。

`scripts` キーワードを使用して、スタートコマンドを指定します。現在は、`aws:elasticbeanstalk:container:nodejs` 名前空間の古い `NodeCommand` オプションの代わりに `scripts` キーワードが使用されています。

**Example package.json – Express**  

```
{
    "name": "my-app",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
      "ejs": "latest",
      "aws-sdk": "latest",
      "express": "latest",
      "body-parser": "latest"
    },
    "scripts": {
      "start": "node app.js"
    }
  }
```

**本番モードと開発の依存関係**  
`package.json` ファイル内で依存関係を指定するには、*dependencies* 属性と *devDependencies* 属性を使用します。*dependencies* 属性は、本番環境のアプリケーションに必要なパッケージを指定します。*devDependencies* 属性は、ローカルの開発とテストにのみ必要なパッケージを指定します。

*devDependencies* パッケージをインストールする必要がある場合は、NPM\$1USE\$1PRODUCTION 環境プロパティを `false` に設定します。この設定では、npm install の実行時に上記のオプションを使用しません。これにより、*devDependencies* パッケージがインストールされます。

## node\$1modules ディレクトリに Node.js の依存関係を含める
<a name="nodejs-platform-nodemodules"></a>

アプリケーションコードとともに依存関係パッケージを環境インスタンスにデプロイするには、プロジェクトソースのルートにある `node_modules` という名前のディレクトリにそれらを含めます。詳細については、「*npm ドキュメント*のウェブサイト」で「[パッケージをローカルでダウンロードしてインストールする](https://docs.npmjs.com/downloading-and-installing-packages-locally)」を参照してください。

`node_modules` ディレクトリを AL2023/AL2 Node.js プラットフォームバージョンにデプロイすると、Elastic Beanstalk では独自の依存関係パッケージが提供されていると見なして、[package.json](#nodejs-platform-packagejson) ファイルで指定された依存関係をインストールしないようにします。Node.js では `node_modules` ディレクトリで依存関係を探します。詳細については、Node.js ドキュメントの「[node\$1modules フォルダからの読み込み](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)」を参照してください。

**注記**  
Elastic Beanstalk で `npm install` の実行中にデプロイに関する問題が発生した場合は、問題を調査している間の回避策として、このトピックで説明されているアプローチを使用することを検討してください。  
 

### Amazon Linux 2 での Node.js に関する考慮事項
<a name="nodejs-al2-considerations"></a>

*Amazon Linux 2* で実行されている *Node.js* プラットフォームブランチを使用している場合は、このセクションをお読みください。

#### Amazon Linux 2 での Node.js に関する考慮事項
<a name="nodejs-al2-considerations-detail"></a>

**注記**  
このトピックの情報は、Amazon Linux 2 で実行されているNode.jsプラットフォームブランチに適用されます。このコンテンツでは、AL2-specific機能と動作について説明します。 AL2023

**コマンドのバリエーション**  
コマンドオプションは、アプリケーションが実行される Amazon Linux 2 プラットフォームブランチに含まれる npm バージョンによって異なります。
+ npm v6 – Elastic Beanstalk は、デフォルトで依存関係を本番モードでインストールします。コマンド `npm install --production` を使用します。
+ npm v7 以降 — Elastic Beanstalk は *devDependencies* を省略します。コマンド `npm install --omit=dev` を使用します。

上記の両方のコマンドは、*devDependencies* であるパッケージをインストールしません。

**Git 依存関係の SSH プロトコルと HTTPS プロトコル**  
2023 年 3 月 7 日の Amazon Linux 2 プラットフォームリリース以降、SSH および HTTPS プロトコルを使用して Git リポジトリからパッケージを取得できます。プラットフォームブランチ Node.js 16 は、SSH プロトコルと HTTPS プロトコルの両方をサポートします。Node.js 14 は HTTPS プロトコルのみをサポートします。

**Example package.json – Node.js 16 は HTTPS と SSH の両方をサポートします**  

```
    ...
    "dependencies": {
      "aws-sdk": "https://github.com/aws/aws-sdk-js.git",
      "aws-chime": "git+ssh://git@github.com:aws/amazon-chime-sdk-js.git"
    }
```

**バージョンとバージョン範囲**  
`package.json` ファイルで `engines` キーワードを使用して、アプリケーションで使用する Node.js のバージョンを指定します。npm 表記を使用してバージョニング範囲を指定することもできます。バージョン範囲の構文の詳細については、Node.js のウェブサイトの「[npm を使用したセマンティックバージョニング](https://nodejs.dev/learn/semantic-versioning-using-npm)」を参照してください。Node.js `package.json` ファイルの `engines` キーワードでは、`aws:elasticbeanstalk:container:nodejs` 名前空間の古い `NodeVersion` オプションを置換します。

**重要**  
バージョン範囲を指定する機能は、AL2023 上で動作する Node.js プラットフォームブランチでは使用できません。AL2023 上の特定の Node.js ブランチ内では 1 つの Node.js バージョンのみがサポートされています。`package.json` ファイルでバージョン範囲が指定されている場合、その指定は無視され、Node.js のプラットフォームブランチバージョンがデフォルトで使用されます。

**Example `package.json` — 単一の Node.js バージョン**  

```
{
    ...
    "engines": { "node" : "14.16.0" }
  }
```

**Example `package.json` — Node.js のバージョン範囲**  

```
{
    ...
    "engines": { "node" : ">=10 <11" }
  }
```

バージョン範囲が指定されると、Elastic Beanstalk では、プラットフォームにあるバージョンの中から、範囲内で利用可能な最新の Node.js バージョンをインストールします。この例では、範囲は、バージョンがバージョン 10 以上で、バージョン 11 より小さくなければならないことが示されています。その結果、Elastic Beanstalk では、[サポートされているプラットフォーム](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)で利用可能な最新の Node.js バージョン 10.x.y がインストールされます。

指定できるのは、プラットフォームブランチに対応する Node.js バージョンのみであることに注意してください。例えば、Node.js 16 プラットフォームブランチを使用している場合、16.x.y Node.js バージョンのみを指定できます。npm で support されているバージョン範囲オプションを使用すると、柔軟性が向上します。各プラットフォームブランチにおける有効な Node.js バージョンについては、「*AWS Elastic Beanstalk プラットフォーム*ガイド」の「[https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)」を参照してください。

**注記**  
使用しているバージョンの Node.js に対する support がプラットフォームバージョンから削除された場合は、[プラットフォームの更新](using-features.platform.upgrade.md)に先立って、Node.js バージョン設定を変更または削除する必要があります。これは、1 つ以上のバージョンの Node.js でセキュリティの脆弱性が検出された場合に発生することがあります  
この場合、設定された Node.js バージョンをsupport していないプラットフォームの新しいバージョンに更新しようとすると失敗します。新しい環境を作成する必要がないようにするには、`package.json` の Node.js のバージョニング設定を、古いプラットフォームバージョンと新しいプラットフォームバージョンの両方で support されている Node.js バージョンに変更します。このトピックで前述したように、support されているバージョンを含む Node.js のバージョニング範囲を指定することもできます。また、設定を削除して、新しいソースバンドルをデプロイするオプションもあります。