MeWrite Docs

Error: Cannot find module

モジュールが見つからない場合に発生するエラー

概要

Error: Cannot find module は、Node.js でモジュールを読み込もうとした際に、指定されたモジュールが見つからない場合に発生するエラーです。

エラーメッセージ

Error: Cannot find module 'express'
Require stack:
- /app/server.js
Error: Cannot find module './utils'
Error: Cannot find module '@/components/Button'

原因

  1. パッケージ未インストール: npm install を実行していない
  2. パスの間違い: 相対パスやエイリアスが正しくない
  3. ファイル名の間違い: 大文字小文字の違いや拡張子
  4. node_modules の破損: キャッシュやロックファイルの問題
  5. package.json の不整合: 依存関係が正しく記載されていない

解決策

1. パッケージをインストール

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# パッケージがインストールされているか確認
npm list express

# パッケージをインストール
npm install express

# すべての依存関係をインストール
npm install

# 本番用依存関係のみインストール
npm install --production

2. 相対パスを確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// ファイル構造
// src/
//   utils/
//     helper.js
//   app.js

// app.js から helper.js を読み込む
// ❌ 間違ったパス
const helper = require('./helper');
const helper = require('helper');

// ✅ 正しいパス
const helper = require('./utils/helper');

3. ファイル名・拡張子を確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// ファイル: utils.js

// ❌ 大文字小文字の違い(Linuxでエラー)
const utils = require('./Utils');

// ✅ 正しいファイル名
const utils = require('./utils');

// 拡張子は省略可能(.js, .json, .node)
const utils = require('./utils');      // utils.js を読み込む
const config = require('./config');    // config.json を読み込む

4. node_modules を再インストール

1
2
3
4
5
6
7
8
9
# node_modules とロックファイルを削除
rm -rf node_modules
rm package-lock.json  # または yarn.lock

# npm キャッシュをクリア
npm cache clean --force

# 再インストール
npm install

5. パスエイリアスの設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// jsconfig.json または tsconfig.json
{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "@/*": ["src/*"],
            "@components/*": ["src/components/*"]
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Node.js で module-alias を使用
// package.json
{
    "_moduleAliases": {
        "@": "./src",
        "@components": "./src/components"
    }
}

// エントリーポイントで登録
require('module-alias/register');
const Button = require('@components/Button');

6. ESM (ES Modules) の問題

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// package.json に "type": "module" がある場合
// ❌ require は使えない
const express = require('express');

// ✅ import を使用
import express from 'express';

// ✅ または .cjs 拡張子を使用
// config.cjs
const config = require('./config.json');
module.exports = config;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// ESM で JSON を読み込む
// ❌ ESM では直接 require できない
const config = require('./config.json');

// ✅ import assertion を使用(Node.js 17.5+)
import config from './config.json' assert { type: 'json' };

// ✅ fs で読み込む
import { readFileSync } from 'fs';
const config = JSON.parse(readFileSync('./config.json', 'utf-8'));

7. TypeScript の設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// tsconfig.json
{
    "compilerOptions": {
        "moduleResolution": "node",
        "esModuleInterop": true,
        "resolveJsonModule": true,
        "baseUrl": ".",
        "paths": {
            "@/*": ["src/*"]
        }
    }
}
1
2
3
4
5
# ts-node で paths を解決
npm install tsconfig-paths

# 実行時に登録
ts-node -r tsconfig-paths/register src/app.ts

8. ワークスペースの問題

1
2
3
4
5
6
7
8
# monorepo でのリンク
npm link ../shared-package

# lerna を使用
npx lerna bootstrap

# yarn workspaces
yarn install

9. グローバルモジュールの問題

1
2
3
4
5
6
7
8
# グローバルインストールされたモジュールはプロジェクトで使えない
npm install -g typescript  # これでは require できない

# ローカルにインストール
npm install typescript

# または npx で実行
npx typescript --version

デバッグのコツ

モジュール解決のデバッグ

1
2
3
4
5
6
7
8
// モジュールのパスを確認
console.log(require.resolve('express'));

// require.main を確認
console.log(require.main.filename);

// モジュールの検索パスを確認
console.log(module.paths);

環境変数で詳細ログ

1
2
# モジュール解決の詳細を表示
NODE_DEBUG=module node app.js

package.json の確認

1
2
3
4
5
6
7
8
# 依存関係の一覧
npm list

# 依存関係のツリー
npm list --all

# 不足している依存関係
npm ls --all 2>&1 | grep "UNMET"

Node.js の他のエラー

最終更新: 2025-12-08