TypeScript を使用した Node.js
TypeScript とは
TypeScriptは、Microsoftによって保守および開発されているオープンソース言語です。世界中の多くのソフトウェア開発者に愛され、使用されています。
基本的に、JavaScriptのスーパーセットであり、言語に新しい機能を追加します。最も注目すべき追加は、プレーンなJavaScriptには存在しない静的型定義です。型のおかげで、例えば、関数で期待する引数の種類と正確に返されるもの、または作成するオブジェクトの正確な形状を宣言することができます。TypeScriptは非常に強力なツールであり、JavaScriptプロジェクトの可能性を大きく広げます。コードの配信前に多くのバグを防ぐことで、コードをより安全で堅牢なものにします。コード開発中に問題を検出し、Visual Studio Codeなどのコードエディターと見事に統合されます。
他のTypeScriptの利点については後で説明します。まずはいくつかの例を見てみましょう!
例
このコードスニペットを見て、一緒に解き明かしましょう。
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をインストールします。
npm install -D typescript
これで、ターミナルでtsc
コマンドを使用してJavaScriptにコンパイルできます。やってみましょう!
ファイル名がexample.ts
であると仮定すると、コマンドは次のようになります。
npx tsc example.ts
TIP
npxはNode Package Executeの略です。このツールを使用すると、グローバルにインストールせずにTypeScriptのコンパイラを実行できます。
tsc
はTypeScriptコンパイラであり、TypeScriptコードを取得してJavaScriptにコンパイルします。このコマンドにより、Node.jsを使用して実行できるexample.js
という新しいファイルが作成されます。TypeScriptコードのコンパイルと実行方法がわかったので、TypeScriptのバグ防止機能を実際に見てみましょう!
コードを次のように変更します。
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はこれについて次のように言います。
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
を使用して行うことができます。
小さな例を以下に示します。
npx tsc example.ts
node example.js
ts-node
を使用したTypeScriptコードの実行
ts-nodeを使用すると、事前にコンパイルすることなく、Node.jsでTypeScriptコードを直接実行できます。ただし、コードの型チェックは行われません。そのため、最初にtsc
でコードの型チェックを行い、その後ts-node
で実行してから配布することをお勧めします。
ts-node
を使用するには、最初にインストールする必要があります。
npm install -D ts-node
その後、次のようにTypeScriptコードを実行できます。
npx ts-node example.ts
tsx
を使用したTypeScriptコードの実行
tsxを使用すると、事前にコンパイルすることなく、Node.jsでTypeScriptコードを直接実行できます。ただし、コードの型チェックは行われません。そのため、最初にtsc
でコードの型チェックを行い、その後tsx
で実行してから配布することをお勧めします。
tsx
を使用するには、最初にインストールする必要があります。
npm install -D tsx
その後、次のようにTypeScriptコードを実行できます。
npx tsx example.ts
node
経由でtsx
を使用する場合は、--import
を使用してtsx
を登録できます。
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フレームワーク
そして、他にも多くの素晴らしいプロジェクトがあります…もしかしたらあなたの次のプロジェクトかもしれません!