Node.jsアプリケーションのコード管理にESMを使用している場合、Node.jsエージェントを使用してそれらのアプリケーションをモニターできるようになりました。
注意
ESMアプリケーションの計装に対するNode.js APMエージェントのサポートは実験的です。エージェントは、計装を登録するために実験的なNode.js機能に依存しています。ESMローダーのNode.js APIが安定するまで、破壊的変更が発生する可能性があります。
概要
v12.0.0 より前は、Node.js は、CommonJS モジュールを使用したコードの管理のみを公式にサポートしていました。CommonJS モジュールは、次の例のように、 module.exports ステートメントとrequire()ステートメントを使用してコードを管理します。
'use strict'
const bar = require('./bar')
function echoBar() { console.log('this is bar:', bar)}
module.exports = { echoBar}Node.js v12.0.0 以降、ECMAScript モジュール (ES モジュール/「ESM」) のサポートが追加されました。
require()とmodule.exportsの代わりに、ESMは次のようなimportとexportのステートメントを使用します:
'use strict'
import bar from './bar.js'
export function echoBar() { console.log('this is bar:', bar)}ESMはコード管理のための公式なECMAScript標準であり、ブラウザやその他のJSランタイムがパッケージを管理するための標準的な方法です。現在および将来にわたって進化するNode.jsエコシステムをサポートするため、エージェントはバージョン9.1.0以降、ESMを使用して記述された、インストゥルメントされたアプリケーションをサポートします。Node.js APMエージェントは、引き続きCommonJSアプリケーションもサポートします。
重要
ESMアプリケーションでNode.js APMエージェントを使用する場合、サポートされるNode.jsの最小バージョンはv16.12.0です。
エージェントのセットアップ
エージェントがESMアプリケーションを正常に計装するためには、インストレーションのドキュメントで説明されているように、まずNode.jsエージェントをインストールする必要があります。エージェントのインストールが完了したら、以下のセクションの設定に進んでください。
構成
アプリケーションで構成ファイルを使用してエージェントを構成する場合、構成ファイルの拡張子を.js ではなく.cjsに更新する必要があります。
エージェントは CommonJS モジュールとして作成されます。 require()を使用して、起動時に構成ファイルを読み込みます。ファイル拡張子を変更することで、エージェントの構成ファイルを CommonJS モジュールとして明示的にラベル付けし、エージェントがそれを正常にロードできるようにします。
ファイル拡張子を更新しないと、エージェントの起動時に次のエラーが表示される場合があります。
New Relic for Node.js is disabled due to an error:Error [ERR_REQUIRE_ESM]: require() of ESM /path/to/your/application/newrelic.js from /path/to/your/application/node_modules/newrelic/lib/config/index.js not supported.ESMローダーの追加
エージェントがESMエコシステム内で計装を適切に適用するためには、アプリケーションの呼び出し時に、エージェントとともにエージェントのESMローダーを含める必要があります。Node.jsの--importCLI引数を使用することで、アプリケーションにローダーを追加できます。
$node --import newrelic/esm-loader.mjs -r newrelic your-program.jsカスタムインストゥルメンテーション
Node.js APMエージェントは、ESMアプリケーションへのカスタムインストゥルメンテーションの追加をサポートしています。APIにある計装登録手段のほとんどを使用して、ESMアプリケーションで計装を作成できます。ESMインポートの性質上、エージェントはnewrelic.instrumentLoadedModuleをサポートしていません。ESMバインディングは代入できないため、モジュールのロード後にエージェントがモジュールのエクスポートされたメンバーを計装に置き換えることはできません。
ESMアプリケーションでカスタムインストゥルメンテーションAPIを使用する方法のデモンストレーションを確認するには、GitHubの例を確認してください。