Node.jsプログラミング:stdin操作をマスターして自由自在なデータ処理を実現

2024-07-27

Node.js で stdin を行ごとに読み込む方法

以下では、Node.js で stdin を行ごとに読み込む 2 つの一般的な方法について説明します。

readline モジュールを使用する

  1. readline モジュールをインポートします。
const readline = require('readline');
  1. readline.createInterface() 関数を使用して、readline インターフェースを作成します。
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
  1. rl.on('line', (line) => {}) イベントリスナーを使用して、各行の読み取り時に実行されるコールバック関数を定義します。
rl.on('line', (line) => {
  console.log(line);
});
  1. rl.prompt() メソッドを使用して、ユーザーに入力プロンプトを表示します。
rl.prompt();
  1. rl.close() メソッドを使用して、readline インターフェースを閉じます。
rl.close();

上記の例では、各行の読み取り時にコンソールに出力されます。必要に応じて、このコールバック関数内でデータを処理したり、ファイルに保存したりすることができます。

it ストリームを使用する

it ストリームは、Node.js のコアモジュールである stream モジュールで提供される一種の読み取り専用ストリームです。stdin を行ごとに読み込むために使用できます。この方法を使用するには、以下の手順に従います。

const stream = require('stream');
const it = stream.PassThrough();

process.stdin.pipe(it);

it.on('data', (chunk) => {
  const line = chunk.toString();
  console.log(line);
});

Node.js で stdin を行ごとに読み込むには、readline モジュールまたは it ストリームを使用することができます。どちらの方法もそれぞれ長所と短所があり、ニーズに応じて適切な方法を選択することができます。

  • readline モジュール:
    • 長所: 使いやすく、イベントベースの API を提供しているため、複雑な処理に適している。
    • 短所: it ストリームよりも若干オーバーヘッドが大きい。
  • it ストリーム:
    • 長所: readline モジュールよりも軽量で効率的。
    • 短所: イベントベースの API ではないため、複雑な処理には readline モジュールほど適していない。



const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', (line) => {
  console.log(line);
});

rl.prompt();

rl.close();

このコードを実行すると、以下のようになります。

$ node example.js
一行目を入力してください:
一行目が入力されました
二行目を入力してください:
二行目が入力されました
...
const stream = require('stream');
const it = stream.PassThrough();

process.stdin.pipe(it);

it.on('data', (chunk) => {
  const line = chunk.toString();
  console.log(line);
});

このコードを実行すると、readline モジュールを使用した例と同様の結果になります。

説明

これらの例では、stdin から入力された各行をコンソールに出力するシンプルなコールバック関数を使用しています。必要に応じて、このコールバック関数内でデータを処理したり、ファイルに保存したりすることができます。

  • readline モジュールを使用する例では、rl.prompt() メソッドを使用して、ユーザーに入力プロンプトを表示しています。これは、ユーザーが入力するたびに新しい行を要求する場合に役立ちます。
  • it ストリームを使用する例では、process.stdin.pipe(it) メソッドを使用して、stdin を it ストリームにパイプしています。これにより、stdin からのデータが it ストリームの data イベントに送信されます。



fs.readFileSync() 関数を使用する

fs モジュールの readFileSync() 関数を使用して、stdin をファイルとして読み込むことができます。その後、split() メソッドを使用して、ファイルを配列の行に変換することができます。この方法は、stdin からのすべての入力を一度に読み込む必要がある場合に役立ちます。

const fs = require('fs');

const input = fs.readFileSync('/dev/stdin', 'utf8');
const lines = input.split('\n');

for (const line of lines) {
  console.log(line);
}

forEach() メソッドを使用する

forEach() メソッドを使用して、stdin からの各行をイテレートすることができます。この方法は、stdin からの入力を処理する必要がある場合に役立ちます。

process.stdin.on('data', (chunk) => {
  const lines = chunk.toString().split('\n');

  lines.forEach((line) => {
    console.log(line);
  });
});

ジェネレータを使用する

function readLines() {
  const lines = [];

  process.stdin.on('data', (chunk) => {
    lines.push(chunk.toString());
  });

  process.stdin.on('end', () => {
    const text = lines.join('');
    const lines = text.split('\n');

    for (const line of lines) {
      yield line;
    }
  });
}

(async () => {
  for await (const line of readLines()) {
    console.log(line);
  }
})();

Node.js で stdin を行ごとに読み込むには、さまざまな方法があります。ニーズに応じて適切な方法を選択することが重要です。

  • 少量の入力を処理する必要がある場合は、readline モジュールを使用するのが最良の方法です。
  • 大量の入力を処理する必要がある場合は、it ストリームまたは fs.readFileSync() 関数を使用するのが最良の方法です。
  • 非同期に処理する必要がある場合は、ジェネレータを使用するのが最良の方法です。

node.js stdin



Node.js入門: JavaScriptプログラミング

Node. jsは、サーバーサイドのJavaScript実行環境です。つまり、JavaScriptを使ってウェブサーバーやネットワークアプリケーションを開発することができます。Node. js公式サイトからインストーラーをダウンロードします。...


Node.js の `worker_threads` モジュールを使ってマルチスレッド化を行う

Node. js は、JavaScript を使ってサーバーサイドアプリケーションを開発できるプラットフォームです。シングルスレッドで動作するため、従来のマルチスレッド型言語と比べて軽量で高速な処理が可能です。しかし、マルチコアマシンであっても、シングルスレッドで動作する Node...


Node.js でのファイル書き込み:その他の方法

Node. js は、JavaScript をサーバーサイドで実行するためのプラットフォームです。ファイルシステムへのアクセスも可能で、その中でもファイルにデータを書き込む機能は非常に重要です。const fs = require('fs');...


Node.jsでディレクトリ内のファイル一覧を取得するコードの解説

Node. jsでは、fsモジュールを使用してディレクトリ内のファイル一覧を取得することができます。readdirメソッドは、指定されたディレクトリ内のファイル名とサブディレクトリ名を同期的にまたは非同期的に取得します。同期的な使用:注意:...


Node.jsでスタックトレースを出力するコード例の詳細解説

Node. jsでは、エラーが発生した場合にそのエラーのスタックトレースを出力することができます。スタックトレースは、エラーが発生した場所やその原因を特定する上で非常に役立ちます。最も一般的な方法は、エラーオブジェクトの stack プロパティを使用することです。これは、エラーが発生した場所やその呼び出し履歴を文字列として返します。...



SQL SQL SQL SQL Amazon で見る



EJS、Handlebars、Pug:Node.jsで人気テンプレートエンジン徹底比較

テンプレートエンジンを使用すると、以下の利点があります。開発効率の向上: テンプレートを使用することで、HTML コードを毎回手書きする必要がなくなり、開発時間を短縮できます。コードの保守性向上: テンプレートとロジックを分離することで、コードが読みやすくなり、保守しやすくなります。


「JavaScript、jQuery、Node.js」における「jQueryをNode.jsで使用できるか」の説明(日本語)

一般的に、jQueryをNode. jsで直接使用することは推奨されません。Node. jsはサーバーサイドでのJavaScript実行を想定しており、ブラウザ環境向けのjQueryの機能は直接利用できないからです。詳細な解説:jQuery: ブラウザ環境でDOM操作やイベント処理、アニメーションなどを簡潔に記述するためのJavaScriptライブラリです。


Node.jsとは何ですか? (What is Node.js?)

Node. jsは、JavaScriptをサーバーサイドで実行するためのプラットフォームです。つまり、従来ブラウザ上でしか実行できなかったJavaScriptを、サーバー上で実行できるようにする環境を提供します。JavaScript: プログラミング言語のひとつで、主にブラウザ上で動きます。


Node.js デバッグ入門: 実践的なコード例

Node. js アプリケーションのデバッグは、JavaScript コードのエラーや問題を特定し、解決するためのプロセスです。以下に、一般的なデバッグ手法を日本語で説明します。console. log() 関数を使用して、コードのさまざまな箇所で変数の値やメッセージを出力します。


Node.js ファイル自動リロードのコード例解説

Node. jsでファイルを自動リロードする方法について、日本語で説明します。最も一般的な方法は、Node. jsのモジュールを使用することです。代表的なモジュールは以下の通りです。nodemon: Node. js開発用のツールで、ファイルの変更を検知して自動的にプロセスを再起動します。