Node.jsでコマンドラインから入力を受け付ける
Node.js CLIプログラムをインタラクティブにする方法
バージョン7以降のNode.jsは、まさにこれを行うためのreadline
モジュールを提供しています。`process.stdin`ストリームなどの読み取り可能なストリームから、一行ずつ入力を受け取ります。Node.jsプログラムの実行中は、これは端末入力です。
const readline = require('node:readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.question(`What's your name?`, name => {
console.log(`Hi ${name}!`);
rl.close();
});
このコードは、ユーザーの*名前*を尋ね、テキストが入力されてユーザーがEnterキーを押すと、挨拶を送信します。
question()
メソッドは、最初のパラメーター(質問)を表示し、ユーザー入力を待ちます。Enterキーが押されると、コールバック関数を呼び出します。
このコールバック関数では、readlineインターフェースを閉じます。
readline
は他にもいくつかのメソッドを提供しています。上記のリンク先のパッケージドキュメントで確認してください。
パスワードを要求する必要がある場合は、エコーバックしない方が良いでしょう。代わりに、`*`記号を表示します。
最も簡単な方法は、readline-sync
パッケージを使用することです。APIの点で非常によく似ており、これをそのまま処理します。
より完全で抽象的なソリューションは、Inquirer.jsパッケージによって提供されます。
`npm install inquirer`を使用してインストールできます。その後、上記のコードを次のように複製できます。
const inquirer = require('inquirer');
const questions = [
{
type: 'input',
name: 'name',
message: "What's your name?",
},
];
inquirer.prompt(questions).then(answers => {
console.log(`Hi ${answers.name}!`);
});
Inquirer.jsでは、複数の選択肢を尋ねたり、ラジオボタン、確認などを表示したりできます。
すべての選択肢、特にNode.jsが提供する組み込みの選択肢を知っておく価値はありますが、CLI入力を次のレベルに引き上げる予定がある場合は、Inquirer.jsが最適な選択肢です。