
依存が浮かび上がる!?Effect.tsで依存グラフをレイヤで設計しよう、そしてDIコンテナについて考える
DRANK
この記事のコード例は、bunを利用して実際に実行できます。依存が浮かび上がるまずは依存がない基本から売上伝票の一覧から、売上の合計を計算することを考えてみます。とりあえず、単純に合計値を計算することを考えます。import { Effect, Stream } from "effect"; const profitSum = Effect.gen(function* () { const profits = Stream.make(1, 2, 3); return yield* profits.pipe(Stream.runSum); }); const v = await Effect.runPromise(profitSum); console.log(v); このとき、 profitSum の型は Effect.Effect<number, never, never> になります。ここで、この三つのタイプパラメータの意味を軽く書いておきます。 ┌─── このエフェクトが作りたい値の型 │ ┌─── このエフェクトが失敗したときのエラーの型 (ありえるものすべて) │ │ ┌─── このエフェクトの依存 ▼ ▼ ▼ Effect<number, Error, never> ここで、三つめのパラメータが今回主題の依存になりますね。なお、初めての場合は、エフェクトというのはプログラムのこと、または単に(asyncかもしれない)実行を待つ関数のこ…