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 i -D typescript
これで、ターミナルで`tsc`コマンドを使用してJavaScriptにコンパイルできます。やってみましょう!
ファイル名が`example.ts`であると仮定すると、コマンドは次のようになります。
npx tsc example.ts
ここでのnpxは、Node Package Executeの略です。このツールを使用すると、TypeScriptのコンパイラをグローバルにインストールせずに実行できます。
`tsc`はTypeScriptコンパイラであり、TypeScriptコードを取得してJavaScriptにコンパイルします。このコマンドを実行すると、`example.js`という名前の新しいファイルが作成され、Node.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:3 - error TS2322: Type 'string' is not assignable to type 'number'.
12 age: "Secret!",
~~~
example.ts:3:3
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.
ご覧のとおり、TypeScriptは、予期せぬ動作をする可能性のあるコードをリリースすることを防ぎます。素晴らしいですね!
TypeScriptの詳細
TypeScriptは、インターフェース、クラス、ユーティリティ型など、他にも多くの優れたメカニズムを提供しています。また、大規模なプロジェクトでは、TypeScriptコンパイラの設定を別のファイルで宣言し、その動作、厳格さ、コンパイル済みファイルの格納場所などをきめ細かく調整できます。 これらすべての素晴らしい機能の詳細については、TypeScriptの公式ドキュメントをご覧ください。
TypeScriptのその他の利点として、段階的に採用できること、コードの可読性と理解度を高めるのに役立つこと、古いNode.jsバージョン用のコードをリリースしながら、開発者が最新の言語機能を使用できることなどが挙げられます。
Node.jsの世界におけるTypeScript
TypeScriptはNode.jsの世界で確立されており、多くの企業、オープンソースプロジェクト、ツール、フレームワークで使用されています。TypeScriptを使用している注目すべきオープンソースプロジェクトの例を次に示します。
- NestJS - スケーラブルで適切に設計されたシステムの作成を簡単かつ快適にする、堅牢でフル機能のフレームワーク
- TypeORM - Hibernate、Doctrine、Entity Frameworkなど、他の言語の有名なツールに影響を受けた優れたORM
- Prisma - 宣言型データモデル、生成されたマイグレーション、完全に型安全なデータベースクエリを備えた次世代ORM
- RxJS - 幅広く使用されているリアクティブプログラミング用ライブラリ
- AdonisJS - Node.jsを使ったフル機能のWebフレームワーク
- FoalTs - エレガントなNode.jsフレームワーク
その他にも素晴らしいプロジェクトがたくさんあります... あなたの次のプロジェクトになるかもしれません!