人生初の Advent Calendar 投稿です。マサカリ耐性は低めなので、ツッコミはやさしくお願いします。
Sails での開発は確認のために毎回サーバを再起動する必要がある
Sails.js に限ったことではないのでしょうが、Node.js 系の開発では Rails の Development モードのようにファイルの変更が即座に反映されません。Sails は View だけは変更が反映されるようですが、Controller や Model はファイルを変更してもサーバを再起動しない限り、変更は反映されません。
SailsCasts を見ていても、変更を加えるたびに手動でサーバを再起動していて、非常にめんどくさそう。
そこで、ファイルの変更を自動検知してサーバを再起動してくれるようにすれば、変更後に即座とは言えないまでも数秒待てば確認できるようになるので、少しは楽になります。
PM2 を使おう
PM2 は Node のプロセスマネージャーで、アプリケーションサーバをデーモン化、落ちてもすぐ再起動するようにしたり、モニタリングを簡単にできるようにしたり、はたまたロードバランシングまでやってくれる高機能なパッケージです。
本番環境で使うことが多いこの PM2 ですが、ファイルの変更を検知してサーバを再起動してくれるオプションがあるので、それを開発環境で使わせてもらおうというのが今回の趣旨となります。
PM2 は NPM パッケージなので、インストールは
$ npm install -g pm2
とするだけ。
使い方
$ pm2 start app.js --watch
をアプリのルートディレクトリで実行してみたのですが、なぜかサーバが延々と再起動を繰り返してしまったため、このやり方は×。
設定の JSON ファイルを用意することで、特定のディレクトリやファイルだけを watch してくれるようになるそうなので、今回はその方法をとります。
config/pm2/development.json
というファイルを作成して、その中身を以下のように設定。
{
"apps": [{
"name" : "sample_app",
"script" : "app.js",
"watch" : ["api", "config"],
"env": {
"NODE_ENV": "development",
"PORT" : 1337
}
}]
}
これで、以下のコマンドで起動すれば、api/
config/
ディレクトリの変更を感知してサーバが再起動され、変更が反映されます。
$ pm2 start config/pm2/development.json
ちなみに views
ディレクトリを watch
に含めると、サーバが再起動を繰り返すので、先の犯人はこれだった様子。View ファイルはサーバを再起動しなくても変更が反映されるので、watch
に入れる必要はありません。
標準出力にログを表示するには、
$ pm2 logs
サーバを終了するには、
$ pm2 kill
を実行します。それ以外の PM2 の詳しい使い方はこちらから。