Upgrade to Pro — share decks privately, control downloads, hide ads and more …

関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pur...

関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript

関数型まつり2026
https://2026.fp-matsuri.org/

関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす

Shimmy
ソフトウェアエンジニア

Avatar for 株式会社カミナシ

株式会社カミナシ

July 13, 2026

More Decks by 株式会社カミナシ

Other Decks in Technology

Transcript

  1. TypeScriptの限界 ⾔語 純粋関数 副作⽤を持つ関数 Haskell Int -> Int Int ->

    IO Int Scala A => B A => IO[B] TypeScript (x: number) => number (x: number) => number 多⾔語との⽐較
  2. 解決策2 副作⽤を端に押し出す ⼊⼒ バリデータ 失敗抽出 dispatch 結果 • ⻘ =

    Functional Core:Result 型を返す純粋関数 • ⾚ = Imperative Shell:副作⽤はここだけ
  3. 副作⽤の局在化 影響範囲の縮小 結果 得られたもの モック不要のテスト 3 バリデータが、モック不 要でユニットテスト可能 1 2

    副作⽤がパイプラインの “端”にだけある 配列に1⾏⾜すだけで新し いバリデーションが増や せる 変更が簡単
  4. なぜライブラリを使わなかったか TypeScriptの"⽊⽬"に沿うと ⻑期(数年単位)でメリットがある ライブラリを使う • neverthrow, fp-ts • 独⾃の語彙の学習コスト ◦

    .map / .andThen • 依存を抱える • TypeScriptの進化の恩恵を受 けづらい fff TypeScriptをそのまま活⽤する • ⼈の知識に依存しない • ライブラリに依存しない • ⾔語の進化に乗れる
  5. How 配置と依存で守る 1. ディレクトリの配置を決める a. domain/ infrastructure/ usecase/ という3層構造 2.

    ディレクトリ間の依存関係を制限する a. domain/ から infrastructure/ や usecase/ への importを禁⽌ 3. domain層で呼べるものも制限 a. I/Oライブラリなどの呼び出しも制限
  6. メリット この構造で得られるもの 1 モック不要のテスト 2 副作⽤の局在化 2 読みやすさ domain 層は

    純粋関数だけになる 何をするところななのか がディレクトリで⼀⽬で わかる domain 層は 純粋関数だけになる