Node.js でキー入力をシンプルに取得したい、という状況があり、以下の標準モジュールを使った簡素なプログラムを作ってみました。
●Readline | Node.js v22.3.0 Documentation
https://nodejs.org/api/readline.html
今回の内容の元にするサンプルプログラム
今回の内容の元にするプログラムは、上記の公式ページ内に書かれているものを使います。
具体的には、以下のものです。
const readline = require('node:readline');
const { stdin: input, stdout: output } = require('node:process');
const rl = readline.createInterface({ input, output });
rl.question('What do you think of Node.js? ', (answer) => {
// TODO: Log the answer in a database
console.log(`Thank you for your valuable feedback: ${answer}`);
rl.close();
});
処理の流れとしては、入出力に関する準備的な処理を行い、その後はユーザーからのキー入力を待ち受けます。
そして、ユーザーによるキー入力があったら、ユーザーに入力された内容を出力として返します。
サンプルを書きかえる
上記の内容を書きかえて、以下の内容のものを作ってみました。
const readline = require('node:readline');
const { stdin: input, stdout: output } = require('node:process');
const rl = readline.createInterface({ input, output });
rl.question('数字を入力してください (0-9): ', (answer) => {
const number = parseInt(answer, 10);
if (!isNaN(number) && number >= 0 && number <= 9) {
console.log(`入力された数字は ${number} です`);
} else {
console.log('無効な入力です。0から9の数字を入力してください。');
}
rl.close();
});
大まかな流れは参照した内容と同じです。
違う部分は数字の 0 から 9 のみ受け付けるような処理にしているところです。
入力された内容が数字であり、なおかつ 0 以上 9 以下の値なら、入力された数字が何であったかを返します。一方で、それ以外の入力が行われた場合は、0 から 9 までの数字のいずれかを入力するように促すようにしています。
作ったプログラムの動作確認
上記を実行し、アルファベットや数字を入力してみました。
そして以下のように、意図したとおりの動作になっているのを確認できました。