fs/promisesモジュールでファイルを読み書きし、pathモジュールのおかげで信頼できるパスを組み立てましょう。
このレッスンを Kodokon で開くブラウザでは、JavaScriptはディスク上のファイルに触れることを許されていません。セキュリティの問題です。一方でNodeはあなたのマシン上で直接動き、fsモジュール(file system)のおかげでファイルを読み書きできます。私たちはそのモダンな版、fs/promisesを使います。そのすべての関数はプロミスを返します。JavaScript講座で見たように、awaitで待つ方法はもう知っていますね。インポートのnode:という接頭辞に注目してください。これは、モジュールがnode_modulesからではなくNode自身から来ていることを明確にします。そして良い知らせです。ESモジュールでは、awaitは囲む関数なしで、ファイルのレベルで直接動きます。
import { writeFile } from "node:fs/promises";
await writeFile("notes.txt", "First note\n");
console.log("File created!");読み取りも、readFileで同じ理屈です。その第二パラメーターが重要です。utf8はエンコーディング、つまりディスクに保存されたバイトを読めるテキストに翻訳する方法を指定します。省略すると、Nodeは文字列の代わりにBufferオブジェクト、つまり生のバイトを返します。
import { readFile } from "node:fs/promises";
const text = await readFile("notes.txt", "utf8");
console.log(text);パスの話をしましょう。相対パス(notes.txt、data/log.txt)は現在のフォルダから始まります。絶対パス(C:\...や/home/...)はディスクのルートから始まります。よくある罠があります。Windowsはフォルダを\で区切り、macOSとLinuxは/で区切ります。pathモジュールがこの問題を解決します。path.joinは、どんなシステムでも正しい区切り文字で部品を組み立てます。フォルダを作るmkdirと組み合わせてみましょう。
import path from "node:path";
import { mkdir, writeFile } from "node:fs/promises";
const file = path.join("data", "log.txt");
await mkdir("data", { recursive: true });
await writeFile(file, "First log\n");
console.log("Written to:", file);