📦
イテレータのためのユーティリティライブラリ Rotery を公開しました
概要
イテレータを使った反復処理のための npm パッケージ、 Rotery を作成・公開しました。
パッケージの特徴
- JavaScriptの反復処理プロトコルの機能を使ったユーティリティライブラリです。
- 反復処理プロトコルにより遅延評価されるため、必要な処理だけが実行されます。
-
map
,filter
,reduce
などのイテレータヘルパー関数を提供します。 -
curry
,compose
などの関数型プログラミングのヘルパー関数を提供します。 - 非同期の「並列処理」と「逐次処理」の両方に対応できます。
- 「一定の並列度で逐次繰り返す」ような処理も簡単に書けます。
- ユーティリティライブラリ Remeda と互換性のある設計になっています。
イテレータヘルパーや関数のパイプの機能は、標準化のプロポーザルが提出されて議論が進んでいるようです。将来的に JavaScript の標準になるかもしれない機能が気になる方は、是非 Rotery で先取りしてみてください。
使い方(サンプルコード)
import * as Rt from 'rotery'; // tree-shaking 対応
import { dataAccess } from './some-asynchronous-data-access.js';
const result = await Rt.pipe(
userIds,
// 100 件ずつ逐次処理する
Rt.chunk.sync(100),
Rt.map.async(async ids => await dataAccess.findUsersByIds(ids)),
Rt.flatten.async,
Rt.filter.async(user => user.age >= 20),
// 最初に 10 件見つけたら終了
Rt.take.async(10),
Rt.accumulate.async
);
開発状況と今後の方針
現在のところ個人の趣味で開発しているため、最低限のコアコンセプト機能だけを備えています。
今後も少しずつ拡張を進めていく予定です。新機能の提案、不具合報告、 PR は大歓迎です。
その他
Rotery で使用したコーディング技術やプロジェクト設定について、いずれ記事で紹介しようと思います。
Discussion