Node.jsでユーザーと対話する:コンソール入出力とreadlineモジュールの使い方
Node.js コンソールから値を対話的に読み込む
process.stdin
は、Node.jsプロセスへの標準入力ストリームを表すオブジェクトです。このオブジェクトを使用して、ユーザーがコンソールに入力したデータをストリームとして読み取ることができます。
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
readline.question('名前を入力してください: ', (name) => {
console.log(`こんにちは、${name} さん!`);
readline.close();
});
このコードは、ユーザーに「名前を入力してください: 」というプロンプトを表示し、入力された名前を受け取ります。その後、入力された名前を使って挨拶のメッセージを出力し、プログラムを終了します。
readline
モジュールは、process.stdin
をより使いやすくするためのラッパーモジュールです。このモジュールを使用すると、行単位で入力を読み取ったり、プロンプトを表示したり、入力を検証したりすることができます。
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
readline.question('年齢を入力してください: ', (age) => {
age = parseInt(age);
if (isNaN(age)) {
console.error('年齢は数字を入力してください');
return;
}
if (age < 0) {
console.error('年齢は0以上を入力してください');
return;
}
console.log(`あなたは ${age} 歳ですね。`);
readline.close();
});
補足
- 上記のコード例では、同期的に値を読み込んでいますが、非同期的に読み込むこともできます。
readline
モジュールには、他にも様々な機能があります。詳細はドキュメントを参照してください。- Node.js 16.x 以降では、
prompt
モジュールを使用する代わりに、readline
モジュールを使用してプロンプトを表示することができます。
Node.js コンソールから値を対話的に読み込む - サンプルコード
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
readline.question('名前を入力してください: ', (name) => {
readline.question('年齢を入力してください: ', (age) => {
age = parseInt(age);
if (isNaN(age)) {
console.error('年齢は数字を入力してください');
return;
}
if (age < 0) {
console.error('年齢は0以上を入力してください');
return;
}
console.log(`こんにちは、${name} さん! あなたは ${age} 歳ですね。`);
readline.close();
});
});
このコードの説明
require('readline').createInterface()
で、readline
モジュールのインターフェースを作成します。- 作成したインターフェースに、標準入力と標準出力を設定します。
readline.question()
で、ユーザーに「名前を入力してください: 」というプロンプトを表示し、入力された名前を受け取ります。- 年齢を受け取った後、
parseInt()
関数を使って文字列を数値に変換します。 - 変換された年齢が数字かどうかを
isNaN()
関数を使って検証します。数字でない場合は、エラーメッセージを出力してプログラムを終了します。 - 検証に合格した場合は、入力された名前と年齢を使って挨拶のメッセージを出力します。
readline.close()
で、readline
インターフェースを閉じます。
このコードをどのように実行するか
- このコードを
.js
ファイルに保存します。 - ターミナルで、以下のコマンドを実行してコードを実行します。
node <ファイル名>.js
例
node example.js
実行結果
名前を入力してください: 田中太郎
年齢を入力してください: 30
こんにちは、田中太郎 さん! あなたは 30 歳ですね。
このサンプルコードは、Node.jsコンソールから値を対話的に読み込む方法を理解するための基本的な例です。実際のプログラムでは、このコードを拡張して、より複雑な処理を行うことができます。
Node.js コンソールから値を対話的に読み込む - その他の方法
prompt
モジュールは、Node.js 16.x以降で導入された新しいモジュールで、readline
モジュールよりもシンプルで使いやすいプロンプト機能を提供します。
const prompt = require('prompt');
(async () => {
const { name } = await prompt({
name: '名前を入力してください: ',
required: true
});
const { age } = await prompt({
name: '年齢を入力してください: ',
validate: (value) => {
const age = parseInt(value);
if (isNaN(age)) {
return '年齢は数字を入力してください';
}
if (age < 0) {
return '年齢は0以上を入力してください';
}
return true;
}
});
console.log(`こんにちは、${name} さん! あなたは ${age} 歳ですね。`);
})();
このコードは、prompt
モジュールを使って、ユーザーに「名前を入力してください: 」と「年齢を入力してください: 」というプロンプトを表示し、入力された名前と年齢を受け取ります。
inquirer
モジュールは、prompt
モジュールよりも多くの機能を提供するプロンプトライブラリです。チェックボックス、ラジオボタン、リストなど、様々なタイプのプロンプトを作成することができます。
const inquirer = require('inquirer');
(async () => {
const { name } = await inquirer.prompt({
type: 'input',
name: 'name',
message: '名前を入力してください: '
});
const { age } = await inquirer.prompt({
type: 'number',
name: 'age',
message: '年齢を入力してください: ',
validate: (value) => {
if (value < 0) {
return '年齢は0以上を入力してください';
}
return true;
}
});
console.log(`こんにちは、${name} さん! あなたは ${age} 歳ですね。`);
})();
Webブラウザを使用する
Node.jsアプリケーションでWebブラウザを使用する場合は、HTMLとJavaScriptを使ってプロンプトを作成することができます。
<!DOCTYPE html>
<html>
<head>
<title>Node.js コンソールから値を読み込む</title>
</head>
<body>
<input type="text" id="name" placeholder="名前を入力してください">
<button onclick="getName()">名前を取得</button>
<input type="number" id="age" placeholder="年齢を入力してください">
<button onclick="getAge()">年齢を取得</button>
<script>
function getName() {
const name = document.getElementById('name').value;
console.log(`名前: ${name}`);
}
function getAge() {
const age = parseInt(document.getElementById('age').value);
console.log(`年齢: ${age}`);
}
</script>
</body>
</html>
どの方法を選択するかは、開発者の好みやアプリケーションの要件によって異なります。
- シンプルで使いやすいプロンプトが必要な場合は、
prompt
モジュールを使用するのがおすすめです。 - より多くの機能が必要な場合は、
inquirer
モジュールを使用するのがおすすめです。
node.js console