Node.js fs モジュール

Java FileNode.js 組み込みモジュール


fs (File System) モジュールは Node.js に組み込まれたコアモジュールで、ファイルシステムと対話するために使用されます。

fs モジュールは、ファイルの読み取り、書き込み、削除などの操作を処理する一連のメソッドを提供します。

fs モジュールは Node.js 開発で最もよく使われるモジュールの一つで、特にローカルファイルを扱う場面で使用されます。


fs モジュールの使い方?

fs モジュールを使用するには、まずインポートする必要があります:

const fs = require('fs');

Node.js 14 以降では、ES6 の import 構文も使用できます:

例

const fs = require('fs');          // CommonJS 方式
// または
import fs from 'fs';              // ES Module 方式

fs モジュールの主なメソッド

1. ファイル読み込み

ファイルの同期読み込み (readFileSync)

例

const data = fs.readFileSync('example.txt', 'utf8');
console.log(data);
  • 'example.txt':読み込むファイルのパス
  • 'utf8':エンコーディング形式を指定(省略可)
  • 同期メソッドはファイルの読み込みが完了するまでコードの実行をブロックします

ファイルの非同期読み込み (readFile)

例

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});
  • 非同期メソッドはコードの実行をブロックしません
  • コールバック関数で結果を処理します
  • エラーファーストコールバック(err-first callback)は Node.js の一般的なパターンです

2. ファイル書き込み

ファイルの同期書き込み (writeFileSync)

例

fs.writeFileSync('output.txt', 'Hello, Node.js!');

ファイルの非同期書き込み (writeFile)

例

fs.writeFile('output.txt', 'Hello, Node.js!', (err) => {
  if (err) throw err;
  console.log('ファイルが保存されました');
});

3. ファイル追加

ファイルの同期追加 (appendFileSync)

例

fs.appendFileSync('log.txt', '新しいログ内容\n');

ファイルの非同期追加 (appendFile)

例

fs.appendFile('log.txt', '新しいログ内容\n', (err) => {
  if (err) throw err;
});

4. ファイル状態の確認 (stat)

例

fs.stat('example.txt', (err, stats) => {
  if (err) throw err;
  console.log(`ファイルサイズ: ${stats.size} bytes`);
  console.log(`作成時間: ${stats.birthtime}`);
  console.log(`ファイルかどうか: ${stats.isFile()}`);
  console.log(`ディレクトリかどうか: ${stats.isDirectory()}`);
});

5. ファイル削除

ファイルの同期削除 (unlinkSync)

例

fs.unlinkSync('fileToDelete.txt');

ファイルの非同期削除 (unlink)

例

fs.unlink('fileToDelete.txt', (err) => {
  if (err) throw err;
  console.log('ファイルが削除されました');
});

Promise と async/await のサポート

Node.js 10+ は fs/promises モジュールを提供し、Promise スタイルの API をサポートしています:

例

const fs = require('fs').promises;

async function readFile() {
  try {
    const data = await fs.readFile('example.txt', 'utf8');
    console.log(data);
  } catch (err) {
    console.error('ファイル読み込みエラー:', err);
  }
}

readFile();

ストリームファイル操作

大きなファイルには、ストリーム(Stream)を使用するとパフォーマンスを向上できます:

読み取りストリーム

例

const readStream = fs.createReadStream('largeFile.txt', 'utf8');

readStream.on('data', (chunk) => {
  console.log('データを受信:', chunk.length);
});

readStream.on('end', () => {
  console.log('読み取り完了');
});

readStream.on('error', (err) => {
  console.error('読み取りエラー:', err);
});

書き込みストリーム

例

const writeStream = fs.createWriteStream('output.txt');

writeStream.write('1行目のデータ\n');
writeStream.write('2行目のデータ\n');
writeStream.end('最終行のデータ');

writeStream.on('finish', () => {
  console.log('書き込み完了');
});

writeStream.on('error', (err) => {
  console.error('書き込みエラー:', err);
});

ディレクトリ操作

ディレクトリの作成

例

fs.mkdir('newFolder', (err) => {
  if (err) throw err;
  console.log('ディレクトリが作成されました');
});

ディレクトリ内容の読み取り

例

fs.readdir('./', (err, files) => {
  if (err) throw err;
  console.log('現在のディレクトリ内容:', files);
});

ディレクトリの削除

例

fs.rmdir('emptyFolder', (err) => {
  if (err) throw err;
  console.log('ディレクトリが削除されました');
});

ベストプラクティス

  1. 非同期メソッドを優先して使用する:イベントループのブロックを避ける
  2. エラー処理:起こり得るエラーを常に処理する
  3. ストリームを使用して大きなファイルを処理する:パフォーマンスを向上する
  4. パス処理:path モジュールを使用してクロスプラットフォームのパス問題を処理する
  5. 権限チェック:操作前にファイル/ディレクトリの権限を確認する

実践的な応用例

ファイルコピー機能

例

const fs = require('fs');

function copyFile(source, target, cb) {
  const readStream = fs.createReadStream(source);
  const writeStream = fs.createWriteStream(target);

  readStream.on('error', cb);
  writeStream.on('error', cb);
 
  readStream.on('close', () => {
    writeStream.end();
    cb(null);
  });
 
  readStream.pipe(writeStream);
}

copyFile('source.txt', 'target.txt', (err) => {
  if (err) return console.error('コピー失敗:', err);
  console.log('ファイルのコピーが成功しました');
});

Java FileNode.js 組み込みモジュール

その他の拡張