Azure アプリケーションでの Node.js モジュールの使用Using Node.js Modules with Azure applications

このドキュメントは、Azure でホストされているアプリケーションでの Node.js モジュールの使用に関するガイダンスを示します。This document provides guidance on using Node.js modules with applications hosted on Azure. また、Azure でアプリケーションによって特定のバージョンのモジュールとネイティブ モジュールが確実に使用されるようにするためのガイダンスも紹介します。It provides guidance on ensuring that your application uses a specific version of module as well as using native modules with Azure.

Node.js モジュールである package.json および npm-shrinkwrap.json ファイルの使い方について既によくわかっている方は、この記事の内容の概要を簡単にご確認ください。If you are already familiar with using Node.js modules, package.json and npm-shrinkwrap.json files, the following information provides a quick summary of what is discussed in this article:

  • Azure App Service では package.json および npm-shrinkwrap.json ファイルが認識され、これらのファイルのエントリに基づいてモジュールをインストールできます。Azure App Service understands package.json and npm-shrinkwrap.json files and can install modules based on entries in these files.

  • Azure Cloud Services は、すべてのモジュールが開発環境にインストールされ、node_modules ディレクトリがデプロイ パッケージの一部として含められることを想定します。Azure Cloud Services expect all modules to be installed on the development environment, and the node_modules directory to be included as part of the deployment package. Cloud Services では package.json または npm-shrinkwrap.json ファイルを使用したモジュール インストールのサポートを有効にできますが、この構成では、Cloud Services のプロジェクトで使用される既定のスクリプトをカスタマイズする必要があります。It is possible to enable support for installing modules using package.json or npm-shrinkwrap.json files on Cloud Services; however, this configuration requires customization of the default scripts used by Cloud Service projects. この環境を構成する方法の例については、npm インストールを実行してノード モジュールのデプロイを回避するための Azure スタートアップ タスクに関するページを参照してください。For an example of how to configure this environment, see Azure Startup task to run npm install to avoid deploying node modules

注意

VM でのデプロイはその仮想マシンでホストされているオペレーティング システムに依存するため、この記事では Azure Virtual Machines については説明しません。Azure Virtual Machines are not discussed in this article, as the deployment experience in a VM is dependent on the operating system hosted by the Virtual Machine.

Node.js モジュールNode.js Modules

モジュールは、アプリケーションに対して特定の機能を提供する読み込み可能な JavaScript パッケージです。Modules are loadable JavaScript packages that provide specific functionality for your application. モジュールは通常、npm コマンドライン ツールを使用してインストールされますが、一部のモジュール (http モジュールなど) はコア Node.js パッケージの一部として提供されます。Modules are usually installed using the npm command-line tool, however some modules (such as the http module) are provided as part of the core Node.js package.

インストールされたモジュールは、アプリケーション ディレクトリ構造のルートにある node_modules ディレクトリに保存されます。When modules are installed, they are stored in the node_modules directory at the root of your application directory structure. node_modules ディレクトリ内の各モジュールは、それが依存しているモジュールをすべて含む独自の node_modules ディレクトリを保持します。この動作は、依存関係チェーンの最後まですべてのモジュールで繰り返されます。Each module within the node_modules directory maintains its own node_modules directory that contains any modules that it depends on, and this behavior repeats for every module all the way down the dependency chain. この環境では、インストールされている各モジュールが、依存するモジュールに関して独自のバージョン要件を持つことができます。ただし、ディレクトリ構造が非常に大きくなる場合があります。This environment allows each module installed to have its own version requirements for the modules it depends on, however it can result in quite a large directory structure.

node_modules ディレクトリをアプリケーションの一部としてデプロイすると、デプロイのサイズは、package.json または npm-shrinkwrap.json ファイルを使用した場合より大きくなりますが、運用環境で使用されるモジュールのバージョンが、開発環境で使用されるモジュールと同じであることが確かに保証されます。Deploying the node_modules directory as part of your application increases the size of the deployment when compared to using a package.json or npm-shrinkwrap.json file; however, it does guarantee that the versions of the modules used in production are the same as the modules used in development.

ネイティブ モジュールNative Modules

ほとんどのモジュールがシンプルな JavaScript テキスト ファイルですが、中にはプラットフォーム固有のバイナリ イメージのモジュールもあります。While most modules are simply plain-text JavaScript files, some modules are platform-specific binary images. こうしたモジュールは、通常、インストール時に Python および node-gyp を使用してコンパイルされます。These modules are compiled at install time, usually by using Python and node-gyp. Azure Cloud Services は、アプリケーションの一部としてデプロイされている node_modules フォルダーに依存するので、インストールされたモジュールの一部として含まれるネイティブ モジュールはすべて、Windows 開発システムでインストールおよびコンパイルされている限りクラウド サービスで動作します。Since Azure Cloud Services rely on the node_modules folder being deployed as part of the application, any native module included as part of the installed modules should work in a cloud service as long as it was installed and compiled on a Windows development system.

Azure App Service では、すべてのネイティブ モジュールがサポートされるわけではありません。また、固有の前提条件があるモジュールのコンパイル時にサービスが失敗することもあります。Azure App Service does not support all native modules, and might fail when compiling modules with specific prerequisites. MongoDB のような人気のある一部のモジュールには、任意で満たすネイティブの依存関係があって、それが満たされなくても正常に機能しますが、現在、ほぼすべてのネイティブ モジュールで成功が実証されている 2 つの回避策を利用できます。While some popular modules like MongoDB have optional native dependencies and work fine without them, two workarounds proved successful with almost all native modules available today:

  • ネイティブ モジュールの前提条件がすべてインストールされている Windows コンピューターで npm install を実行します。Run npm install on a Windows machine that has all the native module's prerequisites installed. 次に、作成した node_modules フォルダーを Azure App Service へのアプリケーションの一部としてデプロイします。Then, deploy the created node_modules folder as part of the application to Azure App Service.

    • コンパイルする前に、ローカルの Node.js インストールで対応するアーキテクチャが使用されていることと、バージョンが Azure で使用されているものにできるだけ近いことを確認してください (現在の値は、ランタイムで process.arch プロパティと process.version プロパティから確認できます)。Before compiling, check that your local Node.js installation has matching architecture and the version is as close as possible to the one used in Azure (the current values can be checked on runtime from properties process.arch and process.version).
  • Azure App Service はデプロイ中に、カスタムの bash やシェル スクリプトを実行するように構成でき、カスタム コマンドを実行し、 npm install が実行される方法を正確に構成できる機会を与えます。Azure App Service can be configured to execute custom bash or shell scripts during deployment, giving you the opportunity to execute custom commands and precisely configure the way npm install is being run. その環境を構成する方法を示したビデオについては、「Custom Web Site Deployment Scripts with Kudu (Kudu を使用したカスタム Web サイト デプロイメント スクリプト)」を参照してください。For a video showing how to configure that environment, see [Custom Website Deployment Scripts with Kudu].

package.json ファイルの使用Using a package.json file

package.json ファイルは、ホスティング プラットフォームが依存関係をインストールできるように、アプリケーションに必要な最上位レベルの依存関係を指定する 1 つの手段です。この場合、node_modules フォルダーをデプロイの一部として含める必要はありません。The package.json file is a way to specify the top level dependencies your application requires so that the hosting platform can install the dependencies, rather than requiring you to include the node_modules folder as part of the deployment. アプリケーションのデプロイ後、npm install コマンドによって package.json ファイルが解析され、表示されているすべての依存関係がインストールされます。After the application has been deployed, the npm install command is used to parse the package.json file and install all the dependencies listed.

開発中、モジュールをインストールするときに --save--save-dev、または --save-optional パラメーターを使用すると、モジュールのエントリを package.json ファイルに自動的に追加することができます。During development, you can use the --save, --save-dev, or --save-optional parameters when installing modules to add an entry for the module to your package.json file automatically. 詳細については、「 npm-install」を参照してください。For more information, see npm-install.

package.json ファイルの潜在的な問題の 1 つが、このファイルでは最上位レベルの依存関係のバージョンしか指定されないという点です。One potential problem with the package.json file is that it only specifies the version for top-level dependencies. インストールされているモジュールはそれぞれ、自身が依存しているモジュールのバージョンを指定することがあれば、指定しないこともあります。したがって、依存関係チェーンが、開発時に使用されたもの以外になる可能性があります。Each module installed may or may not specify the version of the modules it depends on, and so it is possible that you may end up with a different dependency chain than the one used in development.

注意

Azure App Service へのデプロイ中、package.json ファイルがネイティブ モジュールを参照すると、Git を使用してアプリケーションを発行するときに次の例のようなエラーが表示される場合があります。When deploying to Azure App Service, if your package.json file references a native module you might see an error similar to the following example when publishing the application using Git:

npm ERR!npm ERR! module-name@0.6.0 install: 'node-gyp configure build'module-name@0.6.0 install: 'node-gyp configure build'

npm ERR!npm ERR! 'cmd "/c" "node-gyp configure build"' failed with 1'cmd "/c" "node-gyp configure build"' failed with 1

npm-shrinkwrap.json ファイルの使用Using a npm-shrinkwrap.json file

npm-shrinkwrap.json ファイルは、package.json ファイルのモジュール バージョン管理制限への対処を試みるものです。The npm-shrinkwrap.json file is an attempt to address the module versioning limitations of the package.json file. package.json ファイルに含まれるのは最上位レベルのモジュールのバージョンのみですが、npm-shrinkwrap.json ファイルには、完全なモジュール依存関係チェーンのバージョン要件が含まれます。While the package.json file only includes versions for the top-level modules, the npm-shrinkwrap.json file contains the version requirements for the full module dependency chain.

アプリケーションの運用の準備ができたら、バージョン要件を整理して確定し、npm shrinkwrap コマンドを使用して npm-shrinkwrap.json ファイルを作成できます。When your application is ready for production, you can lock down version requirements and create an npm-shrinkwrap.json file by using the npm shrinkwrap command. このコマンドでは、node_modules フォルダーに現在インストールされているバージョンが使用され、これらのバージョンが npm-shrinkwrap.json ファイルに記録されます。This command will use the versions currently installed in the node_modules folder, and record these versions to the npm-shrinkwrap.json file. ホスティング環境へのアプリケーションのデプロイ後、npm install コマンドによって npm-shrinkwrap.json ファイルが解析され、表示されているすべての依存関係がインストールされます。After the application has been deployed to the hosting environment, the npm install command is used to parse the npm-shrinkwrap.json file and install all the dependencies listed. 詳細については、「 npm-shrinkwrap」を参照してください。For more information, see npm-shrinkwrap.

注意

Azure App Service へのデプロイ中、npm-shrinkwrap.json ファイルがネイティブ モジュールを参照すると、Git を使用してアプリケーションを発行するときに次の例のようなエラーが表示される場合があります。When deploying to Azure App Service, if your npm-shrinkwrap.json file references a native module you might see an error similar to the following example when publishing the application using Git:

npm ERR!npm ERR! module-name@0.6.0 install: 'node-gyp configure build'module-name@0.6.0 install: 'node-gyp configure build'

npm ERR!npm ERR! 'cmd "/c" "node-gyp configure build"' failed with 1'cmd "/c" "node-gyp configure build"' failed with 1

次のステップNext steps

ここでは、Azure で Node.js モジュールを使う方法について説明しました。次は、Node.js のバージョンを指定する方法、Node.js Web アプリを構築およびデプロイする方法、Mac および Linux で Azure コマンド ライン インターフェイスを使う方法について、それぞれのトピックをご覧ください。Now that you understand how to use Node.js modules with Azure, learn how to [specify the Node.js version], build and deploy a Node.js web app, and [How to use the Azure Command-Line Interface for Mac and Linux].

詳細については、 Node.js デベロッパー センターを参照してください。For more information, see the Node.js Developer Center.