🕷️

Node.js+TypeScriptをnodemonで起動してデバッグする

2022/03/11に公開

TypeScript歴9ヶ月のエンジニアです。
主にバックエンドの設計、開発を担当しています。

バックエンドのAPIサーバではNode.js+Express.js+TypeScriptを採用しており、開発時はnodemon(とts-node)でAPIサーバを起動しています。
nodemon使用時にVisual Studio Code(以下、VSCode)でデバッグする方法についてのメモです。

環境

VSCode 1.65.0
Node.js 14.x
nodemon 2.0.7
ts-node 10.0.0

nodemonの設定

nodemon.json

{
  "watch": [
    "src"
  ],
  "ext": "ts",
  "exec": "ts-node -r tsconfig-paths/register ./src/index.ts"
}

やりかた

launch.jsonを設定する

launch.jsonを作成して以下のように記載

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Node: Nodemon",
      "processId": "${command:PickProcess}",
      "restart": true,
      "protocol": "inspector"
    }
  ]
}

restart

nodemonでNode.jsを起動する場合、指定したファイルの変更を検知して自動でAPIサーバを再起動してくれます。
restart: true とすることで、node.jsプロセスの再起動時にデバッガープロセスが落ちません。

processId

processId:"${command:PickProcess}" とすることで、デバッガーの起動時にNode.jsのプロセス一覧を表示、attachしたいプロセスを選択できます。

Node.jsは、inspectオプションを指定、もしくは、SIGUSR1 シグナルを受信することでデバッガーの利用ができます。
今回、inspectオプションを指定せずにデバッガーをattach出来たので、デバッガー 起動時にSIGUSR1 シグナルも送っているようです。
(カッコ書きで SIGUSR1 って書いてある)

また、processId の代わりに、port:{port番号(デフォルトは9229})を指定することでもデバッガーをアタッチできるようですが、私の環境ではNode.jsをinspectオプションを指定して起動した場合でもattachできませんでした。
設定が足りない?
port指定する場合、複数のNode.jsを起動している時は注意が必要かも?Node.js起動時にデバッグ用のポートを指定することで回避できるか?とか試したかったのですが、そこまではやっていません。

一応、node.jsのプロセスを確認してprocessId:"xxxx"と指定することも可能です。
(が、一々プロセスIDを調べて指定するのはlaborious って公式にも書いてありました。laborious :骨の折れる)

実行

nodemon        
[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): src/**/*
[nodemon] watching extensions: ts
[nodemon] starting `ts-node -r tsconfig-paths/register ./src/index.ts`
app running!
Debugger listening on ws://127.0.0.1:9229/b50e934b-233a-436f-920f-48276132f46b
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
  • Debugger attached. されました!

その他の気づきとか

  • GithubにNode.js以外のフレームワークでの設定レシピがありました。
  • attachってなんて訳せばいいのか分かりませんでした

参考

VSCodeの公式
https://code.visualstudio.com/docs/nodejs/nodejs-debugging

Github
https://github.com/Microsoft/vscode-recipes/tree/master/nodemon

Node.js

GitHubで編集を提案

Discussion