JavaScript: ファイルへの書き込み

2026年2月15日
1 分

テキストをファイルに書き込む、3つの方法のメモ。

ひとつめ、非同期処理。node:fswriteFile 関数を使う。

const fs = require('node:fs')
const { parseArgs } = require('node:util')


const { values, positionals } = parseArgs({
    allowPositionals: true,
    options: {
        message: {
            type: 'string',
            short: 'm',
            default: 'Hello, world!',
        },
    },
})

const writefile = (filePath, message) => {
    fs.writeFile(filePath, message, (err) => {
        if (err) {
            console.error('Error writing file: ', err)
        }
    })
}

const filePath = positionals[0]
const message = values.message
writefile(filePath, message)

実行例:

$ node writefile_async.js hello1.txt -m "Hello, Node.js!"
$ cat hello1.txt
Hello, Node.js!

ふたつめ、非同期処理という点では同じだけど、Promise 版。node:fs/promiseswriteFile 関数と async / await 構文を使う。

const fs = require('node:fs/promises')

// 中略

const writefile = async (filePath, message) => {
    try {
        await fs.writeFile(filePath, message)
    } catch (err) {
        console.error('Error writing file: ', err)
    }
}

モジュールの読み込みと writefile の中以外は同じなので省略。同じように実行すれば、同じ結果が得られる。

$ node writefile_promise.js hello2.txt -m "Hello, Node.js!"
$ cat hello2.txt
Hello, Node.js!

さいごのみっつめ、同期処理版。node:fswriteFileSync 関数を使う。違うところのみ載せる。

const writefile = (filePath, message) => {
    try {
        fs.writeFileSync(filePath, message)
    } catch (err) {
        console.error('Error writing file: ', err)
    }
}

実行例:

$ node writefile_sync.js hello3.txt -m "Hello, Node.js!"
$ cat hello3.txt
Hello, Node.js!

WEBアプリで使うなら Promise 版、CLIスクリプトなら同期処理版がよさそうに思える。