Error: Cannot find module 'ms' は、require や import で読み込もうとしたモジュール(パッケージやファイル)を、Node.js が見つけられなかったときのエラーです。 エラー文の '...' の形で、原因の系統が分かれます。

エラー文の '...' 何が見つからないか 多い原因
'ms'・'express'(名前だけ) npm のパッケージ npm install していない・別のフォルダーにある
'./utils'(./ で始まる) 自分のファイル パスの間違い・大文字小文字
'/home/.../app.js'(絶対パス) 実行しようとしたファイル 実行したフォルダーが違う・ビルドしていない
ERR_MODULE_NOT_FOUND ... '/x/src/math' ESM の import 先 拡張子(.js)を書いていない

確認環境:Node.js 22.22.2、npm(確認日 2026年10月11日)。以下のエラーはすべて実際に実行して確かめました。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Node.js Cannot find moduleの原因と直し方」

エラー文の読み方:Require stack

Error: Cannot find module 'ms'
Require stack:
- /srv/s4/nm/app.js
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/srv/s4/nm/app.js' ]
部分 意味
Cannot find module 'ms' 見つからなかったもの
Require stack: の一番上 その require を書いたファイル。ここから探し始めた
code: 'MODULE_NOT_FOUND' CommonJS(require)のとき。ESM(import)は ERR_MODULE_NOT_FOUND

Require stack の一番上のファイルを開き、その中の require('ms') を探すのが出発点です。stack が何行もあるときは、下から上に向かって「どのファイルが、どのファイルを読み込んだか」の順番です。

原因1:パッケージを npm install していない

$ node app.js
Error: Cannot find module 'ms'
$ npm install ms
$ node app.js
7200000
確認すること 方法
package.json の dependencies に入っているか 無ければ npm install パッケージ名
node_modules にあるか npm ls ms(無ければ (empty))
clone しただけではないか git では node_modules を管理しないので、clone 後に npm install

npm ls で、入っているかどうかが分かります。

$ npm ls ms
nm@1.0.0 /srv/s4/nm
`-- ms@2.1.3              ← 入っている
$ npm ls nope
nm@1.0.0 /srv/s4/nm
`-- (empty)               ← 入っていない

どこを探したかを確かめる

require.resolve("ms");          // '/srv/s4/nm/node_modules/ms/index.js'(見つかった場所)
require.resolve.paths("ms");    // 探す場所の一覧
// [ '/srv/s4/nm/node_modules', '/srv/s4/node_modules', '/srv/node_modules', '/node_modules' ]

Node.js は、require を書いたファイルのフォルダーから上へ順に node_modules を探します。 別のフォルダー(モノレポの別のパッケージ、ホームの node_modules など)に入れても見つかりません。

原因2:自分のファイルのパスが違う

(app2.js で require("./utils")、実際の場所は src/utils.js)
Error: Cannot find module './utils'
Require stack:
- /srv/s4/nm/app2.js

./ は、require を書いたファイルがあるフォルダーが起点です。実行したフォルダー(カレントディレクトリ)ではありません。require("./src/utils") に直すと動きました。

大文字小文字が違う

(ファイルは src/utils.js、require("./src/Utils"))
Error: Cannot find module './src/Utils'

Linux では大文字小文字を区別するため、見つかりませんでした。 Mac や Windows の通常の設定では、大文字小文字を区別しないことが多く、手元では動くのに、Linux のサーバー・Docker・CI でだけ落ちる、という形で出会います。ファイル名と require の綴りを完全に一致させます。

原因3:ESM(import)では拡張子が必須

(app8.mjs で import { mul } from "./src/m2")
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/srv/s4/nm/src/m2' imported from /srv/s4/nm/app8.mjs
Did you mean to import "./src/m2.js"?

import で自分のファイルを読み込むときは、.js まで書く必要があります(Node.js 公式ドキュメント「Mandatory file extensions」)。require では省略できたので、CommonJS から ESM に書き換えたときに出ます。確認環境では、Did you mean to import "./src/m2.js"? と正しい書き方が表示されました(.mjs のファイルを指定したときは、この案内は出ませんでした)。

書き方 require(CommonJS) import(ESM)
"./src/utils" 動く(.js を補う) エラー
"./src/utils.js" 動く 動く
"./lib"(フォルダーの index.js) 動く エラー(ERR_UNSUPPORTED_DIR_IMPORT。./lib/index.js と書く)

TypeScript で ESM を書くときも、出力される JavaScript のファイル名に合わせて .js を書きます(import { x } from "./utils.js")。

原因4:実行したフォルダー・ビルドの有無

$ cd /srv/s4 && node app.js
Error: Cannot find module '/srv/s4/app.js'          ← 実行したフォルダーに app.js が無い

$ node dist/index.js
Error: Cannot find module '/srv/s4/nm/dist/index.js' ← まだビルドしていない

絶対パスで表示されるときは、node に渡したファイル自体が無いという意味です。

状況 確認すること
実行したフォルダーが違う pwd で今いるフォルダー、package.json の場所
TypeScript・ビルドツール npm run build を先に実行したか、出力先(outDir)と node に渡したパスが合っているか
package.json の main・start "start": "node dist/index.js" のパスが正しいか

似たエラー:ファイルを読むときの ENOENT

(src/readcfg.js で fs.readFileSync("config.json")、ファイルは src/config.json)
Error: ENOENT: no such file or directory, open 'config.json'

require の ./ はファイルの場所が起点ですが、fs.readFileSync の相対パスは実行したフォルダーが起点です。ファイルの場所を起点にするなら、path.join(__dirname, "config.json")(ESM では new URL("./config.json", import.meta.url))で書きます。

Docker・CI で出るとき

状況 確認すること
コンテナの中で Cannot find module 'express' Dockerfile で npm install(npm ci)を実行しているか
ボリュームでソースをマウントしている ホストのフォルダーで、コンテナの node_modules が隠れていないか
CI でだけ失敗する npm ci を実行しているか、大文字小文字の違い(CI は Linux が多い)
devDependencies のパッケージ 本番用に npm ci --omit=dev で入れると、devDependencies は入らない

確認の手順(チェックリスト)

順番 確認すること 方法
1 見つからないもの '名前' はパッケージ、'./...' は自分のファイル、絶対パスは実行したファイル
2 どこで読み込んだか Require stack の一番上
3 パッケージが入っているか npm ls 名前、無ければ npm install
4 パスと大文字小文字 ./ はファイルの場所が起点。Linux は大文字小文字を区別
5 ESM なら拡張子 import ... from "./utils.js"
6 実行の場所・ビルド pwd、npm run build、dist のパス

よくある質問

Q. node_modules を消して入れ直すと直りますか。 A. node_modules が壊れている(途中で止まったインストールなど)場合は直ります。rm -rf node_modules && npm install(lock ファイルどおりに入れるなら npm ci)です。ただし、パスや拡張子の間違いは直らないので、上の原因を先に確かめます。

Q. グローバルに入れたパッケージを require できません。 A. npm install -g で入れたものは、コマンドとして使うためのもので、通常は require の探す場所に入っていません(require.resolve.paths で確かめられます)。プロジェクトで使うものは、プロジェクトのフォルダーで npm install します。

まとめ

  • '名前' はパッケージ、'./...' は自分のファイル、絶対パスは実行したファイルが見つからない
  • Require stack の一番上が、その require を書いたファイル
  • パッケージは npm ls で確認し npm install。探すのはファイルのフォルダーから上の node_modules
  • Linux は大文字小文字を区別する。手元で動いて CI で落ちる典型
  • ESM の import は拡張子が必須。Did you mean to import ...? に従う
  • fs の相対パスは実行したフォルダーが起点(ENOENT)。__dirname を使う

参考・出典

確認日はいずれも 2026年10月11日です。

  • Node.js ドキュメント「Modules: ECMAScript modules」(Mandatory file extensions):https://nodejs.org/api/esm.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Node.js Cannot find moduleの原因と直し方」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?