Node.js v5のリリース案を見ていたところ、fs.readFile()等の第一引数でファイル記述子(file descriptor)がサポートされるようになるようだ。便利極まりない/dev/stdinなどがない環境(Windowsとか)で標準入出力の読み込みが簡単になるのかなと想像している。

今までは標準入力を一気読みしようとするとこのようなコードを書く必要があった。

var fs = require("fs");

var fd = process.stdin.fd;
var len = fs.fstatSync(fd).size;
var buf = new Buffer(len);
var input = buf.toString("utf8", 0, fs.readSync(fd, buf, 0, len, 0));

もちろんこれと同じことをやってくれる便利パッケージがいっぱいあるので、それらのうちのどれかを使えば良いという話ではある。しかし/dev/stdinを読むくらい手軽に読む手段が標準モジュールでできるときっとうれしいはずだ。

var fs = require("fs");

var input = fs.readFileSync(process.stdin.fd, "utf8");

ソースを読んだ限りでは、ファイル記述子サポートの実装は上記コードと同じように見えた。そのため、このような簡単なコードで標準入力を一気に読めるという風に理解しているが、実際にはどうなるのだろう。こうなったらとてもうれしい。

追記

Node.js v5がリリースされたので、上記コードで簡単な確認を行ったところ、ちゃんとWindowsで標準入力が一気に読めた。標準入力の一気読みには今後これで良いようだ。