The best days are ahead of us.

関数型ドメインモデリング 非公式宣伝サイト

2025-01-08 13:30:25
関数型ドメインモデリング 書影

書籍情報

  • タイトル:関数型ドメインモデリング - ドメイン駆動設計とF#でソフトウェアの複雑さに立ち向かおう
  • 原著タイトル:Domain Modeling Made Functional - Tackle Software Complexity with Domain-Driven Design and F#
  • 著者:Scott Wlaschin
  • 訳者:猪股 健太郎
  • 出版社:KADOKAWA (アスキードワンゴ)
  • ISBN:4048931164 / 978-4048931168
  • 発売日:2024年6月28日 初版発行

出版社による紹介文

ドメイン駆動設計と関数型プログラミングを組み合わせることで、顧客満足度の向上、開発サイクルの短縮、無駄な作業の削減を実現できます。本書では、ビジネスドメインの例とF#のコードで、ビジネスに焦点を当てた、柔軟で高品質なソフトウェアを構築する方法を紹介します。たとえば、F#の型システムを使って複雑なドメインをモデル化し、読みやすいドキュメントにもなるコードを作成します。また、ビジネスルールをエンコードして「コンパイル時ユニットテスト」を作成することで、不正な状態を表現できないようにして潜在的なバグを排除します。関数型プログラミングの核となる原則を適用することで、実世界の要求をエレガントかつ簡潔にモデル化したソフトウェア設計を実現できます。

目次

  • 第1部 ドメインの理解
    • 第1章 ドメイン駆動設計の紹介
    • 第2章 ドメインの理解
    • 第3章 関数型アーキテクチャ
  • 第2部 ドメインのモデリング
    • 第4章 型の理解
    • 第5章 型によるドメインモデリング
    • 第6章 ドメインの完全性と整合性
    • 第7章 パイプラインによるワークフローのモデリング
  • 第3部 モデルの実装
    • 第8章 関数の理解
    • 第9章 実装:パイプラインの合成
    • 第10章 実装:エラーの扱い
    • 第11章 シリアライズ
    • 第12章 永続化
    • 第13章 設計を進化させ、きれいに保つ

公式情報リンク

レビューと解説記事

このリストには、原著 “Domain Modeling Made Functional” と日本語訳『関数型ドメインモデリング』の両方に関する日本語の記事を載せています。

解説記事

  • Ktor × Exposed × Koin × kotlin-resultを用いたDDDを意識したアプリケーションの実装 - Don’t Repeat Yourself 2025年01月06日
    • claude.aiによる要約:この記事は、KotlinでDDDを意識したバックエンドアプリケーションの実装例について解説したものです。Ktor、Exposed、Koin、kotlin-resultなどの主要なライブラリを使用し、レイヤードアーキテクチャに基づいて設計されたTodoアプリケーションを実装しながら、トランザクション管理、エラーハンドリング、非同期処理などの実践的な課題に対する解決方法を詳しく説明しています。著者は関数型プログラミングの考え方を取り入れつつ、Kotlinの言語機能(value class、sealed class、スコープ関数など)を効果的に活用する方法を示しながら、実用的なアプリケーション設計のプラクティスを共有しています。
  • システム開発と教育におけるアンラーンの重要性 - Zenn 2024年12月24日
    • claude.aiによる要約:この記事は、システム開発と教育におけるアンラーン(学習した知識や信念を意図的に棄却すること)の重要性について論じています。特にドメイン駆動設計(DDD)の文脈で、開発者がドメインエキスパートと同じメンタルモデルを共有するためには、自身の誤った先入観や理解をアンラーンする必要があることを、具体的な事例を通じて説明しています。さらに、教育の本質的な目的は知識の記号接地(理論的な知識を実践的な理解に結びつけること)であり、そのためにもアンラーンが重要な役割を果たすと結論付けています。
  • アラフィフでも関数型をあきらめない!「関数型ドメインモデリング」で再入門してみた話 - iimon TECH BLOG 2024年12月21日
    • claude.aiによる要約:この記事は、45歳のエンジニアマネージャーが関数型プログラミングへの再挑戦について書いた技術ブログです。著者は過去にHaskellでの挫折経験がありながらも、「関数型ドメインモデリング」の本を読んで、特にTypeScriptを使用したドメインロジックの実装において関数型アプローチの利点を再発見しています。関数型プログラミングの主要な利点として、状態管理のしやすさ、副作用の管理、型チェックによるエラー検出の容易さを挙げており、従来の命令型プログラミングと比較しながら実践的な説明を行っています。
  • 「関数型ドメインモデリング」から学ぶモデリングの勘所 - Bitkey Developers, Zenn 2024年12月20日
    • claude.aiによる要約:この記事は、関数型ドメインモデリングのメリットについて、オブジェクト指向と比較しながら解説しています。関数型アプローチの主な利点は、抽象的な概念からではなく具体的に観測可能な状態から始められること、処理を分解しやすいこと、そして必要以上に複雑化しにくい点にあると説明しています。著者は関数型アプローチが特にモデリングの経験が少ないチームにとって有効な選択肢になり得ると結論付けていますが、これは銀の弾丸ではなく、汎用性の低さやカプセル化の難しさなどのトレードオフがあることも指摘しています。
  • 【関数型ドメインモデリング】TypeScriptで書いてみた - Zenn 2024年12月09日
    • claude.aiによる要約:この記事は、関数型ドメインモデリングの書籍で紹介されているF#のサンプルコードをTypeScriptで実装した経験について解説しています。著者は、Result型やモナドの概念を活用し、neverthrowライブラリを用いて関数型プログラミングのアプローチを実現しましたが、TypeScriptでの関数型プログラミングには言語仕様上の制約があり、標準では用意されていない機能を補う必要があることを指摘しています。最終的に実装は完了したものの、関数型プログラミングを行うならF#などの関数型言語を選択したほうが良いかもしれないという結論に至っています。
  • ①ドメインモデルの分類と②関数型DDDによる実装パターンを考える 〜「事業活動」の構成要素とは…?〜 - 株式会社ログラス テックブログ, Zenn 2024年12月09日
    • claude.aiによる要約:この記事は、ドメイン駆動設計(DDD)の文脈で、事業活動をモデル化する方法とその実装パターンについて論じています。著者は事業活動のモデルを「知識レベル」(業務手順、業務資源情報、属性・値、意思決定・制約条件)と「オペレーションレベル」(業務フロー、業務イベント)の2つの軸で分類し、それぞれについてKotlinでの実装例を示しています。この分類方法は、コードアーキテクチャの観点、経営学的な事業活動の構成要素の観点、そして存在論的な世界の構成要素の観点という3つの視点から導き出されています。
  • ビジネスルールを型で表現するリファクタリング手法 - コドモン Product Team Blog 2024年12月03日
    • claude.aiによる要約:本記事は、Kotlinで開発されている請求システムにおいて、ビジネスロジックを型で表現するアプローチを採用し、単一クラスで管理していた状態(キャンセル、返金、支払い完了など)をsealed interfaceを使って分割するリファクタリング事例を紹介したものです。複雑化していた状態管理を型安全に整理し、コードの可読性、保守性、拡張性を向上させた過程を、具体的なコード例とその成果とともに解説しています。
  • Rubyではじめる関数型ドメインモデリング - Zenn 2024年11月06日
    • claude.aiによる要約:本記事は、Railsアプリケーションにおけるビジネスロジックを「ワークフロー」として実装する手法を提案しています。ワークフローとは業務プロセスを純粋な関数の組み合わせで表現する方法で、dry-monadsライブラリを使用して処理の成功/失敗を明示的に扱い、それらをパイプライン化します。外部システムとの相互作用を両端に配置することで、中心となるビジネスロジックの純粋性と見通しの良さを保ち、保守性と拡張性の高いコード設計を実現します。
  • TypeScriptの型で設計を表現する、宣言的バックエンド実装具体例 - 株式会社CHILLNN, Zenn 2024年09月01日
    • claude.aiによる要約:この記事は、TypeScriptを使用したバックエンド開発において、宣言的プログラミングと関数型ドメインモデリングの実践的な実装方法を解説しています。著者は、型システムを活用して設計をコードで表現し、コンパイラレベルで解釈可能なビジネスロジックを実現する手法を、具体的なECサイトの決済処理を例に説明しています。この手法により、ドメイン知識の暗黙化を防ぎ、処理の複雑化を抑制しながら、チーム開発の効率化とコードの保守性向上を実現できることが示されています。
  • F#でAsyncとResultを組み合わせたときにきれいに書く方法 - Uzabase for Engineers 2024年08月09日
    • claude.aiによる要約:この記事は、F#で非同期処理(Async)と結果型(Result)を組み合わせる際に生じる冗長なコードの問題とその解決策を説明しています。著者は、「関数型ドメインモデリング」書籍で提案されているAsyncResult型エイリアスと、FsToolkit.ErrorHandlingライブラリのasyncResultコンピュテーション式を使用することで、コードをより簡潔に書けることを示しています。さらに、FSharpPlusライブラリのモナドトランスフォーマーを用いたアプローチも紹介し、より柔軟な型の組み合わせが可能になることを提案しています。
  • 【シン・プロセス指向】pythonを題材にDomain Modeling Made Functional/関数型ドメインモデリング【気分はstatic! 】 - Qiita 2024年06月27日
    • claude.aiによる要約:この記事は、関数型プログラミングとドメイン駆動設計の手法を融合させ、Pythonで実践する革新的なアプローチを提案しています。ビジネスプロセスを直接コードに反映する「プロセス指向」の方法を中心に、Result型やADTなどの関数型概念をPythonで実装する具体的な手法を紹介しています。特に注目すべきは、このアプローチが現代の技術環境(高度な型システム、自動テスト、サーバーレスアーキテクチャなど)と整合性が高いことを示唆している点です。理論と実践のバランスが取れた内容で、ドメインモデリングの新たな可能性を探る貴重な資料となっています。
  • TypeScript開発にRailway Orientedを持ち込み、より型安全なエラーハンドリングへ - Sansan Tech Blog 2024年03月26日
    • claude.aiによる要約:この記事は、関数型プログラミングの概念をTypeScriptに適用し、型安全で網羅的なエラーハンドリングを実現する手法を提案しています。Railway Oriented Programmingを基に、Result型、パイプライン、パターンマッチングを組み合わせることで、エラー表現の統一、処理の可読性向上、エラーハンドリングの網羅性保証を達成する方法を具体的に示しています。この手法は、TypeScriptを用いた実際の開発現場でも適用可能な、実践的かつ革新的なアプローチとして評価できます。
  • 振る舞いに応じて型を分けることで複雑さに対処する - LabBaseテックノート, Zenn 2023年12月01日
    • claude.aiによる要約:この記事は、「Domain Modeling Made Functional」の概念をTypeScriptで実践し、タスク管理アプリのAPI開発を通じて得られた知見を共有しています。イベントストーミングからドメインモデリング、オニオンアーキテクチャの採用、zodを使用したドメイン知識の表現、振る舞いに応じた型の分割など、具体的な実装例とともに課題や疑問点も率直に述べられています。特に、振る舞いによる型分割の利点と課題、I/O部分を含めた実装の全体像の提示は、理論を実践に落とし込む際の貴重な参考となり、ドメイン駆動設計と関数型プログラミングの融合に興味を持つ開発者にとって価値のある情報を提供しています。
  • (ほぼほぼ)typed (わりかし)fuctional python【関数型ドメインモデリング】 - Zenn 2023年11月27日
    • claude.aiによる要約:この記事は、「Domain Modeling Made Functional」の概念をPythonで実践し、関数型プログラミングの手法をドメイン駆動設計に適用する方法を詳細に解説しています。架空の家具店の注文プロセスを例に、データモデル、ビジネスロジック、ビジネスルール、データアクセスの実装方法を示し、特にResult型とモナドを用いたエラーハンドリングと処理の連鎖、代数的データ型とスマートコンストラクタの活用に焦点を当てています。Pythonという広く使用されている言語で関数型プログラミングの概念を実践し、具体的なビジネスプロセスに基づいた実装例を提示することで、理論と実践のバランスの取れた、実用的なアプローチを提案しています。
  • Domain Modeling Made Functional から学ぶドメイン駆動開発 - Qiita 2022年12月09日
    • claude.aiによる要約:この記事は、「Domain Modeling Made Functional」から得られたDDDの洞察を紹介し、関数型プログラミングの概念がDDDの実践に適していることを示しています。技術的偏見を排除した要求の整理、レイヤードアーキテクチャの問題点と代替案、純粋関数の重要性と副作用の排除などの key points を解説しています。特に、関数型の考え方をオブジェクト指向に適用することの利点を強調し、テストの容易さや管理しやすいコード構造の実現方法を提案しています。この記事は、DDDの実践において関数型プログラミングの概念を取り入れることの価値を示す、実用的で洞察に富んだ内容となっています。

「鉄道指向プログラミング (Railway oriented programming)」の解説

  • Resultと鉄道指向プログラミングの関係性とその役割 | 株式会社一創 2025年01月06日
    • claude.aiによる要約:鉄道指向プログラミング(Railway Oriented Programming)は、エラーハンドリングを効率化し、コードの可読性を向上させるための設計手法です。この手法の特徴は、処理フローを「成功」と「失敗」の2つのパスに明確に分け、鉄道の線路のように処理が分岐する仕組みを持つことで、Result型を活用して一貫したエラー処理を実現します。特に大規模なプロジェクトや分散システム、マイクロサービスなどの複雑なシステムで効果を発揮し、従来のtry-catch構文と比べてコードの保守性と堅牢性を高めることができます。
  • Javaで鉄道指向プログラミング(Railway Oriented Programming)を実践する - ZOZO Advent Calendar 2024 10日目, Qiita 2024年12月11日
    • claude.aiによる要約:この記事は、関数型プログラミングの手法の1つである「鉄道指向プログラミング(Railway Oriented Programming: ROP)」をJavaで実装する方法について解説しています。ROPは、エラー処理を鉄道のレールのように連結して扱うことで、煩雑になりがちなエラーハンドリング処理をスマートに記述することができる手法です。具体的には、VavrライブラリのEither型を使用し、入力値の検証→更新→送信という典型的なユースケースを例に、失敗のパターンを統一しflatMapでつなげることで、より簡潔で視覚的にわかりやすいコードを実現する方法を紹介しています。
  • TypeScriptで始めるRailway Oriented Programming - ejuLabs, Zenn 2024年04月03日
    • claude.aiによる要約:この記事は、Railway Oriented Programming (ROP)というプログラミング手法をTypeScriptを用いて説明しています。ROPは関数型プログラミングの文脈で有用な手法で、エラーハンドリングを効果的に行うためのアプローチです。記事では、Result型の導入、try-catchからResultへの変換、バリデーションのResult化、map関数とflatMap関数の実装、副作用の分離などについて具体的なコード例を用いて解説しています。最終的に、従来の命令型のコードをROP風に書き換えた例を示し、その利点を説明しています。
  • 【Swift】鉄道指向プログラミング(Railway Oriented Programming)でResultの使い方を学ぶ - Qiita 2019年06月27日
    • claude.aiによる要約:この記事は、SwiftのResultタイプと鉄道指向プログラミング(ROP)の概念を解説しています。ROPはエラーハンドリングを鉄道の線路に例えて説明する手法で、Resultタイプと組み合わせることで、統一的なエラー処理と高い可読性を実現します。flatMapやmapなどの関数を使って異なる型の関数を連結し、複雑な処理フローを表現できます。この手法は型を重視し、関数型プログラミングの考え方を取り入れており、より堅牢で保守性の高いコードを書くための効果的なアプローチとして紹介されています。
  • 鉄道指向プログラミング(翻訳) - github.com/yukitos 2013年05月27日

書評・レビュー

読書メモ

スライド

リポジトリ

関連書籍(主に日本語)

ドメイン駆動設計

関数型プログラミング・設計

F#

訳者による関連情報

コミュニティ情報

  • Twitter ハッシュタグ: #関数型ドメインモデリング #DMMF_JP