※このブログではサーバー運用、技術の検証等の費用のため広告をいれています。
記事が見づらいなどの問題がありましたらContactからお知らせください。


【TypeScript】VSCodeでmapファイルを使ったNode.JSアプリのデバッグ方法

javascript Debug デバッグ VSCode TypeScript debugger

投稿日:2020年12月1日

このエントリーをはてなブックマークに追加
デバッグ方法を身につけることは効率的な開発には必要不可欠です。この記事ではTypeScriptで書かれたNode.jsアプリケーションのデバッグ方法について解説しています。

はじめに

この記事について

TypeScriptJavaScriptをベースに拡張した静的型付言語です。使ったことある方ならTypeScriptでNode.jsアプリケーションを作成する強力さは知っているでしょう。

この記事ではTypeScriptで書かれたNode.jsアプリケーションのデバッグ方法について解説しています。

前提

この記事では以下の環境を前提で実行されています。

  • bashシェル環境
  • node version 10.19.0
  • npm version 6.14.4
  • VS Code 1.50.1

実践

プロジェクト作成

まずはサンプルプロジェクトを作成してnpmで初期化後、必要パッケージをインストールします。

ターミナル
$ mkdir debug_node
$ cd debug_node
$ npm init
$ npm install --save-dev typescript

tsconfigの設定

まずはSource Mapファイルを作成する設定をする必要があります。

この設定はtsconfig.jsonで行います。

tsconfig.json
{
    "compilerOptions": {
        "sourceMap": true
    }
}

これでtscコマンドでトランスパイルした時、jsファイルと同時にSource Mapファイルが作成されるようになりました。

これでデバッグするための設定は完了です。

VSCodeのデバッガでデバッグする場合

まずはサンプルのコードを作成します。

シンプルなUserというクラスを作成し、それをインスタンス化、Consoleにログとして表示するコードです。

index.ts
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)でデバッグメニューを開き、実行とデバッグボタンをクリックするという手順でも起動可能です。

▲実行とデバッグボタン

debugger文

JavaScriptに詳しい方はdebugger;文を使ってのデバッグをしたことがあると思います。debugger;文はブレークポイントと同じ様にデバッグするポイントを設置する文です。もしdebugger;文が通常の実行環境で呼ばれても何の動作もしないので安心してください(もちろん残して置くのは良くないけど...)。

index.ts
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実行とデバッグボタンでのデバッグはトランスパイルの手順をふみません。そのため、

  1. コンソールからtscコマンドでTypeScriptをトランスパイル
  2. F5実行とデバッグボタンでデバッガを起動

という手順を踏む必要があります。

より簡単な実行方法はJavaScriptデバッグターミナルからの実行をするデバッグ方法です。JavaScriptデバッグターミナルはVSCodeのメニューの実行(三角と虫のマーク)またはCtrl + Shift + D、その後JavaScript Debug Terminalボタンをクリックすることでエディタの下部に開かれます。

そのままtscコマンドでトランスパイルして実行すればデバッグできます。

JavaScript Debug Terminal
$ npx tsc
$ node index.js

さいごに

今回ブレークポイントとdebugger;の2つの方法を説明しましたが、無難にブレークポイントを使うほうが良さそうですね。

このエントリーをはてなブックマークに追加


関連記事

記事へのコメント