概要

Next.js は、React.js Web ページや Node.js API を作成するために使用される、Vercel によって作成された JavaScript フレームワークです。Next.js を RUM とインテグレーションすることで、フロントエンドとバックエンドのアプリケーションのブラウザ関連のメトリクスを監視し、パフォーマンスとユーザー行動を把握することができます。

セットアップ

以下の手順に従って、Datadog RUM ブラウザモニタリングを設定します。

アプリケーションの作成

  1. Digital Experience > Performance Summary に移動します。
  2. New Application ボタンをクリックします。
  3. JS が選択されていることを確認し、アプリケーションの名前を入力して Create New RUM Application をクリックします。アプリケーションの clientTokenapplicationId が自動的に生成されます。
`.env.local` を使用する場合、プレフィックス `NEXT_PUBLIC_` の付いた変数のみがクライアントバンドルに含まれます。Next.js のドキュメントのブラウザの環境変数のバンドルを参照してください。

アプリケーションをインスツルメントする

  1. インスツルメンテーションの種類を選択し、Datadog RUM UI からインスツルメンテーションの種類に応じた適切なファイルにコードスニペットをコピーアンドペーストします。

    npm を使用する際は、ルートの layout.tsx ファイルまたはカスタムの _app.tsx ファイル (Datadog は両方をサポートしています) に貼り付ける前に、Datadog RUM UI からコードスニペットにいくつかの小さな変更を加える必要があります。

    • アプリケーションが より新しい Next.js App Router (バージョン 13 以上) に依存している場合、Datadog では、RUM の初期化がクライアント側で行われるように、CDN 版 RUM のインスツルメンテーションを使用することを推奨しています。npm パッケージを使用する場合、RUM がクライアントからテレメトリーを収集できるように、初期化コードは クライアントコンポーネント で実行する必要があります。これは、layout.tsx ファイル自体をクライアントコンポーネントにしなくても、以下の例に従って RUM の初期化コードで空の <DatadogInit /> コンポーネントを作成し、その <DatadogInit /> コンポーネントを layout.tsx でレンダリングすることで実現できます。
    • Next.js アプリケーションがより古い Next.js Page Router に依存している場合は、"use client" ディレクティブなしで、また <DatadogInit /> コンポーネントを別途用意しなくても、カスタムの _app.tsx ファイルに初期化スニペットを貼り付けることができます。

    datadog-init.tsx

       // このファイルがクライアント上で実行されるようにするため、App Router を使用する場合に必要。
       "use client";
    
        import { datadogRum } from "@datadog/browser-rum";
    
        datadogRum.init({
          applicationId: "<YOUR_APPLICATION_ID>",
          clientToken: "<CLIENT_TOKEN>",
          site: "datadoghq.com",
          service: "<SERVICE_NAME>",
          env: "<ENV_NAME>",
          // Datadog のデプロイされたアプリケーションのバージョンを識別するためにバージョン番号を指定します
          // version: '1.0.0',
          sessionSampleRate: 100,
          sessionReplaySampleRate: 20,
          trackUserInteractions: true,
          trackResources: true,
          trackLongTasks: true,
          defaultPrivacyLevel: "mask-user-input",
          // RUM とバックエンドトレース間の接続のために、トレースヘッダーを伝播する URL を指定します
          allowedTracingUrls: [
            { match: "https://example.com/api/", propagatorTypes: ["tracecontext"] },
          ],
        });
    
        export default function DatadogInit() {
          // レンダリングなし - このコンポーネントは、上記の初期化コードを
          // クライアント側で実行するためだけに追加されています
          return null;
        }
       
    

    layout.tsx or _app.tsx

        import DatadogInit from "@/components/datadog-init";
    
        export default function RootLayout({
          children,
        }: {
          children: React.ReactNode;
        }) {
          return (
            <html lang="en">
              <body>
                <DatadogInit />
                {children}
              </body>
            </html>
          );
        }
    
       
    

    CDN 非同期を使用する場合は、root layout.tsx ファイルまたはカスタム _app.tsx ファイル (Datadog は両方をサポートしています) に貼り付ける前に、Datadog RUM UI からコードスニペットにいくつかの小さな変更を加える必要があります。

    • アプリケーションがより新しい Next.js App Router (バージョン 13 以上) に依存している場合は、スニペットを root layout.tsx ファイルに貼り付けます。
    • Next.js アプリケーションがより古い Next.js Page Router に依存している場合は、スニペットをカスタム _app.tsx ファイルに貼り付けます。
    • このページのように、Next.js の外部スクリプトを読み込む必要があります。

    : Next.js スクリプトには import と export の行があり、Script id の間には中かっこやバックスティックが含まれています。ここで、Script のインスタンスはすべて大文字です。

    layout.tsx or _app.tsx

       import Script from "next/script";
    
       export default function RootLayout({
         children,
       }: {
         children: React.ReactNode;
       }) {
         return (
           <html lang="en">
             <Script id="datadog-rum">
               {`
                 (function(h,o,u,n,d) {
                   h=h[d]=h[d]||{q:[],onReady:function(c){h.q.push(c)}}
                   d=o.createElement(u);d.async=1;d.src=n
                   n=o.getElementsByTagName(u)[0];n.parentNode.insertBefore(d,n)
                 })(window,document,'script','https://www.datadoghq-browser-agent.com/us1/v6/datadog-rum.js','DD_RUM')
                 window.DD_RUM.onReady(function() {
                   window.DD_RUM.init({
                     clientToken: '<CLIENT_TOKEN>',
                     applicationId: '<YOUR_APPLICATION_ID>',
                     site: 'datadoghq.com',
                     service: 'next-app-router-rum',
                     env: '<ENV_NAME>',
                     // デプロイされたアプリケーションのバージョンを Datadog 内で特定するためのバージョン番号を指定します
                     // version: '1.0.0',
                     sessionSampleRate: 100,
                     sessionReplaySampleRate: 100,
                   });
                 })
               `}
             </Script>
             <body>{children}</body>
           </html>
         );
       }
    
       
    

    CDN 同期を使用する場合は、root layout.tsx ファイルまたはカスタム _app.tsx ファイル (Datadog は両方をサポートしています) に貼り付ける前に、Datadog RUM UI からコードスニペットにいくつかの小さな変更を加える必要があります。

    • アプリケーションがより新しい Next.js App Router (バージョン 13 以上) に依存している場合は、スニペットを root layout.tsx ファイルに貼り付けます。
    • Next.js アプリケーションがより古い Next.js Page Router に依存している場合は、スニペットをカスタム _app.tsx ファイルに貼り付けます。
    • このページのように、Next.js の外部スクリプトを読み込む必要があります。

    : Next.js スクリプトには import と export の行があり、Script id の間には中かっこやバックスティックが含まれています。ここで、Script のインスタンスはすべて大文字です。

    layout.tsx or _app.tsx

       import Script from "next/script";
    
       export default function RootLayout({
         children,
       }: {
         children: React.ReactNode;
       }) {
         return (
           <html lang="en">
             <body>
               <Script
                 id="dd-rum-sync"
                 src="https://www.datadoghq-browser-agent.com/us1/v6/datadog-rum.js"
                 type="text/javascript"
                 strategy="beforeInteractive"
               />
               <Script id="datadog-rum">
                 {`
                   window.DD_RUM && window.DD_RUM.init({
                     clientToken: '<CLIENT_TOKEN>',
                     applicationId: '<YOUR_APPLICATION_ID>',
                     site: 'datadoghq.com',
                     service: 'rum-cdn-async',
                     env: '<ENV_NAME>',
                     // デプロイされたアプリケーションのバージョンを Datadog 内で特定するためのバージョン番号を指定します
                     // version: '1.0.0',
                     sessionSampleRate: 100,
                     sessionReplaySampleRate: 100,
                   });
                 `}
               </Script>
               {children}
             </body>
           </html>
         );
       }
    
       
    
  2. アプリ内の手順に従ってインストールを検証します。

  3. 変更をアプリケーションにデプロイします。実行が開始されると、ユーザーブラウザから Datadog によってイベントが収集されます。

  4. 収集したデータは、ダッシュボードを使用して Next.js アプリケーションで視覚化できます。

バックエンドのモニタリング

Next.js アプリケーションのバックエンドモニタリングを開始するには

  1. RUM とトレースの接続のブラウザの設定手順に従います。
  2. OpenTelemetry サポートのブラウザの設定手順に従って、APM と接続します。

その他の参考資料

お役に立つドキュメント、リンクや記事: