TypeScript + Node.js プロジェクトのはじめかた
TypeScript + Node.js プロジェクトのはじめかた:
https://github.com/nobutakaoshiro/typescript-node-base をコピペして使ってね
以下の設定を適用した TypeScript + Node.js のプロジェクトを作成します。
node と npm はインストール済みとします。
また、今回の記事はmacOSにて検証しております。
Linux環境だと手順はほぼ同じだと思いますが、Windows環境の場合は読み替えが必要になるかもしれません。
TypeScript + Node.js プロジェクトを作成していきます。
不要なファイルを Git にコミットしないようにするため、
以下をコピペして
あとは必要に応じて .gitignore を修正してください。
以下をコピペして
個人的な好みですが、開発中は セマンティック バージョニング 2.0.0に合わせてバージョンを
プロジェクトに合わせて tsconfig.json を修正します(以下はコメントを除いて表記しています)。
動作確認のため TypeScript の簡単なプログラムを作ってみます。
すると、
生成された
以下のメッセージが表示されれば成功です。
しかし、ソースコードを修正するたびに
開発効率をあげるため、
パッケージが追加されたら
通常の
さらに開発効率をあげるため、ソースコードの変更を検知するたびに自動的に再実行してくれる
パッケージが追加されたら
注: APIサーバーのように一度実行すると動き続けるプログラムではなく、この記事のHello Worldプログラムのように1度実行するとプロセスが終了するプログラムの場合は、
すると、ソースコードの変更を検知して、自動的にプログラムが再実行されます。
自動で再実行されました!
ts-node と ts-node-dev を簡単に呼び出せるようにするため package.json を修正します。
修正して保存したら動作確認を行います。
これで TypeScript で Node.js のプログラムが開発できるようになりました。
また、複数のnpm-scriptsのコマンドを実行できるように
そして、package.json を以下のように修正します。
package.json を修正したら動作確認をしましょう。
最終的にはビルドで生成された JavaScript ファイルを Node.js で動作させることになります。
これまでのコードをgitにコミットしましょう。
tscコマンド実行後に生成される
これでgitへのコミットが完了しました。
あとは必要なパッケージや設定を行い、TypeScript + Node.js でのアプリケーション開発を楽しみましょう!
TL;DR
https://github.com/nobutakaoshiro/typescript-node-base をコピペして使ってね
この記事の趣旨
以下の設定を適用した TypeScript + Node.js のプロジェクトを作成します。項目 | パッケージ |
---|---|
コンパイラ(トランスパイラ) | typescript |
開発サポート | ts-node / ts-node-dev / rimraf / npm-run-all |
エディター設定 | EditorConfig |
バージョン管理 | git |
動作環境
node と npm はインストール済みとします。$ node -v v10.15.1 $ npm -v 6.4.1
$ uname -v Darwin Kernel Version 18.2.0: Thu Dec 20 20:46:53 PST 2018; root:xnu-4903.241.1~1/RELEASE_X86_64 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.3 BuildVersion: 18D42
初期設定
TypeScript + Node.js プロジェクトを作成していきます。
1. プロジェクトディレクトリの作成
~/
mkdir typescript-node-base cd typescript-node-base
2. git 初期化
~/typescript-node-base
git init
.gitignore の生成
不要なファイルを Git にコミットしないようにするため、 .gitignore
ファイルを生成します。~/typescript-node-base
cat > .gitignore
Ctrl+D
を押下します。~/typescript-node-base/.gitignore
# macOS ### https://raw.github.com/github/gitignore/07c730e1fccfe0f92b29e039ba149d20bfb332e7/Global/macOS.gitignore .DS_Store .AppleDouble .LSOverride Icon ._* .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk # Linux ### https://raw.github.com/github/gitignore/07c730e1fccfe0f92b29e039ba149d20bfb332e7/Global/Linux.gitignore *~ .fuse_hidden* .directory .Trash-* .nfs* # Windows ### https://raw.github.com/github/gitignore/07c730e1fccfe0f92b29e039ba149d20bfb332e7/Global/Windows.gitignore Thumbs.db ehthumbs.db ehthumbs_vista.db *.stackdump [Dd]esktop.ini $RECYCLE.BIN/ *.cab *.msi *.msm *.msp *.lnk # node.js ### https://raw.github.com/github/gitignore/07c730e1fccfe0f92b29e039ba149d20bfb332e7/Node.gitignore logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pids *.pid *.seed *.pid.lock lib-cov coverage .nyc_output .grunt bower_components .lock-wscript build/Release node_modules/ jspm_packages/ typings/ .npm .eslintcache .node_repl_history *.tgz .yarn-integrity .env .next
(オプション) または gibo を使って .gitignore を生成する
- gibo: fast access to .gitignore boilerplate - https://github.com/simonwhitaker/gibo
gibo
を利用している場合は、以下のコマンドで前述の .gitignore と同じ内容が生成できます。~/typescript-node-base
gibo dump macos linux windows node > .gitignore
3. (オプション) EditorConfig の設定
- EditorConfig - https://editorconfig.org/
~/typescript-node-base
cat > .editorconfig
Ctrl+D
を押下します。~/typescript-node-base/.editorconfig
root = true [*] charset = utf-8 end_of_line = lf insert_final_newline = true indent_size = 2 indent_style = space trim_trailing_whitespace = true [Makefile] indent_size = 4 indent_style = tab [*.{md,markdown}] insert_final_newline = false trim_trailing_whitespace = false [*.json] insert_final_newline = false
.editorconfig
はお好みで書き換えてください。
3. package.json の生成
~/typescript-node-base
npm init -y
npm init
で package.json を生成するとバージョン番号がデフォルトで 1.0.0
になります。個人的な好みですが、開発中は セマンティック バージョニング 2.0.0に合わせてバージョンを
0.1.0
としておきます。~/typescript-node-base/package.json
{ "name": "typescript-node-base", - "version": "1.0.0", + "version": "0.1.0", "main": "index.js", ...
4. typescript パッケージの追加
~/typescript-node-base
npm install typescript npm install -D @types/node
tsconfig.json 生成
~/typescript-node-base
npx tsc --init
tsc --init
を実行すると、 tsconfig.json
が生成されます。プロジェクトに合わせて tsconfig.json を修正します(以下はコメントを除いて表記しています)。
~/typescript-node-base/tsconfig.json
{ "compilerOptions": { - "target": "es5", + "target": "ES2018", "module": "commonjs", + "sourceMap": true, + "outDir": "./dist", "strict": true, "esModuleInterop": true, - } + }, + "include": [ + "src/**/*" + ], }
5. Hello, World!
動作確認のため TypeScript の簡単なプログラムを作ってみます。~/typescript-node-base
mkdir src touch src/index.ts
src/index.ts
をエディターで開き、以下の内容を入力して保存します。~/typescript-node-base/src/index.ts
function hello(name: string) { return `Hello, ${name}!`; } console.log(hello("World"));
src/index.ts
ファイルを保存したら、typescript
パッケージに同梱する tsc
コマンドを実行します。~/typescript-node-base
npx tsc
tsconfig.json
の設定に従って TypeScript から JavaScript への変換が行われ、dist/index.js
と dist/index.js.map
が生成されます。~/typescript-node-base
ls dist #=> index.js index.js.map
index.js
を実行してみましょう。~/typescript-node-base
node dist/node.js
実行結果
Hello, World!
6. 開発の効率をあげる (ts-node & ts-node-dev)
tsc
コマンドでコンパイルして node
でプログラムが実行できるようになりました。しかし、ソースコードを修正するたびに
tsc
を実行し、さらにそのあと node
コマンドを実行するのは手間がかかりますね。開発効率をあげるため、
tsc -> node
の実行を自動的に行ってくれる ts-node
パッケージを追加します。
ts-node
パッケージの追加
~/typescript-node-base
npm install -D ts-node
ts-node
コマンドを実行してみましょう。~/typescript-node-base
npx ts-node src/index.ts
実行結果
Hello, World!
node
コマンドで JavaScript を実行するかのように、ts-node
で TypeScript ファイルが実行できました。
ts-node-dev
パッケージの追加
ts-node
で少し効率があがりました。ただ、ソースコードを修正するたび、毎回手動で実行する必要があります。さらに開発効率をあげるため、ソースコードの変更を検知するたびに自動的に再実行してくれる
ts-node-dev
パッケージを追加します。~/typescript-node-base
npm install -D ts-node-dev
ts-node-dev
コマンドを実行してみましょう。注: APIサーバーのように一度実行すると動き続けるプログラムではなく、この記事のHello Worldプログラムのように1度実行するとプロセスが終了するプログラムの場合は、
ts-node-dev
に --respawn
オプションをつけます。npx ts-node-dev --respawn src/index.ts
ts-node-dev
が起動したら、エディターで src/index.ts
を修正して保存します。~/typescript-node-base/src/index.ts
function hello(name: string) { return `Hello, ${name}!`; } - console.log(hello("World")); + console.log(hello("TypeScript"));
実行結果
Using ts-node version 8.0.2, typescript version 3.3.3 Hello, World! [INFO] 15:19:41 Restarting: /Users/<USER_NAME>/typescript-node-base/src/index.ts has been modified Using ts-node version 8.0.2, typescript version 3.3.3 Hello, TypeScript!
ts-node-dev
を終了する時は Ctrl+C
を押下します。^C
npm-scripts に dev
と dev:watch
を追加する
ts-node と ts-node-dev を簡単に呼び出せるようにするため package.json を修正します。~/typescript-node-base/package.json
{ "name": "typescript-node-base", "version": "0.1.0", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "dev": "ts-node src/index.ts", + "dev:watch": "ts-node-dev --respawn src/index.ts" }, ...
# 1回実行 npm run dev # 変更検知 npm run dev:watch
7. rimraf
npm-run-all
パッケージの追加と npm-scripts に clean
/ tsc
/ build
/ start
を追加
tsc
でビルドを行ったファイルを一括削除できるように、rimraf
パッケージを追加します。また、複数のnpm-scriptsのコマンドを実行できるように
npm-run-all
パッケージも併せて追加します。~/typescript-node-base
npm install -D rimraf npm-run-all
~/typescript-node-base/package.json
{ "name": "typescript-node-base", "version": "0.1.0", - "main": "index.js", + "main": "dist/index.js", "scripts": { "dev": "ts-node ./src/index.ts", - "dev:watch": "ts-node-dev --respawn src/index.ts" + "dev:watch": "ts-node-dev --respawn src/index.ts", + "clean": "rimraf dist/*", + "tsc": "tsc", + "build": "npm-run-all clean tsc", + "start": "node ." }, ...
~/typescript-node-base
# TypeScript -> JavaScript に変換 npm run build # 生成されたJavaScriptを実行 npm run start ## または npm start # 生成されたファイルを削除 npm run clean
build
と start
はそのためのものです。
8. ソースコードのバージョン管理
これまでのコードをgitにコミットしましょう。tscコマンド実行後に生成される
/dist
はgitの対象外としたいので、.gitignoreファイルに以下の1行を追加します。~/typescript-node-base/.gitignore
# 最後に以下の行を追加 /dist
~/typescript-node-base
git status git add . git commit -m "First commit"
あとは必要なパッケージや設定を行い、TypeScript + Node.js でのアプリケーション開発を楽しみましょう!
コメント
コメントを投稿