計測
計測とは、監視・ロギングツールをアプリケーションに統合するためにコードを使用するプロセスです。これにより、アプリケーションのパフォーマンスと動作を追跡し、本番環境での問題をデバッグできます。
規約
計測を設定するには、プロジェクトの**ルートディレクトリ**に `instrumentation.ts|js` ファイルを作成します(`src` フォルダを使用している場合はその中)。
次に、ファイル内で `register` 関数をエクスポートします。この関数は、新しいNext.jsサーバーインスタンスが初期化されるときに**一度だけ**呼び出されます。
例えば、OpenTelemetryと@vercel/otelでNext.jsを使用する場合:
import { registerOTel } from '@vercel/otel'
export function register() {
registerOTel('next-app')
}
完全な実装については、OpenTelemetryのNext.jsの例を参照してください。
知っておくと良いこと:
- `instrumentation` ファイルはプロジェクトのルートに配置し、`app` や `pages` ディレクトリ内には配置しないでください。`src` フォルダを使用している場合は、`src` の中に `pages` および `app` と並べてファイルを配置してください。
- `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')
}
}
お役に立ちましたか?