アナリティクス
Next.js には、パフォーマンスメトリクスの測定とレポート機能が組み込まれています。useReportWebVitals
フックを使って自分でレポートを管理することもできますし、Vercel が提供するマネージドサービスで自動的にメトリクスを収集して可視化することもできます。
Build Your Own
app/_components/web-vitals.js
'use client'
import { useReportWebVitals } from 'next/web-vitals'
export function WebVitals() {
useReportWebVitals((metric) => {
console.log(metric)
})
}
app/layout.js
import { WebVitals } from './_components/web-vitals'
export default function Layout({ children }) {
return (
<html>
<body>
<WebVitals />
{children}
</body>
</html>
)
}
useReportWebVitals
フックは"use client"
ディレクティブを必要とするため、最もパフォーマンスの高いアプローチは、ルートレイアウトがインポートする別のコンポーネントを作成することです。これにより、クライアントの境界はWebVitals
コンポーネントのみに限定されます。
詳しくは API リファレンスをご覧ください。
Web vitals
Web Vitals は、ウェブページのユーザー・エクスペリエンスを把握することを目的とした、便利なメトリクスのセットです。以下のがすべて含まれています:
- Time to First Byte(TTFB: 最初の 1 バイトを受信するまでの時間)
- First Contentful Paint(FCP:視覚コンテンツの初期表示時間)
- Largest Contentful Paint(LCP:最大コンテンツの描画)
- First Input Delay(FID:初回入力までの遅延時間)
- Cumulative Layout Shift(CLS:累積レイアウトシフト数)
- Interaction to Next Paint(INP:ページの読み込みを開始してからユーザーがページを離れるまでの間に発生する、ユーザー入力への応答性)(実験的機能)
name
プロパティを使って、これらのメトリクスの結果をすべて扱うことができます。
app/components/web-vitals.tsx
'use client'
import { useReportWebVitals } from 'next/web-vitals'
export function WebVitals() {
useReportWebVitals((metric) => {
switch (metric.name) {
case 'FCP': {
// handle FCP results
}
case 'LCP': {
// handle LCP results
}
// ...
}
})
}