第10章:nodemonは必要?判断基準を作る🤔🧰
この章のテーマはシンプル! **「nodemonを“入れるべき時”と、“入れなくていい時”を迷わない」**です😊✨
1) まず結論:nodemonは「困った時に効く強い味方」👑
最近の開発は、最初から選択肢が多いです👇
- Node標準の watch(
node --watch):標準機能で軽い⚡ (Node.js) - tsx watch(
tsx watch):TS開発の体験が良い💨 (tsx) - Compose Watch(
docker compose up --watch/docker compose watch):コンテナ開発で“同期/再起動/再ビルド”まで面倒見れる🧱 (Docker Documentation) - nodemon:**「監視したいものが増えた時」「動かし方が複雑になった時」**に強い🧰 (DigitalOcean)
なので最初は Node watch / tsx watch で走って、 「足りない!」となったら nodemon に“昇格”するのが気持ちいいです😄✨
2) nodemonの強みは何?どこが嬉しい?😋
nodemonはざっくり言うと👇 **「ファイルが変わったら、指定コマンドでアプリを再起動してくれる係」**です🔁
特に効くのはここ👇
- 監視対象を好きに増やせる(例:
.env/*.graphql/*.sql/ 設定ファイル)🧠 → そもそもデフォルトだと.js/.mjs/.jsonだけ見てることがあるので、extやwatchを明示できるのは大きいです (DigitalOcean) --execで“実行エンジン”を差し替えできる(TSならtsx/ts-nodeなど)🏃♂️ → TSでも全然いけます (DigitalOcean)delayで連続保存の“二重再起動”を抑えられる(地味に超大事)⏱️ (DigitalOcean)- 「再起動しないファイル」を ignore で切れる(テスト書いてる時に便利)🙅♂️ (DigitalOcean)
逆に注意点もあります👇
-L(legacy watch)を使うとCPUが上がることがある(ポーリング監視になる)🔥 (DigitalOcean)
3) Node標準 watch(node --watch)はどこまでいける?🧩
Node標準の watch は、最近かなり実用的です✨
- watchモードは 安定版(stable)になっている (Node.js)
- デフォルトでは エントリポイント+import/requireされたモジュールの変更で再起動します (Node.js)
- 出力を消したくない人は
--watch-preserve-outputが使えます🧼 (Node.js) - 再起動時に送るシグナルを変えたいなら
--watch-kill-signalもあります(比較的新しめ)🧯 (Node.js)
ただし弱点もはっきりしてます👇
- 「importされないファイル」(
.envや設定、テンプレ等)を監視しにくい --watch-pathで監視パス指定ができるけど、macOS/Windows限定で、Linuxだと例外が出ます(=コンテナ内Linuxで使うと刺さることがある)💥 (Node.js)--watch-pathを使うと、import/requireの追跡監視がオフになる(挙動が変わる)🔁 (Node.js)
👉 なので Dockerコンテナ内(Linux)で運用するなら、--watch-path 前提の設計にはしない方が安全です😇 (Node.js)
4) tsx watch は「TS開発の気持ちよさ」に強い🏄♂️
tsx の watch はこういう設計👇
- 依存(importされたファイル)が変わったら再実行 💡 (tsx)
- デフォルトで
node_modulesやdistなどを避ける(余計な監視をしない)🧹 (tsx) --include/--excludeで監視対象を調整できる🧷 (tsx)
👉 「TSをサクサク回す」なら、まず tsx watch が最短になりやすいです😊 (tsx)
5) Compose Watch は “コンテナ開発の最終兵器”👀🧱
Compose Watch は、アプリ内の再起動だけじゃなくて👇
- sync:ホストの変更をコンテナへ同期(ホットリロードがある前提に相性◎) (Docker Documentation)
- sync+restart:同期して、そのサービスを再起動 (Docker Documentation)
- rebuild:必要な変更(例:
package.json)なら再ビルドして差し替え (Docker Documentation)
さらに👇
docker compose up --watchで起動できる(あるいはdocker compose watch) (Docker Documentation)- Docker Compose 2.22.0+ が必要 (Docker Documentation)
👉 「Windowsのマウント越しでファイルイベントが不安定😇」みたいな時、 アプリ内watchより Compose Watchの方が安定することが多いです✨ (Docker Documentation)
6) nodemonを入れるべき“判断軸”チェックリスト🧭✅
✅ nodemonが“必要になりやすい”条件
.envや設定ファイル変更でも再起動したい(= importされない)🔧 (DigitalOcean)watch / ignore / ext / delayを プロジェクト方針として固定したい📌 (DigitalOcean)- 実行コマンドが
tsxやts-nodeなどで一捻りある🌀 (DigitalOcean) - “二重保存で2回再起動”みたいなガチャを減らしたい(
delayが効く)⏱️ (DigitalOcean)
✅ nodemonを“入れなくていい”ことが多い条件
- TSは
tsx watchで十分回ってる🏎️ (tsx) - JS中心で、importされたコードだけ見ていればOK(Node標準 watch で足りる)🧊 (Node.js)
- 変更同期や再ビルドも含めてDocker側で面倒見たい(Compose Watchへ)🧱 (Docker Documentation)
7) ハンズオン:nodemonを“必要な分だけ”導入する🛠️😄
ここでは **「TSを tsx で実行しつつ、.env も監視したい」**という、よくある形で作ります✨
(.env の監視は nodemon の得意技!)(DigitalOcean)
手順①:インストール📦
npm i -D nodemon
手順②:nodemon.json を作る🧾
“長いコマンド列”はファイルに逃がすのが正解🙆♂️ (DigitalOcean)
{
"watch": ["src", ".env"],
"ext": "ts,tsx,json,env",
"ignore": ["node_modules/", "dist/", "**/*.test.ts"],
"delay": 1,
"exec": "tsx src/server.ts"
}
ポイント👇
.envを watch に入れる(環境変数の変更→再起動ができる)(DigitalOcean)extで監視拡張子を明示(デフォルト監視に入ってないことがある)(DigitalOcean)delayで連続保存のバタつきを抑える (DigitalOcean)ignoreをちゃんと書く(CPU暴騰の予防)(DigitalOcean)
手順③:package.json にスクリプトを追加🧩
{
"scripts": {
"dev": "nodemon",
"start": "node dist/server.js"
}
}
これで npm run dev だけで動きます😊✨ (DigitalOcean)
8) もし再起動しない時は?(Docker/Windowsあるある)😇💥
症状A:変更したのに再起動しない🙃
原因の上位はこのへん👇
- 監視対象の拡張子じゃない(
.envとか)→extを追加 (DigitalOcean) - ignore に引っかかってる →
ignoreを見直す (DigitalOcean)
症状B:エディタの“安全な保存”でイベントが飛ばない📝
エディタが 一旦別ファイルに書いてリネームする方式だと、監視がズレることがあります。
その時は **-L(legacy watch)**で回避できます(ポーリング監視)(DigitalOcean)
例👇
nodemon -L
ただし注意!
-L は CPUが上がることがあるので、常用は慎重に🔥 (DigitalOcean)
👉 ここでのおすすめ判断:
- 小規模なら
-LでOK😄 - 重くなるなら **Compose Watch(sync / sync+restart)**へ寄せるのが綺麗✨ (Docker Documentation)
9) ミニ課題(15分で“判断できる人”になる)🎒✨
課題①:.env を変えたら再起動するようにする🌱
.envを編集して保存- ターミナルに再起動ログが出ればOK🙆♂️ (DigitalOcean)
課題②:テスト編集で再起動しないようにする🧪
**/*.test.tsをignoreに入れる- テストを書きながらAPIが落ちないと最高👍 (DigitalOcean)
課題③:二重再起動を止める⏱️
delay: 1を試す- 保存連打しても落ち着いてたら勝ち🏆 (DigitalOcean)
10) AIで時短するプロンプト例🤖✨
そのままコピペでOKです😄(生成物は必ず目視チェック!)
- 「このプロジェクト構成(src/, dist/, .env)で、nodemon.json を最適化して。watch/ext/ignore/delay を理由付きで提案して」
- 「Docker上でファイル変更が拾えない時の対処を、nodemon(-L含む)とCompose Watch(sync/sync+restart)で比較して、最小の変更案を出して」(Docker Documentation)
- 「tsx watch と nodemon の使い分けを、監視対象(import外のファイル)観点で判断フローにして」(tsx)
まとめ:この章の“持ち帰り”🎁😊
- まずは tsx watch / Node watch でシンプルに回す💨 (tsx)
.envや設定ファイル、監視の細かい制御が欲しくなったら nodemon 🧰 (DigitalOcean)- Windows+Dockerで監視が怪しい時は、Compose Watch という選択肢が強い🧱 (Docker Documentation)
-Lは最終手段(便利だけどCPU注意)🔥 (DigitalOcean)
次の章(Compose Watch)に進むと、「保存したら勝手に反映」の世界が一気に完成します👀✨