Node.jsでユーザーと対話する:コンソール入出力とreadlineモジュールの使い方

2024-05-21

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();
      });
    });
    

    このコードの説明

    1. require('readline').createInterface() で、readline モジュールのインターフェースを作成します。
    2. 作成したインターフェースに、標準入力と標準出力を設定します。
    3. readline.question() で、ユーザーに「名前を入力してください: 」というプロンプトを表示し、入力された名前を受け取ります。
    4. 年齢を受け取った後、parseInt() 関数を使って文字列を数値に変換します。
    5. 変換された年齢が数字かどうかを isNaN() 関数を使って検証します。数字でない場合は、エラーメッセージを出力してプログラムを終了します。
    6. 検証に合格した場合は、入力された名前と年齢を使って挨拶のメッセージを出力します。
    7. readline.close() で、readline インターフェースを閉じます。

    このコードをどのように実行するか

    1. このコードを .js ファイルに保存します。
    2. ターミナルで、以下のコマンドを実行してコードを実行します。
    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


          Node.js で Express フレームワークを使って Cookie を設定する方法

          Cookie は、Web アプリケーションとクライアントブラウザ間でデータを保存するために使用される小さなデータです。ログイン情報、ユーザー設定、トラッキングデータなどを保存するために使用できます。Express は、Node. js で最も人気のある Web フレームワークの 1 つであり、Cookie を設定するための使いやすい機能を提供しています。...


          Node.js「Error: No default engine was specified and no extension was provided」エラー:解決策のベストプラクティスとトラブルシューティング

          解決策は以下の通りです。拡張子を指定するモジュールの拡張子を明示的に指定することで、Node. js は適切なエンジンを選択することができます。package. json ファイルの "engines" フィールドに、プロジェクトで使用されるNode...


          Node.jsでファイル削除を極める!ディレクトリ内のファイルを効率的に削除する方法

          Node. jsでディレクトリ内のすべてのファイルを削除したいけど、ディレクトリ自体は残しておきたい場合は、以下の2つの方法があります。fs モジュールをインポートします。fs. readdirSync を使用して、削除したいディレクトリ内のすべてのファイル名のリストを取得します。...


          【Node.js初心者向け】「Error: ENOENT: no such file or directory」エラーを完全解決!

          Node. jsでコードを実行中に「Error: ENOENT: no such file or directory」エラーが発生すると、ファイルやディレクトリが存在しないことを意味します。これは、コードが期待する場所にあるはずのファイルやディレクトリが見つからないため、処理が中断されます。...


          npm競合でプロジェクトが止まる前に! 原因と解決策をわかりやすく解説

          Node. js プロジェクトで npm を使用する場合、package. json と package-lock. json という 2 つの重要なファイルが生成されます。package. json は、プロジェクトに必要な依存関係とそのバージョンを宣言します。...