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が最適な選択肢です。

読書時間
2分
貢献する
このページを編集