Menu

Next.jsでデバッグツールを使用する方法

このドキュメントでは、VS CodeデバッガChrome DevTools、またはFirefox DevToolsを使用して、フルソースマップのサポートでNext.jsのフロントエンドとバックエンドのコードをデバッグする方法について説明します。

Node.jsに接続できるデバッガであれば、Next.jsアプリケーションのデバッグにも使用できます。詳細はNode.jsのデバッグガイドを参照してください。

VS Codeでのデバッグ

プロジェクトのルートに.vscode/launch.jsonという名前のファイルを以下の内容で作成します:

launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Next.js: debug server-side",
      "type": "node-terminal",
      "request": "launch",
      "command": "npm run dev"
    },
    {
      "name": "Next.js: debug client-side",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:3000"
    },
    {
      "name": "Next.js: debug client-side (Firefox)",
      "type": "firefox",
      "request": "launch",
      "url": "http://localhost:3000",
      "reAttach": true,
      "pathMappings": [
        {
          "url": "webpack://_N_E",
          "path": "${workspaceFolder}"
        }
      ]
    },
    {
      "name": "Next.js: debug full stack",
      "type": "node",
      "request": "launch",
      "program": "${workspaceFolder}/node_modules/next/dist/bin/next",
      "runtimeArgs": ["--inspect"],
      "skipFiles": ["<node_internals>/**"],
      "serverReadyAction": {
        "action": "debugWithEdge",
        "killOnServerStop": true,
        "pattern": "- Local:.+(https?://.+)",
        "uriFormat": "%s",
        "webRoot": "${workspaceFolder}"
      }
    }
  ]
}

注意: VS CodeでFirefoxのデバッグを使用するには、Firefox Debugger拡張機能をインストールする必要があります。

Yarnを使用している場合はnpm run devyarn devに、pnpmを使用している場合はpnpm devに置き換えることができます。

「Next.js: debug full stack」設定では、serverReadyAction.actionはサーバーの準備ができたときに開くブラウザを指定します。debugWithEdgeはEdgeブラウザを起動することを意味します。Chromeを使用している場合は、この値をdebugWithChromeに変更してください。

アプリケーションを起動するポート番号を変更している場合は、http://localhost:30003000を使用しているポートに置き換えてください。

ルートディレクトリ以外からNext.jsを実行している場合(例えば、Turborepoを使用している場合)、サーバーサイドとフルスタックのデバッグタスクにcwdを追加する必要があります。例:"cwd": "${workspaceFolder}/apps/web"

次に、デバッグパネル(WindowsとLinuxではCtrl+Shift+D、macOSでは⇧+⌘+D)に移動し、起動設定を選択してから、F5を押すか、コマンドパレットからDebug: Start Debuggingを選択してデバッグセッションを開始します。

Jetbrains WebStormでデバッガーを使用する

ランタイム設定をリストするドロップダウンメニューをクリックし、Edit Configurations...をクリックします。URLとしてhttp://localhost:3000を指定したJavaScript Debugデバッグ設定を作成します。必要に応じてカスタマイズし(例:デバッグに使用するブラウザ、プロジェクトファイルとして保存など)、OKをクリックします。このデバッグ設定を実行すると、選択したブラウザが自動的に開きます。この時点で、デバッグモードで2つのアプリケーションが実行されているはずです:NextJSのノードアプリケーションとクライアント/ブラウザアプリケーションです。

ブラウザDevToolsでのデバッグ

クライアントサイドコード

通常通りnext devnpm run dev、またはyarn devを実行して開発サーバーを起動します。サーバーが起動したら、好みのブラウザでhttp://localhost:3000(または別のURL)を開きます。

Chromeの場合:

  • ChromeのDeveloper Tools(WindowsとLinuxではCtrl+Shift+J、macOSでは⌥+⌘+I)を開きます
  • Sourcesタブに移動します

Firefoxの場合:

  • FirefoxのDeveloper Tools(WindowsとLinuxではCtrl+Shift+I、macOSでは⌥+⌘+I)を開きます
  • Debuggerタブに移動します

いずれのブラウザでも、クライアントサイドコードがdebuggerステートメントに到達すると、コードの実行が一時停止し、そのファイルがデバッグエリアに表示されます。手動でブレークポイントを設定するためにファイルを検索することもできます:

  • Chromeでは:WindowsとLinuxではCtrl+P、macOSでは⌘+Pを押します
  • Firefoxでは:WindowsとLinuxではCtrl+P、macOSでは⌘+Pを押すか、左パネルのファイルツリーを使用します

検索時、ソースファイルのパスはwebpack://_N_E/./で始まることに注意してください。

サーバーサイドコード

ブラウザDevToolsでNext.jsのサーバーサイドコードをデバッグするには、基盤となるNode.jsプロセスに--inspectフラグを渡す必要があります:

Terminal
NODE_OPTIONS='--inspect' next dev

補足: Dockerコンテナ内でアプリを実行する場合など、localhostの外部からのリモートデバッグアクセスを許可するにはNODE_OPTIONS='--inspect=0.0.0.0'を使用してください。

npm run devまたはyarn devを使用している場合は、package.jsondevスクリプトを更新してください:

package.json
{
  "scripts": {
    "dev": "NODE_OPTIONS='--inspect' next dev"
  }
}

--inspectフラグを付けてNext.js開発サーバーを起動すると、以下のように表示されます:

Terminal
Debugger listening on ws://127.0.0.1:9229/0cf90313-350d-4466-a748-cd60f4e47c95
For help, see: https://nodejs.org/en/docs/inspector
ready - started server on 0.0.0.0:3000, url: http://localhost:3000

Chromeの場合:

  1. 新しいタブを開き、chrome://inspectにアクセスします
  2. **Configure...**をクリックして、両方のデバッグポートがリストされていることを確認します
  3. まだ存在しない場合はlocalhost:9229localhost:9230の両方を追加します
  4. Remote TargetセクションでNext.jsアプリケーションを探します
  5. inspectをクリックして、別のDevToolsウィンドウを開きます
  6. Sourcesタブに移動します

Firefoxの場合:

  1. 新しいタブを開き、about:debuggingにアクセスします
  2. 左サイドバーのThis Firefoxをクリックします
  3. Remote Targetsの下で、Next.jsアプリケーションを探します
  4. デバッガーを開くにはInspectをクリックします
  5. Debuggerタブに移動します

サーバーサイドコードのデバッグは、クライアントサイドのデバッグと同様に機能します。ファイルを検索する際(Ctrl+P/⌘+P)、ソースファイルのパスはwebpack://{application-name}/./{application-name}package.jsonファイルに従ってアプリケーションの名前に置き換えられます)で始まります。

ブラウザDevToolsでサーバーエラーを調査する

エラーが発生した場合、ソースコードを検査することでエラーの根本原因を追跡するのに役立ちます。

Next.jsはエラーオーバーレイのNext.jsバージョン表示の下にNode.jsアイコンを表示します。そのアイコンをクリックすると、DevToolsのURLがクリップボードにコピーされます。そのURLで新しいブラウザタブを開くと、Next.jsサーバープロセスを検査できます。

Windowsでのデバッグ

Windows ユーザーは NODE_OPTIONS='--inspect' を使用する際に問題が発生する可能性があります。この構文はWindows プラットフォームではサポートされていないためです。この問題を回避するには、cross-env パッケージを開発依存関係としてインストール(npmyarnでは-D)し、devスクリプトを次のように置き換えてください。

package.json
{
  "scripts": {
    "dev": "cross-env NODE_OPTIONS='--inspect' next dev"
  }
}

cross-envは使用しているプラットフォーム(Mac、Linux、Windowsを含む)に関係なくNODE_OPTIONS環境変数を設定し、デバイスやオペレーティングシステム間で一貫してデバッグできるようにします。

補足: マシンでWindows Defenderが無効になっていることを確認してください。この外部サービスは_読み込まれるすべてのファイル_をチェックするため、next devでのFast Refreshの時間が大幅に増加することが報告されています。これはNext.jsに関連していない既知の問題ですが、Next.jsの開発に影響します。

詳細情報

JavaScriptデバッガーの使い方について詳しく学ぶには、以下のドキュメントを参照してください: