まくまくNode.jsノート
nodemon で Node.js サーバの再起動を自動化する
2019-06-07

nodemon とは?

Express や Restify で Web サーバの実装をしていると、ソースコードの修正があるたびに Ctrl + C でサーバを強制終了し、node app.js で再起動するという操作が必要になります。 node コマンドの代わりに nodemon コマンドを使用すると、ソースコードの変更を監視し、自動的に node コマンドを再起動してくれます。

$ nodemon app.js

node の代わりに nodemon とタイプするだけで、快適な実装生活を送ることができます。 Node.js でサーバ系のコーディングを行うときは nodemon を使うようにしましょう!

nodemon のインストール

nodemon コマンドは、Node.js 付属の npm コマンドで簡単にインストールすることができます。

$ npm install -g nodemon

システム全体で使用可能なコマンドとしてインストールしたいので、-g オプションを付けて実行してください。

nodemon を使ってみる

ここでは、Node.js の標準モジュールである http を使って簡単な Web サーバを作り、それを nodemon で起動してみます。 下記は、Hello と返答を返すだけの簡単な Web サーバプログラムです。

app.js

var server = require('http').createServer();

server.on('request', function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello\n');
  res.end();
});

server.listen(51200);
console.log('Server listening on port 51200')

node コマンドの代わりに nodemon コマンドを使ってこのプログラムを実行します。

$ nodemon app.js
[nodemon] 1.19.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node app.js`
Server listening on port 51200

出力に [nodemon] というプレフィックスが付いている行は、nodemon によって出力されているメッセージです。 自分で実装したプログラムの出力はそのまま表示されています(Server listening on port 51200 の部分)。

nodemon はデフォルトでは *.js ファイルや *.json ファイルの変更を監視しており、変更を検出すると自動的に node コマンドを再実行します。 例えば、上記の app.js の中の Hello という文字列を Hogeeeee に変更して保存すると、下記のように表示され、Web サーバが自動的に再起動します。

[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Server listening on port 51200

監視するファイルをオプション指定で絞り込んだり、package.json にその設定を書いておくこともできます。 詳しくは、nodemon --help や、下記のドキュメントサイトを参照してください。

2019-06-07