Nodemonを使用してNode.jsアプリを自動的に再起動する方法

提供:Dev Guides
移動先:案内検索

序章

Node.jsでは、変更を有効にするためにプロセスを再起動する必要があります。 これにより、ワークフローに追加のステップが追加されます。 nodemon を使用してプロセスを自動的に再開することにより、この余分な手順を排除できます。

nodemonは、 @rem によって開発されたコマンドラインインターフェイス(CLI)ユーティリティであり、ノードアプリをラップし、ファイルシステムを監視し、プロセスを自動的に再起動します。

この記事では、nodemonのインストール、セットアップ、および構成について学習します。

前提条件

この記事をフォローしたい場合は、次のものが必要になります。

このチュートリアルは、Node.js v17.1.0、npm v8.1.2、nodemon v2.0.15、およびexpressv4.17.1で検証されました。

手順1—nodemonをインストールする

まず、マシンにnodemonをインストールする必要があります。 npmまたはyarnを使用して、ユーティリティをプロジェクトにグローバルまたはローカルにインストールします。

グローバルインストール

nodemonは、npmを使用してグローバルにインストールできます。

npm install nodemon --global

またはyarnを使用:

yarn global add nodemon

ローカルインストール

nodemonをローカルにインストールすることもできます。 ローカルインストールを実行する場合、nodemon--save-dev(または--dev)を使用してdev依存関係としてインストールできます。

nodemonnpmを使用してローカルにインストールします。

npm install nodemon --save-dev

またはyarnを使用:

yarn add nodemon --dev

ローカルインストールで注意すべきことの1つは、nodemonコマンドを直接使用できないことです。

Outputcommand not found: nodemon

ローカルにインストールされたパッケージを実行できます。

./node_modules/nodemon/bin/nodemon.js [your node app]

npmスクリプトまたはnpxでも使用できます。

これで、nodemonのインストールプロセスは終了です。

ステップ2—nodemonを使用したExpressプロジェクトの例を設定する

nodemonを使用して、ノードスクリプトを開始できます。 たとえば、server.jsファイルにExpressサーバーセットアップがある場合、nodemonを起動して、次のような変更を監視できます。

nodemon server.js

Nodeを使用してスクリプトを実行している場合と同じ方法で、引数を渡すことができます。

nodemon server.js 3006

デフォルトの監視対象拡張子(.js.mjs.json.coffee、または [ X134X])現在のディレクトリまたはサブディレクトリで、プロセスが再起動します。

メッセージを出力するserver.jsファイルの例を書いてみましょう:Dolphin app listening on port ${port}!

server.js

const express = require('express')
const app = express()
const port = 3000

app.listen(port, ()=> console.log(`Dolphin app listening on port ${port}!`))

nodemonを使用して例を実行します。

nodemon server.js

端末出力には次のように表示されます。

Output[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[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",
  // ...
}

mainファイルが指定されていない場合、nodemonstartスクリプトを検索します。

package.json

{
  // ...
  "scripts": {
    "start": "node server.js"
  },
  // ...
}

package.jsonに変更を加えたら、nodemonを呼び出して、server.jsを渡さなくても、サンプルアプリをウォッチモードで起動できます。

ステップ3—オプションの使用

nodemonで使用可能な構成設定を変更できます。

主なオプションのいくつかを見てみましょう:

  • --exec--execスイッチを使用して、ファイルを実行するバイナリを指定します。 たとえば、 ts-node バイナリと組み合わせると、--execは変更を監視し、TypeScriptファイルを実行するのに役立ちます。
  • --ext:監視するさまざまなファイル拡張子を指定します。 このスイッチでは、ファイル拡張子のコンマ区切りリストを指定します(--ext js,tsなど)。
  • --delay:デフォルトでは、nodemonは、ファイルが変更されたときにプロセスを再開するために1秒間待機しますが、--delayスイッチを使用すると、別の遅延を指定できます。 たとえば、3.2秒の遅延の場合はnodemon --delay 3.2です。
  • --watch--watchスイッチを使用して、監視する複数のディレクトリまたはファイルを指定します。 監視するディレクトリごとに1つの--watchスイッチを追加します。 デフォルトでは、現在のディレクトリとそのサブディレクトリが監視されるため、--watchを使用すると、特定のサブディレクトリまたはファイルのみに絞り込むことができます。
  • --ignore--ignoreスイッチを使用して、特定のファイル、ファイルパターン、またはディレクトリを無視します。
  • --verbose:再起動をトリガーするために変更されたファイルに関する情報を含むより詳細な出力。

次のコマンドを使用して、使用可能なすべてのオプションを表示できます。

nodemon --help

これらのオプションを使用して、次のシナリオを満たすコマンドを作成しましょう。

  • 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

端末出力には次のように表示されます。

Output[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): server
[nodemon] watching extensions: ts
[nodemon] starting `ts-node 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": "nodemon-example",
  "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 server/server.ts

nodemonは構成を取得し、それらを使用します。 このようにして、構成を保存、共有、および繰り返して、コマンドラインでのコピーアンドペーストまたは入力エラーを回避できます。

結論

この記事では、Node.jsアプリケーションでnodemonを使用する方法について説明しました。 このツールは、変更を表示するためにノードサーバーを停止および開始するプロセスを自動化するのに役立ちます。

使用可能な機能とトラブルシューティングエラーの詳細については、公式ドキュメントを参照してください。

Node.jsの詳細については、Node.jsトピックページで演習とプログラミングプロジェクトを確認してください。