instrumentation.js
instrumentation.js|ts ファイルは、オブザーバビリティツールをアプリケーションに統合するために使用され、パフォーマンスと動作を追跡し、本番環境での問題をデバッグできるようにします。
使用するには、ファイルをアプリケーションのルートに配置するか、使用している場合は src フォルダー内に配置します。
エクスポート
register (オプション)
ファイルは、新しい Next.js サーバーインスタンスが開始されるときに一度呼び出される register 関数をエクスポートします。register は非同期関数にすることができます。
instrumentation.ts
import { registerOTel } from '@vercel/otel'
export function register() {
registerOTel('next-app')
}onRequestError (オプション)
オプションで onRequestError 関数をエクスポートして、カスタムオブザーバビリティプロバイダーへのサーバーエラーを追跡できます。
onRequestErrorで非同期タスクを実行している場合は、それらが await されていることを確認してください。onRequestErrorは、Next.js サーバーがエラーをキャプチャしたときにトリガーされます。errorインスタンスは、Server Components のレンダリング中に発生した場合、React によって処理される可能性があるため、元のエラーインスタンスではない場合があります。この場合、エラーのdigestプロパティを使用して実際のエラータイプを特定できます。
instrumentation.ts
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',
},
})
}Parameters
この関数は error、request、context の 3 つのパラメータを受け取ります。
型
export function onRequestError(
error: { digest: string } & Error,
request: {
path: string // resource path, e.g. /blog?name=foo
method: string // request method. e.g. GET, POST, etc
headers: { [key: string]: string | string[] }
},
context: {
routerKind: 'Pages Router' | 'App Router' // the router type
routePath: string // the route file path, e.g. /app/blog/[dynamic]
routeType: 'render' | 'route' | 'action' | 'proxy' // the context in which the error occurred
renderSource:
| 'react-server-components'
| 'react-server-components-payload'
| 'server-rendering'
revalidateReason: 'on-demand' | 'stale' | undefined // undefined is a normal request without revalidation
renderType: 'dynamic' | 'dynamic-resume' // 'dynamic-resume' for PPR
}
): void | Promise<void>error: キャッチされたエラー自体 (型は常にError)、およびエラーの一意の ID であるdigestプロパティ。request: エラーに関連付けられた読み取り専用のリクエスト情報。context: エラーが発生したコンテキスト。ルーターのタイプ (App または Pages Router)、および/または (Server Components ('render')、Route Handlers ('route')、Server Actions ('action')、または Proxy ('proxy')) のいずれか、あるいは複数になります。
ランタイムの指定
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 | onRequestError が導入され、instrumentation が安定版になりました |
v14.0.4 | instrumentation の Turbopack サポート |
v13.2.0 | instrumentation が実験的機能として導入されました |
役に立ちましたか?