はじめに
Node.jsでは、変更を有効にするためにプロセスを再起動する必要があります。これにより、変更を行うためにワークフローに更なる手順が追加されます。nodemon
を使用してプロセスを自動的に再起動することで、この余分な手順を排除できます。
nodemon
は@remによって開発されたコマンドラインインターフェイス(CLI)ユーティリティであり、Nodeアプリケーションをラップ、ファイルシステムを監視し、プロセスを自動的に再起動します。
この記事では、nodemon
のインストール、セットアップ、設定について学びます。
前提条件
この記事に沿って進めるには、次のものが必要です。
ステップ 1—nodemon
をインストール
まず、マシンにnodemon
をインストールする必要があります。npmまたはYarnを使用して、ユーティリティをプロジェクトに、グローバルまたはローカルインストールします。
グローバルインストール
npm
を使用してnodemon
をグローバルにインストールすることができます。
または、yarnを使用して次のように行います。
ローカルインストール
npmを使用してnodemon
をローカルにインストールすることもできます。ローカルインストールを実行する場合、--save-dev
(または-dev
)を使用してnodemon
を開発の依存関係としてインストールできます。
- npm install nodemon --save-dev
または、yarnを使用して次のように行います。
ローカルインストールでは、コマンドラインから直接nodemon
コマンドを使用できないことに注意してください。
Output
- command not found: nodemon
ただし、いくつかのnpmスクリプトの一部として、またはnpxとともに使用することができます。
これで、nodemon
インストールプロセスは終了です。次に、プロジェクトでnodemon
を使用します。
ステップ 2 — nodemon
を使用したサンプルExpressプロジェクトのセットアップ
nodemon
を使用してNodeスクリプトを実行することができます。たとえば、server.js
ファイルにExpressサーバーのセットアップがある場合、それを実行して次のように変更を監視することができます。
Nodeを使用してスクリプトを実行するかのように、引数を渡すことができます。
現在のディレクトリまたはサブディレクトリにあるデフォルトの監視拡張子(.js
、.mjs
、.json
、.coffee
、または.litcoffee
)のいずれかを持つファイルに変更を加えるたびに、プロセスは再起動します。
Dolphin app listening on port ${port}!
というメッセージを出力する、server.js
サンプルファイルを記述すると仮定しましょう。
nodemon
を使用してサンプルを実行することができます。
次のように端末に出力されます。
Output
[nodemon] 1.17.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node server.js`
Dolphin app listening on port 3000!
nodemon
が実行中の状態で、server.js
ファイルを変更して次のメッセージを出力しましょう。Shark app listening on port ${port}!
次のように端末に追加出力されます。
Output
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Shark app listening on port 3000!
Node.jsアプリケーションからの端末出力は、期待通りに表示されています。rs
と入力してENTER
キーを押すと、いつでもプロセスを再起動することができます。
代わりに、nodemon
は、プロジェクトのpackage.json
ファイルで指定されているmain
ファイルも検索します。
package.json
{
// ...
"main": "server.js",
// ...
}
または、次のようにstart
スクリプトを実行します。
package.json
{
// ...
"scripts": {
"start": "node server.js"
},
// ...
}
package.json
に変更を加えると、server.js
に渡す必要なく、nodemon
を呼び出して監視モードでサンプルアプリを起動することができます。
ステップ 3 — オプションの使用
nodemon
で使用可能な設定を変更することができます。
主なオプションをいくつか見ていきましょう。
--exec
:--exec
スイッチを使用して、ファイルを実行するバイナリを指定します。たとえば、ts-node
バイナリと組み合わせた場合、--exec
は変更を監視してTypeScriptファイルを実行するのに役立ちます。--ext
:監視するさまざまなファイル拡張子を指定します。このスイッチでは、ファイル拡張子のカンマ区切りリストを指定します(例:--ext js,ts
)。--delay
:デフォルトでは、nodemon
は、ファイルが変更されたときにプロセスを再起動するまで1秒間待機しますが、--delay
スイッチを使用するとさまざまな遅延を指定することができます。たとえば、nodemon --delay 3.2
で、3.2秒の遅延を指定します。--watch
:--watch
スイッチを使用して、監視する複数のディレクトリまたはファイルを指定します。監視したいディレクトリごとに、--watch
スイッチを1つ追加します。デフォルトでは、現在のディレクトリとそのサブディレクトリが監視されるため、--watch
を使用すると、特定のサブディレクトリまたはファイルのみに絞り込むことができます。--ignore
:--ignore
スイッチを使用して、特定のファイル、ファイルパターン、またはディレクトリを無視します。--verbose
:再起動がトリガーされた原因となる、変更されたファイルに関する情報を含む詳細な出力。
次のコマンドを使用して、使用可能なすべてのオプションを表示することができます。
これらのオプションを使用して、次のシナリオを満たすために コマンドを作成しましょう。
server
ディレクトリを監視.ts
拡張子の付いたファイルを指定.test.ts
接尾辞の付いたファイルを無視ts-node
を使用してファイル(server/server.ts
)を実行- ファイルが変更された後、3秒間待機して再起動
- nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts
このコマンドは、--watch
、--ext
、--exec
、--ignore
、--delay
オプションを組み合わせて、このシナリオの条件を満たします。
ステップ 4 — 設定の使用
前の例で、nodemon
の実行時に設定スイッチを追加するのは、非常に面倒な作業です。特定の設定が必要なプロジェクトに適した解決策は、nodemon.json
ファイルでこれらの設定を指定することです。
たとえば、前のコマンドラインの例と同じ設定ですが、nodemon.json
ファイルに配置されています。
nodemon.json
{
"watch": ["server"],
"ext": "ts",
"ignore": ["*.test.ts"],
"delay": "3",
"execMap": {
"ts": "ts-node"
}
}
--exec
スイッチではなく、execMap
を使用していることに注意してください。execMap
を使用すると、特定のファイル拡張子を指定して使用するバイナリを指定できます。
または、nodemon.json
設定ファイルをプロジェクトに追加したくない場合は、nodemonConfig
キーの中でpackage.json
ファイルにこれらの設定を追加することができます。
package.json
{
"name": "test-nodemon",
"version": "1.0.0",
"description": "",
"nodemonConfig": {
"watch": [
"server"
],
"ext": "ts",
"ignore": [
"*.test.ts"
],
"delay": "3",
"execMap": {
"ts": "ts-node"
}
},
// ...
nodemon.json
またはpackage.json
に変更を加えたら、目的のスクリプトを使用してnodemon
を実行することができます。
nodemon
は、設定を取得して使用します。このように、設定を保存、共有、繰り返して、コマンドラインでのコピー&ペーストや入力エラーを回避することができます。
まとめ
この記事では、Node.jsアプリケーションでnodemon
を使用する方法を見てきました。このツールを使用すると、変更を表示するためにNodeサーバーを停止および起動するプロセスを自動化するのに役立ちます。
使用可能な機能とエラーのトラブルシューティングの詳細については、公式ドキュメントを参照してください。
Node.jsの詳細については、Node.jsトピックページで演習とプログラミングプロジェクトをご覧ください。