Nodeは、サーバーサイドJavaScriptの記述を可能にするランタイム環境です。2011年のリリース以来、広く採用されています。サーバーサイドJavaScriptの記述は、JavaScript言語の性質上、動的で弱い型付けなので、コードベースが肥大化していき、困難な作業です。
他の言語をからJavaScriptを始める開発者は時に、静的で強い型付けに欠けている面に不満を感じますが、TypeScriptはそのギャップを埋めてくれます。
TypeScriptは、大規模なJavaScriptプロジェクトの構築・管理に役立つ型付け(オプション)スーパーセットです。静的で強い型付け、コンパイル、オブジェクト指向プログラミングなどの追加機能を持つJavaScriptとして考えられます。
注: TypeScriptは、技術的にはJavaScriptのスーパーセットです。つまりJavaScriptコードはすべて、有効なTypeScriptコードであるといえます。
以下にTypeScriptを使用するメリットを挙げます。
このチュートリアルでは、NodeプロジェクトとTypeScriptをセットアップします。TypeScriptを使用してExpressアプリケーションを構築し、それを整然とした信頼性の高いJavaScriptコードにトランスパイルします。
このガイドを始める前に、Node.jsをマシンにインストールします。ガイドNode.jsをインストールしてローカル開発環境を整えるを参照して、これを実施してください。
まず、node_project
という新しいフォルダを作成し、そのディレクトリに移動します。
- mkdir node_project
- cd node_project
次に、npmプロジェクトとしてそのフォルダを初期化します。
- npm init
npm init
を実行した後、プロジェクトに関する情報をnpmに提供します。npmに妥当なデフォルトを推論させたければ、y
フラグを付けて追加情報のプロンプトをスキップできます。
- npm init -y
プロジェクトスペースがセットアップされ、必要な依存関係をインストールする準備が整いました。
最小限のnpmプロジェクトが初期化されると、次のステップは、TypeScriptの実行に必要な依存関係のインストールです。
プロジェクトディレクトリから次のコマンドを実行して、依存関係をインストールします。
- npm install -D typescript@3.3.3
- npm install -D tslint@5.12.1
-D
フラグは、 --save-dev
のショートカットです。このフラグの詳細についてはnpmjsドキュメントを参照してください。
それではExpressフレームワークをインストールしましょう。
- npm install -S express@4.16.4
- npm install -D @types/express@4.16.1
2つ目のコマンドは、TypeScriptをサポートするExpressのタイプをインストールします。TypeScriptのタイプはファイルで、通常は.d.ts
という拡張子が付きます。これらのファイルはAPIに関するタイプ情報(この場合はExpressフレームワーク)の提供に使用します。
TypeScriptと Expressは独立したパッケージなので、このパッケージが必要です。@type/express
パッケージがなければ、TypeScriptがExpressクラスのタイプを知る方法はありません。
このセクションでは、TypeScriptをセットアップしてTypeScriptのLintチェックを設定します。TypeScriptは、tsconfig.json
というファイルを使用して、プロジェクトのコンパイラオプションを設定します。プロジェクトのrootディレクトリにtsconfig.json
ファイルを作成し、次のスニペットを貼り付けます。
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist"
},
"lib": ["es2015"]
}
上記JSONスニペットの重要部分を見ていきしょう。
module
: モジュールコード生成方法を指定します。Nodeはcommonjs
を使用します。target
:出力言語レベルを指定します。moduleResolution
: インポートが参照するものをコンパイラに理解させます。値node
は、Node module resolution機構を模倣します。outDir
: トランスパイル後の.js
ファイルの出力先です。このチュートリアルでは、dist
として保存します。tsconfig.json
ファイルを手動で作成、記入する代わりに次のコマンドを実行することもできます。
- tsc --init
このコマンドは、コメント付きのtsconfig.json
ファイルを生成します。
利用可能なキー値オプションの詳細について詳しく知るには、公式TypeScriptドキュメントを参照してください。
これで、プロジェクトのTypeScript Lintチェックを設定できます。プロジェクトのrootディレクトリで稼働しているターミナル、つまりこのチュートリアルがnode_project
として確立したターミナルで、次のコマンドを実行してtslint.json
ファイルを生成します。
- ./node_modules/.bin/tslint --init
新たに生成されたtslint.json
ファイルを開いて、no-console
ルールを追加します。
{
"defaultSeverity": "error",
"extends": ["tslint:recommended"],
"jsRules": {},
"rules": {
"no-console": false
},
"rulesDirectory": []
}
TypeScript Lintツールはデフォルトでコンソール
ステートメントを使用したデバッグを妨げるため、Lintツールにデフォルトのno-console
ルールを無効にするよう明示的に指示する必要があります。
package.json
ファイルの更新この時点で、ターミナルで関数を個別に実行するか、npmスクリプトを作成して実行することができます。
このステップでは、TypeScriptコードをコンパイルしてトランスパイルするstart
スクリプトを作成し、結果の.js
アプリケーションを実行します。
package.json
ファイルを開き、適宜更新します。
{
"name": "node-with-ts",
"version": "1.0.0",
"description": "",
"main": "dist/app.js",
"scripts": {
"start": "tsc && node dist/app.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@types/express": "^4.16.1",
"tslint": "^5.12.1",
"typescript": "^3.3.3"
},
"dependencies": {
"express": "^4.16.4"
}
}
上記のスニペットでは、main
パスを更新し、start
コマンドをscriptsセクションに追加しています。start
コマンドを見ると、最初にtsc
コマンドが、続いてnode
コマンドが実行されるのがわかります。このコマンドは、node
で生成された出力をコンパイルし、実行します。
tsc
コマンドは、tsconfig.json
ファイルの設定通り、アプリケーションをコンパイルし、生成された.js
出力を指定したoutDir
ディレクトリに配置するよう、TypeScriptに指示します。
TypeScriptとそのlintツールが設定されたので、次はNode Expressサーバーを構築しましょう。
まず、プロジェクトのrootディレクトリにsrc
フォルダを作成します。
- mkdir src
次に、そのフォルダ内にapp.ts
という名前のファイルを作成します。
- touch src/app.ts
この時点で、フォルダ構造は次のように見えるはずです。
├── node_modules/
├── src/
├── app.ts
├── package-lock.json
├── package.json
├── tsconfig.json
├── tslint.json
app.ts
ファイルを任意のテキストエディタで開き、次のコードスニペットを貼り付けます。
import express from 'express';
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('The sedulous hyena ate the antelope!');
});
app.listen(port, err => {
if (err) {
return console.error(err);
}
return console.log(`server is listening on ${port}`);
});
上記のコードは、ポート3000
でリクエストをlistenするノードサーバーを作成します。次のコマンドを使用してアプリケーションを実行します。
- npm start
実行が成功すると、メッセージがターミナルに表示されます。
- Outputserver is listening on 3000
これで、ブラウザでhttp://localhost:3000
にアクセスできます。次のメッセージが表示されます。
- OutputThe sedulous hyena ate the antelope!
dist/app.js
ファイルを開くと、TypeScriptコードのトランスパイル版が表示されます。
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = __importDefault(require("express"));
const app = express_1.default();
const port = 3000;
app.get('/', (req, res) => {
res.send('The sedulous hyena ate the antelope!');
});
app.listen(port, err => {
if (err) {
return console.error(err);
}
return console.log(`server is listening on ${port}`);
});
//# sourceMappingURL=app.js.map
この時点で、ノードプロジェクトがTypeScriptを使用するように、正常にセットアップされました。
このチュートリアルでは、TypeScriptが信頼性の高いJavaScriptのコードを作成するのに役立つ理由について学びました。さらに、TypeScriptで作業するメリットについても学びました。
最後に、NodeプロジェクトのセットアップにはExpressフレームワークを使用しましたが、プロジェクトのコンパイル・実行にはTypeScriptを使用しました。
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.