計測
計測とは、コードを使用して監視ツールとログツールをアプリケーションに統合するプロセスです。これにより、アプリケーションのパフォーマンスと動作を追跡し、本番環境での問題をデバッグできます。
規約
計測を設定するには、プロジェクトのルートディレクトリ(またはsrc
フォルダーを使用している場合はその中)にinstrumentation.ts|js
ファイルを作成します。
次に、ファイルにregister
関数をエクスポートします。この関数は、新しいNext.jsサーバーインスタンスが開始されるときに一度だけ呼び出されます。
たとえば、Next.jsをOpenTelemetryと@vercel/otelで使用する場合。
import { registerOTel } from '@vercel/otel'
export function register() {
registerOTel('next-app')
}
完全な実装については、Next.js with OpenTelemetryの例を参照してください。
知っておくと良いこと:
instrumentation
ファイルは、プロジェクトのルートに配置する必要があり、app
またはpages
ディレクトリ内には配置しないでください。src
フォルダーを使用している場合は、pages
およびapp
と一緒にsrc
内にファイルを配置します。pageExtensions
構成オプションを使用してサフィックスを追加する場合は、instrumentation
ファイル名を一致するように更新する必要もあります。
例
副作用のあるファイルのインポート
場合によっては、コード内でファイルが引き起こす副作用のためにファイルをインポートすることが役立つ場合があります。たとえば、グローバル変数のセットを定義するファイルをインポートするが、インポートされたファイルをコードで明示的に使用しない場合があります。それでも、パッケージが宣言したグローバル変数にアクセスできます。
register
関数内でJavaScriptのimport
構文を使用してファイルをインポートすることをお勧めします。次の例は、register
関数でのimport
の基本的な使用方法を示しています。
export async function register() {
await import('package-with-side-effect')
}
知っておくと良いこと
ファイルの先頭ではなく、
register
関数内からファイルをインポートすることをお勧めします。これにより、コード内の1か所にすべての副作用をまとめて配置でき、ファイルの先頭でグローバルにインポートすることによる意図しない結果を回避できます。
ランタイム固有のコードのインポート
Next.jsはすべての環境でregister
を呼び出すため、特定のランタイム(例:EdgeやNode.js)をサポートしていないコードは、条件付きでインポートすることが重要です。現在の環境を取得するには、NEXT_RUNTIME
環境変数を使用できます。
export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
await import('./instrumentation-node')
}
if (process.env.NEXT_RUNTIME === 'edge') {
await import('./instrumentation-edge')
}
}
この記事は役に立ちましたか?