Nodejs についに file.readLines() が組み込まれました

ログ ファイルの解析など、大きなテキスト ファイルを扱う場合、効率とパフォーマンス上の理由から、すべてをメモリに読み込むのではなく、コンテンツを 1 行ずつ読み込み/反復処理することが常に推奨されます。Nodejs では、1 行ずつ読み込む方法は、日常的なユーザーの観点からはハッキーで低レベルすぎるように見えるため、常に面倒でした。ただし、最新バージョンの v18.11.0 にマージされた PR のおかげで、FileHandle.prototype.readLines が組み込まれ、非常に便利に使用できるようになりました。

昔ながらの面倒な方法

import fs from 'node:fs';
import readline from 'node:readline';

const fileStream = fs.createReadStream('input.txt');

const rl = readline.createInterface({
  input: fileStream,
  crlfDelay: Infinity
});

for await (const line of rl) {
  console.log(`Line from file: ${line}`);
}

今では便利な方法

import { open } from 'node:fs/promises';

const file = await open('input.txt');
for await (const line of file.readLines()) {
  console.log(`Line from file: ${line}`);
}

PS: このメソッドを PR のコア Node.js ライブラリに組み込むべきかどうかについては、いくつかの議論と討論がありました。エンド ユーザーの観点からは、これは素晴らしい追加機能であり、大きなテキスト ファイルの処理に Node.js をより便利に使用できるようになり、readline モジュールから方法を覚えるために必要な精神的負担が軽減され、readline のラッパー メソッドにすぎないにもかかわらず、コード行数が 50% 削減されると思います。

参考文献

nodejs