instrumentation.js
instrumentation.js|ts
ファイルは、アプリケーションに観測ツールを統合するために使用され、本番環境でのパフォーマンスや動作を追跡し、問題をデバッグすることができます。
使用するには、アプリケーションのルートまたはsrc
フォルダ(使用している場合)にファイルを配置します。
エクスポート
register
(オプション)
このファイルは、新しいNext.jsサーバーインスタンスが開始されたときに1回呼び出されるregister
関数をエクスポートします。register
は非同期関数にすることができます。
instrumentation.ts
TypeScript
import { registerOTel } from '@vercel/otel'
export function register() {
registerOTel('next-app')
}
onRequestError
(オプション)
任意のカスタム観測プロバイダーにサーバーエラーを追跡するために、onRequestError
関数をエクスポートできます。
onRequestError
で非同期タスクを実行する場合は、それらを必ず待機してください。onRequestError
は、Next.jsサーバーがエラーをキャプチャしたときにトリガーされます。- エラーインスタンスは、Server Componentsのレンダリング中に発生した場合、元のエラーインスタンスではない可能性があります。そのような場合、エラーの
digest
プロパティを使用して実際のエラータイプを識別できます。
instrumentation.ts
TypeScript
import { type Instrumentation } from 'next'
export const onRequestError: Instrumentation.onRequestError = async (
err,
request,
context
) => {
await fetch('https://.../report-error', {
method: 'POST',
body: JSON.stringify({
message: err.message,
request,
context,
}),
headers: {
'Content-Type': 'application/json',
},
})
}
パラメータ
この関数は、error
、request
、context
の3つのパラメータを受け取ります。
Types
export function onRequestError(
error: { digest: string } & Error,
request: {
path: string // リソースパス、例:/blog?name=foo
method: string // リクエストメソッド。例:GET、POST など
headers: { [key: string]: string }
},
context: {
routerKind: 'Pages Router' | 'App Router' // ルーターの種類
routePath: string // ルートファイルのパス、例:/app/blog/[dynamic]
routeType: 'render' | 'route' | 'action' | 'middleware' // エラーが発生したコンテキスト
renderSource:
| 'react-server-components'
| 'react-server-components-payload'
| 'server-rendering'
revalidateReason: 'on-demand' | 'stale' | undefined // 再検証なしの通常のリクエストの場合はundefined
renderType: 'dynamic' | 'dynamic-resume' // PPRの場合は'dynamic-resume'
}
): void | Promise<void>
error
: キャッチされたエラー自体(常にError
型)、および一意のエラーIDであるdigest
プロパティ。request
: エラーに関連付けられた読み取り専用のリクエスト情報。context
: エラーが発生したコンテキスト。これは、ルーターのタイプ(AppまたはPages Router)、および/またはServer Components('render'
)、Route Handlers('route'
)、Server Actions('action'
)、またはMiddleware('middleware'
)になります。
ランタイムの指定
instrumentation.js
ファイルはNode.jsとEdgeの両方のランタイムで動作しますが、process.env.NEXT_RUNTIME
を使用して特定のランタイムをターゲットにすることができます。
instrumentation.js
export function register() {
if (process.env.NEXT_RUNTIME === 'edge') {
return require('./register.edge')
} else {
return require('./register.node')
}
}
export function onRequestError() {
if (process.env.NEXT_RUNTIME === 'edge') {
return require('./on-request-error.edge')
} else {
return require('./on-request-error.node')
}
}
バージョン履歴
バージョン | 変更点 |
---|---|
v15.0.0-RC | onRequestError 導入、instrumentation が安定版に |
v14.0.4 | instrumentation のTurbopack対応 |
v13.2.0 | instrumentation を実験的機能として導入 |