fs(ファイル操作)

Node.jsの「コアモジュールの理解」における「fs(File System)」モジュールについて、以下のとおり詳しく説明します。


fsモジュールとは

Node.jsのfsモジュールは、ファイルやディレクトリを操作するための標準コアモジュールです。外部ライブラリを追加することなく、ファイルの読み書き、作成、削除、ディレクトリの管理などが可能です。

このモジュールは同期(blocking)および非同期(non-blocking)の両方のAPIを提供しています。


主な機能と使用例

1. ファイルの読み込み

非同期版

javascript
const fs = require('fs'); fs.readFile('example.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); });

同期版

javascript
const fs = require('fs'); const data = fs.readFileSync('example.txt', 'utf8'); console.log(data);

2. ファイルの書き込み

非同期版

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

同期版

javascript
fs.writeFileSync('output.txt', 'Hello, world!');

3. ファイルの追記

javascript
fs.appendFile('log.txt', '追加ログ\n', (err) => { if (err) throw err; });

4. ファイルの削除

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

5. ディレクトリの作成・削除

javascript
// ディレクトリ作成 fs.mkdir('new-folder', (err) => { if (err) throw err; }); // ディレクトリ削除 fs.rmdir('new-folder', (err) => { if (err) throw err; });

6. ファイルやディレクトリの存在確認(非推奨:fs.exists)

javascript
fs.access('example.txt', fs.constants.F_OK, (err) => { console.log(err ? '存在しません' : '存在します'); });

同期 vs 非同期の使い分け

  • 非同期関数はNode.jsのイベントループをブロックせず、I/O操作中に他の処理が実行可能。

  • 同期関数はブロックされるため、小規模なスクリプトや初期設定時に限定して使うのが一般的。


補足:PromiseベースAPI(fs/promises)

Node.js v10以降では、fs/promisesモジュールを使ってasync/await構文でファイル操作が可能です。

javascript
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();

まとめ

操作内容 関数名
ファイル読込 fs.readFile
ファイル書込 fs.writeFile
ファイル追記 fs.appendFile
ファイル削除 fs.unlink
ディレクトリ作成 fs.mkdir
ディレクトリ削除 fs.rmdir
存在確認 fs.access

fsモジュールはNode.jsの基盤となるファイル操作機能を提供し、バックエンド開発では非常に頻繁に利用されます。非同期操作を基本としつつ、用途に応じて同期・Promise APIも使い分けることが重要です。

ChatGPT4o 生成日:2025/06/25