Tutorial

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

Published on January 12, 2021
authorauthor

Alligator.io and Bradley Kouchi

日本語
Nodemonを使用してNode.jsアプリケーションを自動的に再起動する方法

はじめに

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

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

この記事では、nodemonのインストール、セットアップ、設定について学びます。

前提条件

この記事に沿って進めるには、次のものが必要です。

ステップ 1—nodemonをインストール

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

グローバルインストール

npmを使用してnodemonをグローバルにインストールすることができます。

  1. npm install nodemon -g

または、yarnを使用して次のように行います。

  1. yarn global add nodemon

ローカルインストール

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

  1. npm install nodemon --save-dev

または、yarnを使用して次のように行います。

  1. yarn add nodemon --dev

ローカルインストールでは、コマンドラインから直接nodemonコマンドを使用できないことに注意してください。

  1. Output
    command not found: nodemon

ただし、いくつかのnpmスクリプトの一部として、またはnpxとともに使用することができます。

これで、nodemonインストールプロセスは終了です。次に、プロジェクトでnodemonを使用します。

ステップ 2 — nodemonを使用したサンプルExpressプロジェクトのセットアップ

nodemonを使用してNodeスクリプトを実行することができます。たとえば、server.jsファイルにExpressサーバーのセットアップがある場合、それを実行して次のように変更を監視することができます。

  1. nodemon server.js

Nodeを使用してスクリプトを実行するかのように、引数を渡すことができます。

  1. nodemon server.js 3006

現在のディレクトリまたはサブディレクトリにあるデフォルトの監視拡張子(.js.mjs.json.coffee、または.litcoffee)のいずれかを持つファイルに変更を加えるたびに、プロセスは再起動します。

Dolphin app listening on port ${port}!というメッセージを出力する、server.jsサンプルファイルを記述すると仮定しましょう。

nodemonを使用してサンプルを実行することができます。

  1. nodemon server.js

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

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:再起動がトリガーされた原因となる、変更されたファイルに関する情報を含む詳細な出力。

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

  1. nodemon --help

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

  • serverディレクトリを監視
  • .ts拡張子の付いたファイルを指定
  • .test.ts接尾辞の付いたファイルを無視
  • ts-nodeを使用してファイル(server/server.ts)を実行
  • ファイルが変更された後、3秒間待機して再起動
  1. 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を実行することができます。

  1. nodemon server/server.ts

nodemonは、設定を取得して使用します。このように、設定を保存、共有、繰り返して、コマンドラインでのコピー&ペーストや入力エラーを回避することができます。

まとめ

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

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

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

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the author(s)

Category:
Tutorial
Tags:

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment
Leave a comment...

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.