リアルユーザーモニタリングとWeb Vitals
web-vitalsライブラリを使い、LCP、FID、CLS、カスタムパフォーマンスマークをOTelメトリクスとして取得します。
「リアルユーザーモニタリングとWeb Vitals」はCoddyKit上の無料React Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
web-vitals ライブラリ
Google の web-vitals npm パッケージは、実際のユーザーのブラウザーで Core Web Vitals を測定するためのシンプルな API を提供します。npm install web-vitals でインストールし、各メトリクスのコールバックである onLCP、onFID(非推奨)、onCLS、onFCP、onTTFB、および Interaction to Next Paint 用の最新の onINP を個別にインポートします。
メトリクスのコールバックとメトリクスオブジェクト
各コールバック(onLCP、onCLS、onINP など)は、name('LCP')、value(ミリ秒または単位のないスコア)、rating('good'、'needs-improvement'、'poor')、および id(重複排除用の一意な識別子)を含むメトリクスオブジェクトを受け取ります。コールバックは、メトリクスの値が確定した時点で 1 回実行されます。
Web Vitals を分析エンドポイントに報告する
メトリクスを分析エンドポイントに報告するには、Navigator.sendBeacon API または fetch を使用します。sendBeacon はページがアンロードされた後も処理を継続するため、ページが非表示になったときに確定する CLS などのメトリクスには特に適しています。可能な場合は、すべてのメトリクスの報告を 1 つの beacon にまとめてください。
Web Vitals を OTel メトリクスとして送信する
Web Vitals を OpenTelemetry と統合するには、各メトリクス用の Gauge インストルメントを作成します。const lcp = meter.createObservableGauge('web_vitals.lcp')。各 onLCP コールバックで、関連する属性(ページパス、デバイスの種類)とともに値を記録します。これにより、オブザーバビリティバックエンドで P75 LCP の悪化に対してアラートを設定できます。
カスタム React パフォーマンスマーク
Web Vitals では取得できない React 固有のパフォーマンスを測定するには、User Timing API を使用します。レンダリング前に performance.mark('render-start')、レンダリング後に performance.mark('render-end') を実行し、その後 performance.measure('component-render', 'render-start', 'render-end') を実行します。これらの計測結果は Chrome DevTools の Performance タブに表示されます。
React Profiler API
React Profiler コンポーネントはサブツリーをラップし、タイミングデータとともに onRender コールバックを呼び出します。データには id(Profiler の id)、phase('mount' または 'update')、actualDuration(レンダー時間)、baseDuration(メモ化を行わない場合の推定レンダー時間)が含まれます。開発中にこれを使用して、処理の遅いコンポーネントを特定してください。
エラー追跡を OTel span として行う
未処理のエラーや Promise の拒否は、エラーステータスを持つ OTel span として捕捉できます。グローバルリスナーを設定します:window.addEventListener('error', handler) および window.addEventListener('unhandledrejection', handler)。span を作成し、span.setStatus({ code: SpanStatusCode.ERROR }) を設定して、エラーメッセージとスタックトレースを属性として追加し、その後 span を終了します。
React Error Boundaries の統合
React Error Boundaries は、コンポーネントツリー内で発生したレンダリングエラーを捕捉します。componentDidCatch メソッドでエラーを表す OTel span を作成し、ステータスを ERROR に設定して、error.message と componentStack を属性として付加し、span.end() を呼び出します。これにより、React のレンダリングエラーが分散トレースのパイプラインに送られます。
スタックトレース解決のためのソースマップ
本番環境で minify された JavaScript では、"a.b at bundle.min.js:1:84721" のような読みにくいスタックトレースが生成されます。CI/CD のビルドプロセス中にソースマップを Sentry、Datadog、または OTel パイプラインにアップロードしておくと、未加工のスタックトレースが元の TypeScript ファイル名と行番号に自動的に解決されます。
RUM セッションのサンプリング
すべてのセッションについて完全なトレースデータを送信すると、コストが高くなります。セッションサンプリングを実装し、最初のページ読み込み時に sessionSampled フラグをランダムに割り当てて sessionStorage に保存します。サンプリング対象のセッション(例:10%)に対してのみ OTel SDK を初期化し、トレースを送信します。エラーが発生したセッションは常に 100% サンプリングしてください。
Web Vital の悪化に対するアラート
Web Vitals を OTel メトリクスとして報告すると、SLO に基づくアラートを設定できます。1 時間の期間において、5% を超えるセッションで P75 LCP が 2.5 秒を超えた場合にアラートを発生させます。これにより、バックエンドのインフラストラクチャメトリクスではなく、ユーザー体験に直接結び付いた、エンジニアリングチームが対応可能なシグナルを得られます。
Web Vitals の onLCP コールバック
web-vitals ライブラリの onLCP コールバックはいつ実行されますか。
レッスンのまとめ
web-vitals ライブラリは、実際のユーザーのブラウザーで LCP、INP、CLS、FCP、TTFB を測定するためのシンプルなコールバックを提供します。これらを OTel メトリクスとして報告して SLO に基づくアラートを設定し、グローバルリスナーと React Error Boundaries を使用してエラーを OTel span として捕捉し、ソースマップをアップロードして minify されたスタックトレースを解決します。セッションをサンプリングしてデータ量を管理しながら、エラーは 100% 保持してください。
よくある質問
「リアルユーザーモニタリングとWeb Vitals」レッスンは無料ですか?
はい。「リアルユーザーモニタリングとWeb Vitals」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「リアルユーザーモニタリングとWeb Vitals」で何を学びますか?
web-vitalsライブラリを使い、LCP、FID、CLS、カスタムパフォーマンスマークをOTelメトリクスとして取得します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「リアルユーザーモニタリングとWeb Vitals」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- フロントエンドのオブザーバビリティ:概要と重要性
- ブラウザーからOpenTelemetryトレースを取得する
- リアルユーザーモニタリングとWeb Vitals
- フロントエンドとバックエンドのトレースを関連付ける