JavaScript/Streams API
Streams API
[編集]Streams APIは、JavaScriptでデータをストリームとして扱うためのAPIです。ストリームは、大量のデータを小さなチャンクに分割して逐次的に処理するための仕組みです。これにより、メモリ効率が向上し、大規模なデータ処理が可能になります。本章では、Streams APIの基本的な概念と使い方を解説します。
基本的な概念
[編集]Streams APIでは、データを「読み取り可能なストリーム」(ReadableStream)、「書き込み可能なストリーム」(WritableStream)、および「変換ストリーム」(TransformStream)の3つの主要なタイプに分類します。
ReadableStream: データを読み取るためのストリーム。例えば、ファイルやネットワークからのデータを逐次的に読み取る場合に使用します。WritableStream: データを書き込むためのストリーム。例えば、ファイルやネットワークにデータを逐次的に書き込む場合に使用します。TransformStream: データを変換するためのストリーム。例えば、データを圧縮または解凍する場合に使用します。
ReadableStreamの使用例
[編集]以下は、ReadableStreamを使用してデータを逐次的に読み取る例です。
// テキストデータを生成するReadableStreamを作成 const readableStream = new ReadableStream({ start(controller) { controller.enqueue("Hello, "); controller.enqueue("Streams API!"); controller.close(); } }); // ストリームからデータを読み取る const reader = readableStream.getReader(); reader.read().then(function processText({ done, value }) { if (done) { console.log("ストリームの読み取りが完了しました。"); return; } console.log("読み取ったデータ:", value); return reader.read().then(processText); });
このコードでは、ReadableStreamを作成し、そのストリームからデータを逐次的に読み取っています。controller.enqueueを使用してデータをストリームに追加し、controller.closeでストリームを閉じます。
WritableStreamの使用例
[編集]次に、WritableStreamを使用してデータを逐次的に書き込む例を示します。
// データを書き込むためのWritableStreamを作成 const writableStream = new WritableStream({ write(chunk) { console.log("書き込まれたデータ:", chunk); }, close() { console.log("ストリームが閉じられました。"); } }); // ストリームにデータを書き込む const writer = writableStream.getWriter(); writer.write("Hello, ").then(() => { return writer.write("Streams API!"); }).then(() => { return writer.close(); });
このコードでは、WritableStreamを作成し、そのストリームにデータを逐次的に書き込んでいます。writer.writeを使用してデータを書き込み、writer.closeでストリームを閉じます。
TransformStreamの使用例
[編集]最後に、TransformStreamを使用してデータを変換する例を示します。
// テキストを大文字に変換するTransformStreamを作成 const transformStream = new TransformStream({ transform(chunk, controller) { controller.enqueue(chunk.toUpperCase()); } }); // ReadableStreamとWritableStreamをTransformStreamに接続 const readableStream = new ReadableStream({ start(controller) { controller.enqueue("hello, "); controller.enqueue("streams api!"); controller.close(); } }); const writableStream = new WritableStream({ write(chunk) { console.log("変換されたデータ:", chunk); }, close() { console.log("ストリームが閉じられました。"); } }); readableStream .pipeThrough(transformStream) .pipeTo(writableStream);
このコードでは、TransformStreamを使用してデータを大文字に変換しています。pipeThroughメソッドを使用して、ReadableStreamとWritableStreamをTransformStreamに接続し、データを変換しています。
表: Streams APIの主要なメソッドとプロパティ
[編集]以下に、Streams APIの主要なメソッドとプロパティを表形式でまとめます。
| クラス | メソッド/プロパティ | 説明 |
|---|---|---|
ReadableStream
|
getReader()
|
ストリームからデータを読み取るためのReadableStreamDefaultReaderを返す。
|
pipeTo(destination)
|
ストリームをWritableStreamに接続し、データを転送する。
| |
pipeThrough(transform)
|
ストリームをTransformStreamに接続し、データを変換する。
| |
WritableStream
|
getWriter()
|
ストリームにデータを書き込むためのWritableStreamDefaultWriterを返す。
|
close()
|
ストリームを閉じる。 | |
TransformStream
|
readable
|
変換後のデータを読み取るためのReadableStreamを返す。
|
writable
|
変換前のデータを書き込むためのWritableStreamを返す。
|
まとめ
[編集]Streams APIを使用することで、大量のデータを効率的に処理することができます。ReadableStream、WritableStream、TransformStreamを組み合わせることで、柔軟なデータ処理が可能になります。本章で紹介したコード例と表を参考に、Streams APIの活用を進めてください。