Skip to content

テストとデバッグ

公開日:November 16, 2024更新日:November 28, 2024
JavaScriptTypeScriptCoding📄

TypeScriptを使った開発において、コードの品質を保つためにはテストとデバッグが非常に重要です。このセクションでは、TypeScriptコードのテスト方法、VS Codeを使ったデバッグの設定、型チェックによるエラーハンドリングについて説明します。

TypeScriptコードのテスト方法

TypeScriptのテストには、JavaScriptでもよく使われるテストフレームワークを利用することが一般的です。代表的なテストフレームワークには、JestMochaJasmineがあります。

Jestを使ったテスト

Jestは、Facebookによって開発されたテストフレームワークで、TypeScriptプロジェクトでもよく使われています。

  1. Jestのインストール まず、プロジェクトにJestをインストールします。

    bash
    npm install --save-dev jest ts-jest @types/jest
    • jestはテストフレームワーク本体です。
    • ts-jestはTypeScriptをJestで使うためのトランスパイラです。
    • @types/jestはJestの型定義です。
  2. 設定ファイルの作成 次に、Jestの設定ファイルを作成します。

    bash
    npx ts-jest config:init

    これでjest.config.jsが生成されます。設定ファイル内で、テスト対象のディレクトリやファイルを指定できます。

  3. テストコードの作成srcディレクトリ内にsum.tsというファイルを作成し、次のコードを記述します。

    typescript
    export function sum(a: number, b: number): number {
      return a + b;
    }

    次に、sum.test.tsというテストファイルを作成します。

    typescript
    import { sum } from "./sum";
    
    test("adds 1 + 2 to equal 3", () => {
      expect(sum(1, 2)).toBe(3);
    });
  4. テストの実行 次のコマンドでテストを実行します。

    bash
    npx jest

    テストが成功すれば、Jestのコンソールに成功メッセージが表示されます。

MochaとChaiを使ったテスト

MochaとChaiもTypeScriptプロジェクトで利用されることが多いテストフレームワークです。

  1. インストール

    bash
    npm install --save-dev mocha chai @types/mocha @types/chai ts-node
  2. テストの設定と実行 MochaはJestと同様にテストスクリプトを作成して実行できます。

    typescript
    import { expect } from "chai";
    import { sum } from "./sum";
    
    describe("Sum Function", () => {
      it("should return 3 for 1 + 2", () => {
        expect(sum(1, 2)).to.equal(3);
      });
    });

    次に、npx mochaコマンドを使ってテストを実行します。

デバッグの設定(VS Codeを使用)

VS Codeは、TypeScriptのデバッグに非常に適したエディタです。デバッグ設定を行うことで、ブレークポイントを使用したり、変数の値をリアルタイムで確認したりすることができます。

デバッグ設定手順

  1. launch.jsonの作成 VS Codeでプロジェクトを開き、デバッグパネルから「launch.json」を作成します。「Node.js」を選択することで、以下のような設定ファイルが生成されます。

    json
    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "node",
          "request": "launch",
          "name": "Launch Program",
          "skipFiles": ["<node_internals>/**"],
          "program": "${workspaceFolder}/src/index.ts",
          "preLaunchTask": "tsc: build - tsconfig.json",
          "outFiles": ["${workspaceFolder}/dist/**/*.js"]
        }
      ]
    }
    • program: デバッグ対象のファイルを指定します。
    • preLaunchTask: デバッグの前にTypeScriptのビルドを行うタスクを設定します。
  2. ブレークポイントの設定とデバッグの開始 デバッグしたい行にカーソルを合わせてブレークポイントを設定します。その後、「Launch Program」を選択してデバッグを開始します。ブレークポイントに到達すると実行が一時停止し、変数の値を確認したり、ステップ実行したりすることが可能です。

型チェックによるエラーハンドリング

TypeScriptはコンパイル時に型チェックを行い、型の不整合や潜在的なエラーを早期に検出します。この型チェックは、ランタイムエラーを未然に防ぐために非常に効果的です。

例:型エラーの検出

typescript
function greet(name: string): string {
  return `Hello, ${name}!`;
}

let result = greet(42); // エラー: 'number' 型の引数を 'string' 型に渡そうとしています

上記のコードでは、greet関数はstring型の引数を期待していますが、number型を渡しているため、コンパイル時にエラーが発生します。このように、型チェックによって不適切な引数を防ぐことができます。

型ガードの活用

ユニオン型や複数の型が考えられる場合、型ガードを使用することで安全に型を判別し、適切な処理を行うことが可能です。

typescript
function printId(id: string | number): void {
  if (typeof id === "string") {
    console.log(`ID: ${id.toUpperCase()}`);
  } else {
    console.log(`ID: ${id}`);
  }
}

型ガードを使うことで、idstring型かnumber型かを安全に判断し、それに応じた処理を行うことができます。

まとめ

TypeScriptの開発において、テストとデバッグはコードの品質を保つために欠かせないプロセスです。JestやMochaを使ったテストの自動化、VS Codeを使った効率的なデバッグ設定、そして型チェックによるエラーハンドリングを適切に行うことで、堅牢でバグの少ないアプリケーションを開発することができます。これらのツールとプロセスを活用し、TypeScript開発の生産性とコード品質を向上させましょう。