Skip to content

TypeScript を使用した Node.js

TypeScript とは

TypeScriptは、Microsoftによって保守および開発されているオープンソース言語です。世界中の多くのソフトウェア開発者に愛され、使用されています。

基本的に、JavaScriptのスーパーセットであり、言語に新しい機能を追加します。最も注目すべき追加は、プレーンなJavaScriptには存在しない静的型定義です。型のおかげで、例えば、関数で期待する引数の種類と正確に返されるもの、または作成するオブジェクトの正確な形状を宣言することができます。TypeScriptは非常に強力なツールであり、JavaScriptプロジェクトの可能性を大きく広げます。コードの配信前に多くのバグを防ぐことで、コードをより安全で堅牢なものにします。コード開発中に問題を検出し、Visual Studio Codeなどのコードエディターと見事に統合されます。

他のTypeScriptの利点については後で説明します。まずはいくつかの例を見てみましょう!

このコードスニペットを見て、一緒に解き明かしましょう。

ts
type User = {
  name: string
  age: number
}
function isAdult(user: User): boolean {
  return user.age >= 18
}
const justine: User = {
  name: 'Justine',
  age: 23,
}
const isJustineAnAdult: boolean = isAdult(justine)

最初の部分(typeキーワードを使用している部分)は、ユーザーを表すカスタムオブジェクト型を宣言する役割を果たします。その後、この新しく作成された型を使用して、User型の引数を1つ受け取り、booleanを返すisAdult関数を作成します。その後、事前に定義された関数を呼び出すために使用できる例となるデータjustineを作成します。最後に、justineが成人であるかどうかの情報を含む新しい変数を作成します。

この例について知っておくべきことが他にもあります。まず、宣言された型に従わない場合、TypeScriptは何かが間違っていることを警告し、誤用を防ぎます。第二に、すべてを明示的に型付けする必要はありません。TypeScriptは非常に賢く、型を推論できます。例えば、変数isJustineAnAdultは、明示的に型付けしなくてもboolean型になります。また、justineは、この変数をUser型として宣言しなくても、関数の有効な引数になります。

さて、TypeScriptコードができました。では、どのように実行するのでしょうか?

まず、プロジェクトにTypeScriptをインストールします。

bash
npm install -D typescript

これで、ターミナルでtscコマンドを使用してJavaScriptにコンパイルできます。やってみましょう!

ファイル名がexample.tsであると仮定すると、コマンドは次のようになります。

bash
npx tsc example.ts

TIP

npxはNode Package Executeの略です。このツールを使用すると、グローバルにインストールせずにTypeScriptのコンパイラを実行できます。

tscはTypeScriptコンパイラであり、TypeScriptコードを取得してJavaScriptにコンパイルします。このコマンドにより、Node.jsを使用して実行できるexample.jsという新しいファイルが作成されます。TypeScriptコードのコンパイルと実行方法がわかったので、TypeScriptのバグ防止機能を実際に見てみましょう!

コードを次のように変更します。

ts
type User = {
  name: string
  age: number
}
function isAdult(user: User): boolean {
  return user.age >= 18
}
const justine: User = {
  name: 'Justine',
  age: 'Secret!',
}
const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!")

そして、TypeScriptはこれについて次のように言います。

bash
example.ts:12:5 - error TS2322: Type 'string' is not assignable to type 'number'.
12     age: 'Secret!',
       ~~~
  example.ts:3:5
    3     age: number;
          ~~~
    The expected type comes from property 'age' which is declared here on type 'User'
example.ts:15:7 - error TS2322: Type 'boolean' is not assignable to type 'string'.
15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
         ~~~~~~~~~~~~~~~~
example.ts:15:51 - error TS2554: Expected 1 arguments, but got 2.
15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
                                                     ~~~~~~~~~~~~~~~~~~~~~~
Found 3 errors in the same file, starting at: example.ts:12

ご覧のとおり、TypeScriptは予期せず動作する可能性のあるコードの配信を正常に防いでいます。素晴らしい!

TypeScriptの詳細

TypeScriptは、インターフェース、クラス、ユーティリティ型など、他にも多くの優れたメカニズムを提供しています。また、大規模なプロジェクトでは、TypeScriptコンパイラの構成を別ファイルで宣言し、動作の厳格さ、コンパイル済みファイルの保存場所などを細かく調整できます。これらの素晴らしい機能の詳細については、公式TypeScriptドキュメントを参照してください。

TypeScriptのその他の利点として、段階的な導入が可能であること、コードの可読性と理解性を向上させること、古いNode.jsバージョン向けのコードを配信しながら最新の言語機能を使用できることが挙げられます。

Node.jsでのTypeScriptコードの実行

Node.jsはTypeScriptをネイティブに実行できません。コマンドラインからnode example.tsを直接呼び出すことはできません。しかし、この問題には3つの解決策があります。

TypeScriptをJavaScriptにコンパイルする

Node.jsでTypeScriptコードを実行するには、まずJavaScriptにコンパイルする必要があります。これは、先に示したようにTypeScriptコンパイラtscを使用して行うことができます。

小さな例を以下に示します。

bash
npx tsc example.ts
node example.js

ts-nodeを使用したTypeScriptコードの実行

ts-nodeを使用すると、事前にコンパイルすることなく、Node.jsでTypeScriptコードを直接実行できます。ただし、コードの型チェックは行われません。そのため、最初にtscでコードの型チェックを行い、その後ts-nodeで実行してから配布することをお勧めします。

ts-nodeを使用するには、最初にインストールする必要があります。

bash
npm install -D ts-node

その後、次のようにTypeScriptコードを実行できます。

bash
npx ts-node example.ts

tsxを使用したTypeScriptコードの実行

tsxを使用すると、事前にコンパイルすることなく、Node.jsでTypeScriptコードを直接実行できます。ただし、コードの型チェックは行われません。そのため、最初にtscでコードの型チェックを行い、その後tsxで実行してから配布することをお勧めします。

tsxを使用するには、最初にインストールする必要があります。

bash
npm install -D tsx

その後、次のようにTypeScriptコードを実行できます。

bash
npx tsx example.ts

node経由でtsxを使用する場合は、--importを使用してtsxを登録できます。

bash
node --import=tsx example.ts

Node.jsの世界におけるTypeScript

TypeScriptはNode.jsの世界で確固たる地位を築いており、多くの企業、オープンソースプロジェクト、ツール、フレームワークで使用されています。TypeScriptを使用している注目すべきオープンソースプロジェクトの例をいくつか挙げます。

  • NestJS - スケーラブルでよく設計されたシステムの作成を簡単かつ快適にする、堅牢で機能豊富なフレームワーク
  • TypeORM - Hibernate、Doctrine、Entity Frameworkなどの他の言語の有名なツールから影響を受けた優れたORM
  • Prisma - 宣言型データモデル、生成されたマイグレーション、完全に型安全なデータベースクエリを備えた次世代ORM
  • RxJS - リアクティブプログラミングで広く使用されているライブラリ
  • AdonisJS - Node.jsを使用したフル機能のWebフレームワーク
  • FoalTs - エレガントなNodejsフレームワーク

そして、他にも多くの素晴らしいプロジェクトがあります…もしかしたらあなたの次のプロジェクトかもしれません!