Node.js ファイル変更検知による自動再起動 - 開発効率を爆上げする3つの方法
Node.js ファイル変更検知による自動再起動
nodemon は、Node.js アプリケーションの開発を効率化するツールです。主な機能は以下の3つです。
- ファイル変更検知: ソースコード、テンプレートファイル、設定ファイルなど、様々なファイルの変更を監視します。
- 自動再起動: ファイルに変更があった場合、自動的にNode.jsアプリケーションを再起動します。
- ログ出力: 再起動に関するログを出力し、何が起こっているのかを把握しやすくなります。
nodemon を使うことで、開発サイクルを大幅に短縮し、生産性を向上させることができます。
nodemon のインストール
nodemon は、npmを使って簡単にインストールできます。
npm install -g nodemon
nodemon を使うには、以下のコマンドを実行します。
nodemon [オプション] [実行ファイル]
[オプション]
: nodemon の動作を制御するオプションです。詳細は後述します。[実行ファイル]
: 起動したいNode.jsアプリケーションのファイルパスです。
例:
nodemon index.js
このコマンドは、index.js
ファイルの変更を監視し、変更があった場合は自動的に再起動します。
nodemon のオプション
nodemon には、様々なオプションが用意されています。いくつか例を挙げます。
-w, --watch
: 監視対象のディレクトリを指定します。複数指定できます。-i, --ignore
: 監視対象から除外するファイルを指定します。-d, --delay
: 変更を検知してから再起動するまでの時間をミリ秒単位で指定します。デフォルトは100ミリ秒です。
詳細は、nodemon の公式ドキュメントを参照してください。 https://www.npmjs.com/package/nodemon
nodemon.json ファイル
nodemon の設定をファイルにまとめておくこともできます。その場合は、nodemon.json
という名前のファイルをプロジェクトのルートディレクトリに作成します。
{
"watch": ["src"],
"ext": ["js", "jsx"],
"ignore": ["node_modules/**"],
"delay": "200",
"execMap": {
"js": "node"
}
}
この例では、src
ディレクトリ内の .js
と .jsx
ファイルを監視し、変更があった場合は200ミリ秒後に再起動します。
その他
- nodemon は、ホットリロード機能にも対応しています。ホットリロードとは、コードを変更してブラウザを更新することなく、変更を反映する機能です。
- nodemon は、様々な IDE やエディタと連携することができます。
まとめ
nodemon は、Node.js 開発を効率化するための非常に便利なツールです。ぜひ活用してみてください。
Node.js ファイル変更検知による自動再起動 - サンプルコード
プロジェクトの準備
まず、新しいNode.jsプロジェクトを作成します。
mkdir my-app
cd my-app
npm init -y
次に、以下のファイルをプロジェクトのルートディレクトリに作成します。
index.js
package.json
index.js
ファイルには、以下のコードを記述します。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
このコードは、シンプルなHTTPサーバーを作成します。
{
"name": "my-app",
"version": "1.0.0",
"description": "My Node.js app",
"main": "index.js",
"scripts": {
"start": "nodemon index.js"
},
"devDependencies": {
"nodemon": "^2.2.1"
}
}
このファイルには、プロジェクトに関する情報と、nodemon
を使用して index.js
ファイルを実行するスクリプトが含まれています。
実行
以下のコマンドを実行して、Node.jsアプリケーションを起動します。
npm start
このコマンドは、nodemon
を使用して index.js
ファイルを実行します。 nodemon
は、ファイルの変更を監視し、変更があった場合は自動的に再起動します。
コードの変更
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, World! from Nodemon');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
ファイルを保存すると、nodemon
がファイルを検知し、自動的にアプリケーションを再起動します。ブラウザを更新すると、変更が反映されていることが確認できます。
終了
アプリケーションを終了するには、Ctrl + Cキーを押します。
Node.js ファイル変更検知による自動再起動 - 他の方法
ファイル監視ツールは、ファイルの変更を検知し、その変更に基づいてアクションを実行するツールです。Node.jsアプリケーションの再起動以外にも、様々な用途に使用できます。
サーバーフレームワークの機能
Expressなどのいくつかのサーバーフレームワークは、ファイル変更検知機能を備えています。
これらのフレームワークを使用している場合は、フレームワークのドキュメントを参照して、ファイル変更検知機能を有効にする方法を確認してください。
スクリプト
自作のスクリプトを使用して、ファイル変更を検知し、アプリケーションを再起動することもできます。
const fs = require('fs');
const child_process = require('child_process');
const watchPath = './src'; // 監視対象のディレクトリ
fs.watch(watchPath, (eventType, filename) => {
if (eventType === 'change' && filename !== '.git/config') {
console.log(`File ${filename} changed. Restarting server...`);
child_process.exec('node index.js'); // サーバーを再起動するコマンド
}
});
このスクリプトは、watchPath
ディレクトリ内のファイルの変更を監視し、変更があった場合はサーバーを再起動します。
タスクランナー
GulpやGruntなどのタスクランナーを使用して、ファイル変更検知タスクを作成することもできます。
クラウドサービス
HerokuやNowなどのクラウドサービスは、ファイル変更を検知して自動的にアプリケーションをデプロイする機能を提供しています。
どの方法を選択するかは、あなたのニーズと好みによります。
- シンプルで使いやすい方法:
nodemon
を使用する - 柔軟性とカスタマイズ性を求める: ファイル監視ツール、サーバーフレームワークの機能、自作のスクリプト、タスクランナーを使用する
- クラウドベースのソリューション: クラウドサービスを使用する
node.js