MeWrite Docs

ENOENT: no such file or directory

ファイルまたはディレクトリが見つからない場合に発生するNode.jsエラー

概要

ENOENT は “Error NO ENTry” の略で、指定されたパスにファイルまたはディレクトリが存在しない場合に発生するエラーです。Node.js のファイルシステム操作(fs モジュール)で最も頻繁に遭遇するエラーの一つです。

エラーメッセージ

Error: ENOENT: no such file or directory, open '/path/to/file.txt'
Error: ENOENT: no such file or directory, stat '/path/to/directory'

原因

  1. ファイルパスの誤り: タイプミスや相対パス・絶対パスの混同
  2. ファイルが存在しない: 期待するファイルがまだ作成されていない
  3. 作業ディレクトリの違い: process.cwd() が想定と異なる
  4. 権限の問題: ファイルは存在するがアクセス権がない(この場合は EACCES)

解決策

1. ファイルの存在確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const fs = require('fs');
const path = require('path');

const filePath = path.join(__dirname, 'data.json');

// 同期的に確認
if (fs.existsSync(filePath)) {
  const data = fs.readFileSync(filePath, 'utf8');
  console.log(data);
} else {
  console.error('ファイルが見つかりません:', filePath);
}

2. try-catch でエラーハンドリング

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
const fs = require('fs').promises;

async function readFile(filePath) {
  try {
    const data = await fs.readFile(filePath, 'utf8');
    return data;
  } catch (error) {
    if (error.code === 'ENOENT') {
      console.error('ファイルが見つかりません:', filePath);
      return null;
    }
    throw error;
  }
}

3. 絶対パスを使用する

1
2
3
4
5
const path = require('path');

// 相対パスではなく絶対パスを使用
const filePath = path.resolve(__dirname, '../config/settings.json');
console.log('読み込むファイル:', filePath);

4. ディレクトリを自動作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
const fs = require('fs');
const path = require('path');

function ensureDirectoryExists(filePath) {
  const dir = path.dirname(filePath);
  if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir, { recursive: true });
  }
}

const outputPath = './output/data/result.json';
ensureDirectoryExists(outputPath);
fs.writeFileSync(outputPath, JSON.stringify({ success: true }));

Node.js の他のエラー

最終更新: 2025-12-08