Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Node.js24.x】Stream::Stream()メソッドの使い方

Streamメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

Streamメソッドは、Node.jsにおけるストリーム機能の基盤となるStreamクラスのインスタンスを初期化する際に内部的に用いられるメソッドです。Streamクラスは、データを効率的に処理するための抽象的なインターフェースを提供する、Node.jsの核心的な要素の一つです。これは、ファイルからのデータ読み込み、ネットワーク経由でのデータ送受信、データ変換といった、連続的に発生するデータフローを扱う際に非常に役立ちます。

このメソッドが属するStreamクラス自体は、データが「流れる」という概念を表現する抽象基底クラスであり、直接このコンストラクタを呼び出して具体的なストリームオブジェクトを生成することは一般的ではありません。通常、開発者はStreamクラスを継承したReadable(読み込みストリーム)、Writable(書き込みストリーム)、Duplex(読み書きストリーム)、Transform(変換ストリーム)といった具体的なサブクラスのコンストラクタを使用します。

Streamメソッドは、これらの具象ストリームが共通して持つべき基本的なプロパティやイベントハンドリングの仕組み(例えばEventEmitterの機能)を初期化し、ストリームの基本的なライフサイクル管理の土台を築きます。大量のデータを扱うアプリケーションでは、メモリを効率的に利用し、パフォーマンスを向上させるためにストリームの利用が不可欠です。このメソッドを通じて初期化される基盤は、そうした高度なデータ処理を可能にするために重要な役割を果たします。システムエンジニアを目指す上で、ストリームの仕組みを理解することは、堅牢で高性能なアプリケーションを構築する上で非常に価値のある知識となります。

構文(syntax)

1import { Readable, Writable } from 'stream';
2
3// Readableストリームのインスタンスを作成する例
4const sourceStream = new Readable({
5  read() {
6    this.push('Data chunk 1');
7    this.push('Data chunk 2');
8    this.push(null); // データ供給の終了を示す
9  }
10});
11
12// Writableストリームのインスタンスを作成する例
13const destinationStream = new Writable({
14  write(chunk, encoding, callback) {
15    console.log(`Received: ${chunk.toString()}`);
16    callback(); // 書き込みが完了したことを通知
17  }
18});
19
20// ReadableストリームからWritableストリームへデータをパイプする構文
21sourceStream.pipe(destinationStream);

引数(parameters)

opts

  • readableObjectMode: boolean: オブジェクトモードでストリームを有効にするかどうか。trueの場合、ストリームは任意のJavaScriptオブジェクトを処理します。
  • writableObjectMode: boolean: オブジェクトモードでストリームを有効にするかどうか。trueの場合、ストリームは任意のJavaScriptオブジェクトを処理します。
  • writableHighWaterMark: number: 書き込み操作のための高水位標。
  • readableHighWaterMark: number: 読み取り操作のための高水位標。
  • decodeStrings: boolean: 文字列をデコードするかどうか。trueの場合、ストリームはチャンクをUTF-8文字列としてデコードします。
  • allowHalfOpen: boolean: falseの場合、ストリームは両方のエンドが終了したときに終了します。trueの場合、ストリームは一方が終了しても、もう一方が終了するまで終了しません。

戻り値(return)

Stream

Streamクラスのコンストラクタであり、新しいStreamオブジェクトを生成します。このオブジェクトは、データストリームの基本的なインターフェースを提供します。

関連コンテンツ