あらすじ
若き開発者ヒロロはJavascriptのデバッグでconsole.log
をコード内に埋め込んで、一つのバグの調査で何十回もコードを実行するという不毛な行為をしていた。しかしChromeの開発者用ツールの存在を知りBreakpointを使いこなせるようになった彼はコードを追いながら値を確認できるようになり効率的に開発するようになった。
ある日、彼はNode.jsでの開発に携わることに。持ち前のJavascriptのスキルを生かしてサーバーサイドでも活躍するはずだったが、Node.jsでデバッグする方法を知らず苦戦を強いられることに。
フロントエンドと同じ方法でデバッグすることができず、このままではヒロロはまたあの日のconsole.log
によるデバッグ地獄をNode.jsでも味わうことになる。
果たしてconsole.log
を使わずに効率的にデバッグすることはできるのか⁇
Node.jsではGoogle Developer Toolが使えない?
...とまぁ少し昔の話をはじめにさせてもらいました。
通常、Node.jsでプログラムを動かす場合、ターミナル上で
node index.js
と入力してプログラムを実行します。フロントエンドの開発ではChromeの開発者用ツールからSourceを開き、ブレークポイントを打つことができましたが、Node.jsはサーバーサイド言語のため、同様の手順でデバッグすることはできません。
知らない人はconsole.log
をコードに埋め込んでちまちまデバッグするハメになります。
Node.jsでデバッグする方法
あれから長い月日(3回くらいの現場での開発経験)を経てようやく脱却しました。
最初のほうはコード量が少なくできなくてもそんなに困らなかったのでスルーしてましたが、
コードの量が増えてくるとさすがに苦しくなり、開発効率が下がってきたので本腰入れて対応することにしました。
調べてみると、Node.jsでもブレークポイントをうちながらデバッグすることは可能です。ただ手順が異なります。
とりあえずChrome DevToolを使ってデバッグする方法を試してみました。公式ドキュメントにも記載されています(みんなちゃんと読もうね)。
1. inspectスイッチを使う
まずターミナルでnodeプログラムを実行する際にinspect
スイッチを入力します。
node --inspect index.js
デフォルトは9229
ポートが開かれますが、
node --inspect=【port】 index.js
とすれば他のポートを使うことも可能です。
2. ブラウザを開く
次にChromeを開いてChrome://inspect
と入力します。
すると以下のような画面が出てくるので、configure...
ボタンを押します。
![スクリーンショット 2020-05-22 22.17.28.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F412663%2F8ccb9d57-849a-e825-7bfc-09ae889073aa.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=12364768d98182b44f554a944fc87c60)
ここにlocalhost:【port】
を入力し、Done
を押します。
![スクリーンショット 2020-05-22 22.21.21.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F412663%2F0519345e-7bc6-97b7-bae1-cba29af19c7d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a0b0a78a56ec313455f2936f60e29f87)
その後前画面内に記載のOpen dedicated DevTools for Node
をクリックするとNode.jsの開発者ツール画面が現れます。
あとはSourceを開き、ファイルが存在していなかったら赤枠部分からOpen file
をクリックしてデバッグ対象のファイルを開きます。
これでファイルが開かれ、Breakpointを打つとそこで処理が止まるようになります。
小休止
ひとまずこれでコードを追いながらデバッグできるようになり、Console.log
地獄から逃れることができました。
しかし毎度DevToolsにアクセスするのが手間に感じてしまうようになりました。
・愛用のvsCodeを使ってデバッグできないか?
・electron
やLambda
関数のデバッグをもう少し効率よくできないか?
まだまだ改善点はありそうです。
続く