TypeScript ファイルの自動再読み込み
TypeScript ファイルの変更時に ts-node を watch して再読み込みする方法 (日本語)
前提条件
ts-node
とnodemon
がグローバルにインストールされていること- TypeScript と Node.js がインストールされていること
tsconfig.json ファイルの設定
- 少なくとも
compilerOptions.outDir
を設定して、コンパイル後の JavaScript ファイルの出力先を指定します。 - TypeScript コンパイラのオプションを指定します。
{
"compilerOptions": {
"outDir": "./dist",
// 他のオプションの設定も必要に応じて追加
}
}
package.json ファイルのスクリプト設定
nodemon
を使ってts-node
を実行するスクリプトを定義します。
{
"scripts": {
"dev": "nodemon --watch src --exec ts-node src/index.ts"
}
}
nodemon の実行
- ターミナルで以下のコマンドを実行します。
npm run dev
TypeScript ファイルの変更と再読み込み
nodemon
が変更を検出して、ts-node
を再実行し、変更された TypeScript ファイルをコンパイルして実行します。- TypeScript ファイルを変更します。
説明
--exec ts-node src/index.ts
オプションは、ts-node
を使ってsrc/index.ts
ファイルを実行します。--watch src
オプションは、src
ディレクトリ内のファイルを監視します。nodemon
はファイルの変更を監視し、変更が検出されると指定されたコマンドを再実行します。
備考
- 他の監視ツールやビルドツールも使用できますが、基本的な手順は同じです。
nodemon
は開発中の Node.js アプリケーションの自動再起動をサポートするツールです。ts-node
は TypeScript ファイルを直接実行できるツールです。
TypeScript ファイルの変更時の ts-node の自動再読み込み:コード例と解説
package.json の scripts セクション
{
"scripts": {
"dev": "nodemon --watch src --exec ts-node src/index.ts"
}
}
この設定により、npm run dev
コマンドを実行すると、src
ディレクトリ内の TypeScript ファイルが変更されるたびに、ts-node
が自動的に再実行され、変更内容が反映されます。
tsconfig.json (例)
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src",
"moduleResolution": "node",
"target": "es2020",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
}
}
rootDir
: ソースコードのルートディレクトリを指定します。outDir
: コンパイル後の JavaScript ファイルの出力先を指定します。
コード例 (src/index.ts
)
console.log("Hello, TypeScript!");
実行方法
- ターミナルでプロジェクトのルートディレクトリに移動します。
npm run dev
コマンドを実行します。src/index.ts
ファイルを編集して保存します。- コンソールに新しいログが出力され、変更が反映されていることを確認できます。
解説
tsconfig.json
に設定されたコンパイラーオプションに基づいて、TypeScript ファイルが JavaScript にコンパイルされます。ts-node
は、src/index.ts
ファイルをコンパイルして実行し、変更されたコードが反映された結果を出力します。- ファイルが変更されると、
nodemon
は--exec
オプションで指定されたコマンド、つまりts-node src/index.ts
を再実行します。 nodemon
は、--watch
オプションで指定されたディレクトリ内のファイルの変更を監視しています。
さらに詳しく
- デバッグ: デバッガーを使って、実行中のコードをステップ実行したり、変数の値を確認したりすることができます。
tsconfig.json
のオプション: TypeScript コンパイラーのオプションは、プロジェクトの規模や複雑さによって調整する必要があります。nodemon
のオプション:--delay
(変更検出後の遅延時間),--ignore
(監視から除外するパターン), など、様々なオプションがあります。
この設定により、TypeScript で開発する際に、ファイルを変更するたびに手動でコンパイルや実行を行う必要がなくなり、開発効率が大幅に向上します。
ポイント
nodemon
のオプションを有効活用することで、より快適な開発環境を構築できます。tsconfig.json
の設定は、プロジェクトの規模や複雑さによって調整する必要があります。nodemon
とts-node
の組み合わせは、TypeScript 開発において非常に一般的な手法です。
- TypeScript のコンパイラーオプションについても、公式ドキュメントで確認できます。
- より詳細な情報については、
nodemon
とts-node
の公式ドキュメントを参照してください。
webpack を利用した開発サーバ
- 例
// webpack.config.js const path = require('path'); module.exports = { mode: 'development', entry: './src/index.ts', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') }, module: { rules: [ { test: /\.ts$/, use: 'ts-loader', exclude: /node_module s/ } ] }, resolve: { extensions: ['.ts', '.js'] }, devServer: { static: './d ist', hot: true } };
npx webpack-dev-server
- デメリット
- 設定が複雑になる可能性がある。
- メリット
- Hot Module Replacement (HMR): モジュール単位で変更を反映できるため、ページの再読み込みが少なく、開発効率が向上します。
- ローダーやプラグインによる高度なカスタマイズが可能。
- TypeScript コンパイルも統合して行える。
Vite を利用した開発サーバ
- 例
// package.json { "scripts": { "dev": "vite" } }
npm run dev
- デメリット
- メリット
- Vite は高速な開発サーバであり、特に大規模なプロジェクトでその性能を発揮します。
- HMR をサポートし、TypeScript もネイティブでサポートしています。
ESBuild を利用した開発サーバ
- 例
esbuild src/index.ts --bundle --watch --outfile=dist/bundle.js
- デメリット
- メリット
- Go で書かれており、非常に高速なコンパイルが可能です。
tsc --watch の利用
- 例
tsc --watch
- デメリット
- メリット
選択のポイント
- コミュニティ
webpack は成熟したツールであり、多くの情報やコミュニティがあります。Vite は比較的新しいツールですが、成長が期待できます。 - 学習コスト
webpack の設定は複雑になる可能性がありますが、Vite はよりシンプルです。 - 機能
HMR、モジュールバンドリング、ローディング、プラグインなど、必要な機能に応じてツールを選択します。 - プロジェクトの規模
小規模なプロジェクトであればts-node
とnodemon
の組み合わせで十分な場合もあります。大規模なプロジェクトでは、webpack や Vite のような高度なツールが適しています。
TypeScript ファイルの変更時の自動再読み込みには、様々な方法があります。プロジェクトの規模や要件に合わせて最適なツールを選択することが重要です。
- 上記以外にも、Parcel や Rollup などのツールも利用できます。
- 各ツールの詳細な設定方法については、それぞれの公式ドキュメントを参照してください。
typescript development-environment nodemon