インストゥルメンテーション
インストルメンテーションは、モニタリングおよびロギングツールをアプリケーションに統合するためにコードを使用するプロセスです。これにより、アプリケーションのパフォーマンスと動作を追跡し、本番環境で問題をデバッグできます。
規約
インストルメンテーションを設定するには、プロジェクトのルートディレクトリにinstrumentation.ts|js
ファイルを作成します(src
フォルダを使用している場合はそのフォルダ内に作成)。
次に、ファイル内にregister
関数をエクスポートします。この関数は、新しいNext.jsサーバーインスタンスが起動されるときに一度だけ呼び出されます。
例えば、Next.jsをOpenTelemetryと@vercel/otelと共に使用するには:
完全な実装については、Next.js with OpenTelemetryの例を参照してください。
補足:
instrumentation
ファイルは、プロジェクトのルートに配置し、app
またはpages
ディレクトリ内には配置しないでください。src
フォルダを使用している場合は、pages
とapp
と同じ場所に配置します。pageExtensions
設定オプションを使用してサフィックスを追加する場合、instrumentation
のファイル名も合わせて更新する必要があります。
例
副作用のあるファイルのインポート
コードの副作用のために、ファイルをインポートすることが有用な場合があります。例えば、グローバル変数のセットを定義するファイルをインポートしますが、コード内で明示的にそのインポートしたファイルを使用しないことがあります。それでも、パッケージが宣言したグローバル変数にアクセスできます。
register
関数内でJavaScriptのimport
構文を使用してファイルをインポートすることをお勧めします。以下の例は、register
関数でのimport
の基本的な使用法を示しています:
補足:
ファイルのインポートは、ファイルの先頭ではなく、
register
関数内から行うことをお勧めします。これにより、コード内のすべての副作用を1か所にまとめることができ、ファイルの先頭でグローバルにインポートすることによる意図しない結果を回避できます。
ランタイム固有のコードのインポート
Next.jsは全ての環境でregister
を呼び出すため、特定のランタイム(EdgeまたはNode.jsなど)をサポートしないコードは条件付きでインポートすることが重要です。現在の環境を取得するには、NEXT_RUNTIME
環境変数を使用できます: