brand logo

ドキュメント

デバッグ

Nuxtでは、ブラウザやIDEで直接アプリケーションのデバッグを始めることができます。

ソースマップ

ソースマップは、サーバービルドではデフォルトで有効になっており、クライアントビルドでは開発モードで有効ですが、設定でより具体的に有効にすることができます。

export default defineNuxtConfig({
  // または sourcemap: true
  sourcemap: {
    server: true,
    client: true
  }
})

Node Inspectorを使ったデバッグ

Node inspectorを使用して、Nuxtのサーバーサイドをデバッグすることができます。

nuxt dev --inspect

これにより、デバッガーがアクティブな状態でNuxtがdevモードで起動します。すべてが正しく動作していれば、Chrome DevToolsにNode.jsのアイコンが表示され、デバッガーにアタッチできます。

Node.jsとChromeのプロセスは同じプラットフォームで実行される必要があります。これはDocker内では動作しません。

IDEでのデバッグ

開発中にIDEでNuxtアプリをデバッグすることが可能です。

VS Codeデバッグ設定の例

以下の設定を更新して、ウェブブラウザへのパスを指定する必要があるかもしれません。詳細は、VS Codeのデバッグ設定に関するドキュメントを参照してください。

{
  // IntelliSenseを使用して可能な属性を学びます。
  // 既存の属性の説明を表示するにはホバーします。
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "client: chrome",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "server: nuxt",
      "outputCapture": "std",
      "program": "${workspaceFolder}/node_modules/nuxt/bin/nuxt.mjs",
      "args": [
        "dev"
      ],
    }
  ],
  "compounds": [
    {
      "name": "fullstack: nuxt",
      "configurations": [
        "server: nuxt",
        "client: chrome"
      ]
    }
  ]
}

通常のブラウザ拡張機能を使用したい場合は、上記の_chrome_設定に以下を追加してください:

"userDataDir": false,

JetBrains IDEsデバッグ設定の例

IntelliJ IDEA、WebStorm、PhpStormなどのJetBrains IDEsでもNuxtアプリをデバッグできます。

  1. プロジェクトのルートディレクトリに新しいファイルを作成し、nuxt.run.xmlという名前を付けます。

  2. nuxt.run.xmlファイルを開き、以下のデバッグ設定を貼り付けます:

<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="client: chrome" type="JavascriptDebugType" uri="http://localhost:3000" useFirstLineBreakpoints="true">
    <method v="2" />
  </configuration>

  <configuration default="false" name="server: nuxt" type="NodeJSConfigurationType" application-parameters="dev" path-to-js-file="$PROJECT_DIR$/node_modules/nuxt/bin/nuxt.mjs" working-dir="$PROJECT_DIR$">
    <method v="2" />
  </configuration>

  <configuration default="false" name="fullstack: nuxt" type="CompoundRunConfigurationType">
    <toRun name="client: chrome" type="JavascriptDebugType" />
    <toRun name="server: nuxt" type="NodeJSConfigurationType" />
    <method v="2" />
  </configuration>
</component>

その他のIDEs

他のIDEをお持ちで、サンプル設定を提供したい場合は、PRを開くことを躊躇しないでください!

tips

このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。

はじめに:Nuxtのデバッグがもたらすメリットと課題解決

Nuxtでの開発において、バグの早期発見や問題解決は非常に重要です。デバッグがスムーズにできれば、開発効率が大幅に向上し、品質の高いアプリケーションを短期間でリリースできます。
しかし、サーバーサイドレンダリング(SSR)とクライアントサイドレンダリング(CSR)が混在するNuxtの特性上、デバッグは単純なSPAとは異なる複雑さを伴います。
本記事では、Nuxtのデバッグ機能を体系的に理解し、実務でよくある課題を解決するための具体的な方法や注意点を詳しく解説します。


まず結論:Nuxtデバッグの要点まとめ

  • ソースマップを活用して、トランスパイル後のコードではなく元のソースコードをデバッグ可能にする
  • Node Inspectorを使い、サーバーサイドの挙動を直接デバッグできる
  • VS CodeやJetBrains系IDEと連携し、ブラウザとサーバー両方のデバッグを統合的に行う
  • SSRとCSRの違いを理解し、Hydrationエラーやパフォーマンス問題に注意する
  • Docker環境など特殊環境ではNode Inspectorが動作しない場合があるため代替手段を検討する

いつ使うべきか・使わない方がよいケース

使うべきケース

  • 複雑なサーバーサイドロジックの挙動確認
    API呼び出しやミドルウェアの処理など、サーバー側で発生する問題を詳細に追いたいとき。
  • クライアントとサーバー間の状態不整合の調査
    SSR後のHydrationで発生するUIの不具合や警告を解消したい場合。
  • IDEのデバッグ機能を活用して効率的に開発したいとき
    ブレークポイント設定やステップ実行を使い、コードの流れを追いたい場合。

使わない方がよいケース

  • 単純なUIの動作確認や軽微なバグ修正
    ブラウザのDevToolsだけで十分な場合は、過度に複雑なデバッグ環境は不要。
  • Dockerなどのコンテナ環境でNode Inspectorが動作しない場合
    代替のログ出力やリモートデバッグ手法を検討したほうが効率的。

実務でよくあるユースケースとサンプルコード

1. サーバーサイドのAPI処理をNode Inspectorでデバッグ

サーバー側でAPIのレスポンスが期待通りでない場合、Node Inspectorを使って処理の流れを追います。

nuxt dev --inspect

Chrome DevToolsのNode.jsアイコンから接続し、ブレークポイントを設定して変数の中身を確認できます。

2. VS Codeでクライアントとサーバー両方のデバッグを同時に行う

VS Codeのlaunch.jsonに以下のような設定を追加し、フルスタックでのデバッグを実現します。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "client: chrome",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "server: nuxt",
      "program": "${workspaceFolder}/node_modules/nuxt/bin/nuxt.mjs",
      "args": ["dev"]
    }
  ],
  "compounds": [
    {
      "name": "fullstack: nuxt",
      "configurations": ["server: nuxt", "client: chrome"]
    }
  ]
}

これにより、サーバーとクライアントの両方を同時にデバッグ可能です。

3. ソースマップ設定でトランスパイル後のコードではなく元コードをデバッグ

nuxt.config.tsでソースマップを明示的に有効化し、開発時のデバッグ体験を向上させます。

export default defineNuxtConfig({
  sourcemap: {
    server: true,
    client: true
  }
})

よくある落とし穴・注意点

SSRとCSRの違いによるHydrationエラー

SSRでレンダリングされたHTMLとクライアント側のVueインスタンスの状態が異なると、Hydrationエラーが発生します。
デバッグ時は、サーバーとクライアント両方の状態を確認し、差異を特定することが重要です。

Node InspectorはDocker環境で動作しないことがある

Node Inspectorはローカル環境での利用を想定しているため、Dockerコンテナ内での利用は制限があります。
コンテナ環境でのデバッグには、リモートデバッグやログ出力の強化を検討してください。

ソースマップの設定ミスによるデバッグ困難

ソースマップが無効化されていると、トランスパイル後の難読化されたコードしか見えず、デバッグが非常に困難になります。
開発モードでは必ずソースマップを有効にし、本番環境ではパフォーマンスとセキュリティを考慮して設定を調整しましょう。

IDEの設定ミスによるブレークポイント未検出

IDEのデバッグ設定でwebRootprogramのパスが誤っていると、ブレークポイントが正しく機能しません。
設定ファイルはプロジェクト構成に合わせて正確に記述し、動作確認を行いましょう。


まとめ

Nuxtのデバッグは、SSRとCSRが混在する特性から一筋縄ではいかない部分もありますが、ソースマップの活用やNode Inspector、IDE連携を駆使することで効率的に問題を特定できます。
特に実務では、サーバーサイドの挙動確認やHydrationエラーの解消が重要なポイントです。
本記事の内容を参考に、適切なデバッグ環境を整え、開発効率と品質向上に役立ててください。

デバッグ時はまずソースマップが有効かどうかを確認し、IDEの設定を見直すことがトラブルシューティングの近道です。