投稿日:2020年12月1日
デバッグ方法を身につけることは効率的な開発には必要不可欠です。この記事ではTypeScriptで書かれたNode.jsアプリケーションのデバッグ方法について解説しています。
TypeScriptはJavaScriptをベースに拡張した静的型付言語です。使ったことある方ならTypeScriptでNode.jsアプリケーションを作成する強力さは知っているでしょう。
この記事ではTypeScriptで書かれたNode.jsアプリケーションのデバッグ方法について解説しています。
この記事では以下の環境を前提で実行されています。
まずはサンプルプロジェクトを作成してnpmで初期化後、必要パッケージをインストールします。
$ mkdir debug_node
$ cd debug_node
$ npm init
$ npm install --save-dev typescript
まずはSource Mapファイルを作成する設定をする必要があります。
この設定はtsconfig.jsonで行います。
{
"compilerOptions": {
"sourceMap": true
}
}
これでtscコマンドでトランスパイルした時、jsファイルと同時にSource Mapファイルが作成されるようになりました。
これでデバッグするための設定は完了です。
まずはサンプルのコードを作成します。
シンプルなUserというクラスを作成し、それをインスタンス化、Consoleにログとして表示するコードです。
class User {
private readonly firstname: string;
private readonly lastname: string;
constructor(_firstname: string, _lastname: string) {
this.firstname = _firstname;
this.lastname = _lastname;
}
}
const user = new User("mars", "quai");
console.log(user);
次にこのtypescriptのコードにブレークポイントを設置します。
エディタの左側をクリックすると以下の様に赤丸を入れることができます。
この赤丸がdebug実行時にそこでコードを一字停止してローカル変数、グローバル変数を表示できます。
F5(機種によってはfn + F5)でnode.jsを選択することでVSCodeのデバッガが起動します。
ブレークポイントで止まると左のパネルにローカル変数とグローバル変数が表示されます。上部にはデバッグのメニューが表示されます。
左部分のメニュ―に変数が表示されていない場合には実行ボタン(三角と虫のマーク)をクリックします。
debuggerは左のメニューパネルの実行(またはCtrl + Shift + D)でデバッグメニューを開き、実行とデバッグボタンをクリックするという手順でも起動可能です。
JavaScriptに詳しい方はdebugger;文を使ってのデバッグをしたことがあると思います。debugger;文はブレークポイントと同じ様にデバッグするポイントを設置する文です。もしdebugger;文が通常の実行環境で呼ばれても何の動作もしないので安心してください(もちろん残して置くのは良くないけど...)。
class User {
private readonly firstname: string;
private readonly lastname: string;
constructor(_firstname: string, _lastname: string) {
this.firstname = _firstname;
this.lastname = _lastname;
}
}
const user = new User("mars", "quai");
debugger; // ここで一時停止する
console.log(user);
この方法でのデバッグをTypeScript上で使う場合には必ず一旦tscコマンドでのトランスパイルを挟む必要があります。
先程のF5や実行とデバッグボタンでのデバッグはトランスパイルの手順をふみません。そのため、
という手順を踏む必要があります。
より簡単な実行方法はJavaScriptデバッグターミナルからの実行をするデバッグ方法です。JavaScriptデバッグターミナルはVSCodeのメニューの実行(三角と虫のマーク)またはCtrl + Shift + D、その後JavaScript Debug Terminalボタンをクリックすることでエディタの下部に開かれます。
そのままtscコマンドでトランスパイルして実行すればデバッグできます。
$ npx tsc
$ node index.js
今回ブレークポイントとdebugger;の2つの方法を説明しましたが、無難にブレークポイントを使うほうが良さそうですね。