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

読書会から始める関数型ドメインモデリング / Learning Functional Doma...

読書会から始める関数型ドメインモデリング / Learning Functional Domain Modeling Through a Reading Group

2025/07/15
実践!バックエンドTypeScript〜現場から学ぶtsの可能性〜
https://findy.connpass.com/event/360678/

読書会から始める関数型ドメインモデリング

倉澤 直弘
ソフトウェアエンジニア

Avatar for 株式会社カミナシ

株式会社カミナシ

July 14, 2025
Tweet

More Decks by 株式会社カミナシ

Other Decks in Technology

Transcript

  1. 自己紹介 • 名前: 倉澤 直弘 • 所属: 株式会社カミナシ • 役割:

    ソフトウェアエンジニア • 経歴: 2022年7月、カミナシに入社。 カミナシレポートの開発、その後マネージャーを経て 今年の4月からカミナシ教育チームに開発者としてJoin しました。 Xアカウント: @k_7016
  2. プロダクトラインナップ カミナシは“現場の基盤”となる 3つの領域をまたぐデジタルインフラに Method 作業 Men ⼈ Machine 設備 電⼦帳票

    マニュアル‧研修 コミュニケーション 設備カルテ 1つのアカウント運⽤で複数のシステムを利⽤。運⽤の負担軽減とセキュリティ向上
  3. 5 Agenda 1. はじめに 2. ドメイン駆動設計の目的 3. 3つのステップ ◦ ステップ

    1: ドメインを理解する ◦ ステップ 2: ドメインをモデリングする ◦ ステップ 3: モデリングから実装を導く 4. 書籍の感想 5. さいごに
  4. • 今日はバックエンド TypeScript の設計改善のために行った「関数型ドメインモデリング」の読書会から学 んだ内容をシェアさせていただきたいと思います。 • 現在、バックエンドに TypeScript を使っている私のチームでは、TypeScript に適したアーキテクチャを

    模索中です。 書籍について ◦ 「関数型ドメインモデリング ドメイン駆動設計とF#でソフトウェアの複雑さに立ち向かおう」 ◦ Scott Wlaschin (著), 猪股 健太郎 (翻訳) ◦ https://www.amazon.co.jp/dp/4048931164 ◦ F# で説明されているためTypeScript にそのまま適用できないものもあります 読書会の方法について ◦ 毎週水曜日 ◦ 朝 9:00 ~ 10:00 ◦ 予習は特にせずに来て、1章ずつ45分くらいまでもくもく読書 ◦ さいご15分で感想を共有 1. はじめに
  5. 今日の話の前提 今日は持ち時間が10分ということもあり、詳細にはあまり立ち入らずに説明させていただきます。 そのため、詳細な How や実装の手法はあえて削っています。 その辺の話が聞きたかった方はすみません。 今日の話のポイント 書籍ではまずドメイン駆動設計の目的である「共有されたモデル」を作る重要性を説明し、 その目的を達成するための3 つのステップを説明しています。

    1. ドメインを理解する 2. ドメインをモデリングする 3. モデリングから実装を導く そしてその際に重要なのは以下の2点だと学びました。 • 技術的制約をモデリングに持ち込まないこと • コードによって文書化することで実装とモデルの乖離をなくすこと 今日は上記に挙げたポイントを中心にお話しします。 1. はじめに
  6. ステップ3: モデリングから実装を導く 3. 3つのステップ 型によってモデリングされたものを、型にそって実装します。ビジネスプロセスは入力を受け取り、出力を生成するワークフローとして 実装します。 書籍では、このワークフローを純粋関数の連鎖(パイプライン)として実装することを推奨します。純粋関数は、同じ入力に対して常に 同じ出力を返し、外部の状態を変更しない(副作用がない)ため、予測可能でテストしやすいという大きな利点があります。 ビジネスロジックを純粋関数で表現することで、その意図が明確になり、複雑なビジネスプロセスも小さな、独立した、再利用可能な 部品に分割できます。これにより、個々のビジネスロジックの理解と検証が容易になります。

    また、このビジネスロジックの純粋性を守るために、アーキテクチャが重要です。 オニオンアーキテクチャのように、ドメインを内側に、インフラを外側に配置し、各レイヤーが内側のみに依存し、外側には依存しない ように設計します。 特に重要なのは、I/O(副作用)を可能な限り避けることです。データベースへのアクセスなどの副作用が発生する処理は、ワークフ ローの「端」に追いやり、ビジネスロジックの純粋性を保ちます。
  7. • この書籍を読んで自分は 「DDDにおけるドメインをモデリングする部分と、モデルを実装する部分 (設計 や実装のパターンなど) がごっちゃになっていてた」と気づきました。 この書籍ではまず DDD の目的を把握して、ドメインを理解し、モデリングし、その後、実装するという流 れになっていて、「モデリングのための話なのか」、それとも「実装のための話なのか」がわかりやす

    かったです。 そもそも、関数型プログラミングとしての実装方法の話は多かったですが、DDDとしての実装パターンは そこまで多くなく、それが逆に良かったと思いました。 • 今まで DDD のモデリング手法はなんか小難しそうって勝手に思っていましたが、書籍で紹介されていた手 法であれば、イベントストーミングだけなんとかできれば、後はシンプルなテキストとコードでまとめて いくだけなので私でもできそうって思いました。 • 今日は関数型プログラミングの話は省いたため詳細は省きますが、書籍は F# で説明されていたこともあ り、TypeScript の機能的に足りない部分はあるため、完全にこの本の内容を実践することは難しいかもし れないと思ってます。しかし、今日話したような DDD の考え方、進め方は、関数型言語以外でも活かせる 内容だと思いました。 4. 書籍の感想