愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

Node.jsひみつの花園、readline module

Nodeの公式docにはだいたいの標準モジュールのドキュメントがそろっているのだけど、なぜかreadlineという名前のモジュールだけはundocumented。-> http://nodejs.org/docs/v0.4.4/api/readline.html

中身としては、readlineのない環境(?)で簡易なGNU Readlineの機能を提供するのと、input streamから一行読み込んで何かするという枠組みの提供、っぽい。

Nodeでちょっとした機能付きの(んで標準replとは別の)replを作りたいときってどうするんかいな?と前から思ってて、Replicaを作る段になって「これ使えそう」と手探りで調べた内容をメモ。ソース見ただけともいう。

var readline = require("readline");

// First argument (input) should be Readable Stream, second (output) should be Writable Stream
// here, input -> STDIN, output -> STDOUT
var repl = readline.createInterface(process.stdin, process.stdout);

// set prompt string
repl.setPrompt("X / _ / X ");

// print prompt string to output stream
repl.prompt();

// get input stream
var istream = repl.input;

// get output stream
var ostream = repl.output;

// called when read one-line-input from input stream
repl.on("line", function(line) {
});

// called when closed
repl.on("close", function() {
});

他にもインタフェースあったような気がするけど、とりあえずこれだけで十分。ちょっと面白いのは、createInterfaceに指定するinput, outputが別にstdin, stdoutでなくてもいい件。まあ、inputがstdinじゃなかったらそもそもReadline機能の意味があまりないわけだが…


コードも短いしドキュメントないからdeprecatedなモジュールなんじゃね?と思う人もいるかもしれないけど、標準のrepl moduleが確かこれに依存してたのでそんなに簡単には消えない…はず。ryanに直接聞いたとかじゃないから、確証はないけど。