関数型ドメインモデリング 非公式宣伝サイト
2024-12-03 21:00:24
書籍情報
- タイトル:関数型ドメインモデリング - ドメイン駆動設計と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” と日本語訳『関数型ドメインモデリング』の両方に関する日本語の記事を載せています。
解説記事
- ビジネスルールを型で表現するリファクタリング手法 - コドモン Product Team Blog 2024年12月03日
- claude.aiによる要約:本記事は、Kotlinで開発されている請求システムにおいて、ビジネスロジックを型で表現するアプローチを採用し、単一クラスで管理していた状態(キャンセル、返金、支払い完了など)をsealed interfaceを使って分割するリファクタリング事例を紹介したものです。複雑化していた状態管理を型安全に整理し、コードの可読性、保守性、拡張性を向上させた過程を、具体的なコード例とその成果とともに解説しています。
- Rubyではじめる関数型ドメインモデリング - Zenn 2024年11月06日
- claude.aiによる要約:本記事は、Railsアプリケーションにおけるビジネスロジックを「ワークフロー」として実装する手法を提案しています。ワークフローとは業務プロセスを純粋な関数の組み合わせで表現する方法で、dry-monadsライブラリを使用して処理の成功/失敗を明示的に扱い、それらをパイプライン化します。外部システムとの相互作用を両端に配置することで、中心となるビジネスロジックの純粋性と見通しの良さを保ち、保守性と拡張性の高いコード設計を実現します。
- F#でAsyncとResultを組み合わせたときにきれいに書く方法 - Uzabase for Engineers 2024年08月09日
- claude.aiによる要約:この記事は、F#で非同期処理(Async)と結果型(Result)を組み合わせる際に生じる冗長なコードの問題とその解決策を説明しています。著者は、「関数型ドメインモデリング」書籍で提案されている
AsyncResult
型エイリアスと、FsToolkit.ErrorHandlingライブラリのasyncResult
コンピュテーション式を使用することで、コードをより簡潔に書けることを示しています。さらに、FSharpPlusライブラリのモナドトランスフォーマーを用いたアプローチも紹介し、より柔軟な型の組み合わせが可能になることを提案しています。
- claude.aiによる要約:この記事は、F#で非同期処理(Async)と結果型(Result)を組み合わせる際に生じる冗長なコードの問題とその解決策を説明しています。著者は、「関数型ドメインモデリング」書籍で提案されている
- 【シン・プロセス指向】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)」の解説
- 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日
書評・レビュー
- ★★★★★ SNSで戦ってる変なITエンジニアは第1章だけでも読むべき - Amazon カスタマーレビュー 2024年10月28日
- 引用 “SNSで値オブジェクトがどうこう無限に言い続けてドメインとは何なのかユビキタス言語は何故重要なのかも全く説明出来ないような連中にはいい薬になると思った”
- ★★★☆☆ 最近のトレンドが覗い知れる一冊 - Amazon カスタマーレビュー 2024年10月18日
- 引用 “DDDには殆ど興味が無かったのですが、意外とその主張が自分の感性に近い事を発見でしました。”
- ★★★★★ 型と関数によるワークフローパイプラインドメインモデリング - Amazon カスタマーレビュー 2024年10月04日
- 引用 “抽象と具象を往復しつつ、型と関数を使ったドメイン駆動のフローを、これほどまで明晰に実コードで示すのは見事である。”
- 「関数型ドメインモデリング」を読んだ - p-kino’s blog 2024年07月21日
- 引用 “正直言って、この本に書いてある内容を全て実践するのは難しいと感じた。 …… しかし、それでもなおこの本により新しく知った考え方は多く、読む価値があったと思う。”
- 「関数型ドメインモデリング」の日本語訳が出たので読んでみた(後編) - Zenn 2024年07月16日
- 引用 “DDDとF#の両方とも知らなかったとしても問題ない程度にそれぞれの説明も行われており、本書を読み終えることでこれらの知識を底上げできるというのも推したいポイントです。”
- Xユーザーのartonさん: 「関数型ドメインモデリングを読み始めた(これも嘉平さんから貰った)。俺にとっては初めてのDDD関係の本なのだった。で、1章を読み始めてイベントとコマンドってアクターとユースケースの再定義だなとか考えながら読み進めて行ったわけだが、最も重要な点って章のまとめには出て来ないが問題領域と」 / X 2024年07月15日
- 引用 “設計方法と実装技術が手に手を取り合ってより正確に、より楽な道へ進む姿はなかなか感動的だ。”
- 『関数型ドメインモデリング』はF#の本なのか? - 詩と創作・思索のひろば 2024年07月08日
- 引用 “普段の言語における実践的な適用にどう落としこむかが、読者の宿題だ。パラダイムの違う言語を通して見ることで、そのエッセンスがより研ぎ澄まされて見えてくるのだと思う。”
- 『関数型ドメインモデリング』を読んだ - nekoTheShadow’s diary 2024年07月07日
- 引用 “自分の仕事柄「Excel仕様書の中身とソースコードの実装が違って困る」ということが多々あるので、こういう仕様と実装の一致を強制できる仕組みには本当に感動しました。”
- #1475 「関数型ドメインモデリング」 - るいもの戯れ言 2024年07月05日
- 引用 “本書での主張は自分は、要件定義ですぐにER図とかクラス図などの実装詳細を書こうとするな、ドメインロジックからはI/Oを無くせ。あたりが本質かなと感じた。 …… ただ盲従しない方が良いかなと。 …… 結局はトレードオフなのだ。”
- 『関数型ドメインモデリング』の感想など|yonekubo 2024年07月03日
- 引用 “特に10章「実装:エラーの扱い」では、成功と失敗の二系統がある関数を合成により連鎖していく方法(2トラックモデル)が、プラレールのような線路のイメージを用いて非常にわかりやすく説明されており、目から鱗が落ちました。”
- 関数型ドメインモデリング ドメイン駆動設計とF#でソフトウェアの複雑さに立ち向かおう を読んだ - 平常運転 2024年07月02日
- 引用 “一見気になるようなトピックは理想化されたケーススタディでよくカバーされているが、実践的とまでは届かないだろう”
- 「関数型ドメインモデリング」の日本語訳が出たので読んでみた(前編) - Zenn 2024年06月30日
- 引用 “「設計上の困りごとは型で解決」というのが本当に良いですね。”
- Xユーザーのミノ駆動さん: 「『関数型ドメインモデリング』届いたから読むよー。
ざっと全体見た感じ。訳書だけど平易で読みやすく、序盤からフフッて笑える内容も。序盤でDDDの要点を解説してるので、初めてDDDに触れる人にも優しい感じ。サンプルコードもどシンプルで、小さい認知負荷で読める。良書の予感。 https://t.co/eTiVOkOaUB」 / X 2024年06月30日
- 引用 “訳書だけど平易で読みやすく、序盤からフフッて笑える内容も。”
- Domain Modeling Made Functional の訳本が出ます - FLINTERS Engineer’s Blog 2024年06月06日
- 引用 “書籍全体で例が共通しているので、非常に理解がしやすいです。”
- Xユーザーのkawasima@99卒さん: 「『関数型ドメインモデリング(Domain Modeling Made Functional)』は、従来ごっちゃになりがちだったDomain ModelingとEncodingを切り分け、Domain Modelingをまずやれ、やり方はこうだ、ってのを非常に上手く説明した革命的な本なのです。…が https://t.co/ENKAkwe7Y3」 / X 2024年05月24日
- 引用 “F#がなまじドメインモデルのエンコーディング能力が高いため、そっち側の内容ばかり入ってきやすいのは、ちょっと残念なところです。”
- Xユーザーのkawasima@99卒さん: 「Domain Modeling Made Functionalが従来のドメインモデリングの書籍と一線を画すのは、「ドメインエキスパートとよく対話してモデル作っていこうな!」で留まらずに、型の粒度の設計指針を明確に打ち出していることです。
そしてその本質は8章のTotal Functionsにあります。」 / X 2023年02月25日
- 引用 “Total Functionsにしようと思えばこそ、「この業務ではこのデータ全部同じように扱えるんだっけ」の議論に注力するようになる。”
- 『Domain Modeling Made Functional』を読んだ - r7kamura.com 2022年10月09日
- 引用 “不正な状態を取り得たり、コードで説明できていない暗黙的な挙動を含んだりしないようにプログラムを組み上げることが本当に大事である、という考え方が本の中で徹底されており、これも著者の強く主張したい部分なのだろうと感じられた。”
- 関数型言語で DDD - Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# - Shin x Blog 2019年08月20日
- 引用 “OOP による DDD の情報が多いですが、もしかすると関数型言語の方が平易に DDD を実装できるのはないかという印象すら持っています。”
- 社内Lightning Talk 第7回 - MonotaRO Tech Blog 2019年11月18日
- 引用 “このようなワークフローに準じた設計になると、ありえない状態データが生まれないみたいです。”
- 関数型DDD〜Domain Modeling Made Functional まとめ- Qiita 2019年04月04日
- 引用 “自分が特に面白いと思うのは以下の点 …… ・型の重視 …… ・イベントとワークフローへのフォーカス …… ・自然言語ベースのモデリング ……”
読書メモ
- 『関数型ドメインモデリング ドメイン駆動設計とF#でソフトウェアの複雑さに立ち向かおう』で実践的なドメイン駆動設計+関数型言語によるコードの書き方を学ぶ - Magnolia Tech 2024年11月11日
- 引用 “プロダクションコードをF#で書いている人が日本にどれだけ居るのか想像が付かないところもあるけど、これからドメイン駆動設計を元にコードを書きたいと思っている人には言語に拠らず参考になります 一方で、冒頭のドメイン駆動設計の解説は、書いてあること自体は「そうだよねー」なのですが、そんなに理想的に行くのか?という記載もちらほら”
- 『関数型ドメインモデリング』勉強会 第4章 型の理解 │ Find out by JURABI 2024年10月07日
- 引用 “一般的に代数的データ型を採用した言語は型と値の両方に共通したプリミティブな演算を用いて複雑なデータを構成し、それをパターンマッチの際に分解して取り出したりすることによって、複雑なデータの取り扱いを容易にしている。”
- 『関数型ドメインモデリング』勉強会 第3章 関数型アーキテクチャ │ Find out by JURABI 2024年10月07日
- 引用 “本章ではまずそういった細かい所に入る前に、構築されたドメインモデルをどのように実装していくかについて、DDDの概念である境界付けられたコンテキストやドメインイベントをソフトウェアにどのように変換していくかについてみていく。”
- 関数型ドメインモデリングを読んだ - 技術メモ 2024年09月30日
- 引用 “DDDが関数型プログラミングと相性が良いということはわかる。というかDDDを型のない言語でやるのは無理がある。クラスで値オブジェクトとかいちいち作ってるのだるすぎる。”
- 『関数型ドメインモデリング』勉強会 第2章 ドメインの理解 │ Find out by JURABI 2024年08月29日
- 引用 “本章では、ドメインエキスパートへのインタビューを通じて、ワークフローについて理解することを目指す。そしてそのワークフローを構造化された文章として表現する。”
- 「関数型ドメインモデリング」と合わせて見たい動画 - アウトプッツ 2024年08月25日
- 引用 “「型」「代数的データ型」「コンパイル時ユニットテスト」あたりが大きなキーワードって感じ。”
- 関数型ドメインモデリング勉強会 第一章の感想 │ Find out by JURABI 2024年08月22日
- 引用 “実際のところ、この一章を読むだけでも結構DDDの本質について知見が得られると思う。”
- 『関数型ドメインモデリング』を読んだ - blog.foresta.me 2024年07月21日
- 引用 “DDD 読んでみてじゃあ実際にどうやってコードを書いていこうかといった状況でこの本に出会うと非常に学びが多いと思います。”
- 『Domain Modeling Made Functional』 - mrsekut-p 2024年06月16日
- 引用 “ドメインでの処理の流れをそのまま型で表現しちゃえばいい”
- 【DMMF】ドメインのモデリングについて - UGA Boxxx 2024年01月25日
- 引用 “「顧客は電子メールまたは住所を持っている必要があります。」をモデリングすると以下になりがち …… そうではなく、持ちうる状況分の型を作る”
- Domain Modeling Made Functionalの読書メモ - LabBaseテックノート, Zenn 2023年10月26日
- 引用 “個人的には TypeScript や Rust で実践してみたいと思います。”
- Domain Modeling Made Functional - miyamonz-books 2023年06月20日
- 引用 “DDDを実践するために、FPな言語の型、型システムを使ったほうが簡単で読みやすい書きやすい”
- DMMFを読む - Zenn 2023年05月10日
- 引用 “ビジネスとは単なるデータではなくそれを変換するプロセスであり、そこに価値がある。だからその変換プロセスがどのように機能するかを理解することが重要なのだと。”
スライド
- 「関数型プログラミングのパラダイムはアプリケーション開発に必要なのか?」発表資料 2024年09月07日
- 関数型ドメインモデリングを 非関数型のプログラミング言語で やってみた - Speaker Deck 2024年09月07日
- 古典ドメインモデリングパターンの解脱 - 大吉祥寺.pm - kawasima 2024年07月14日
- TypeScript 関数型スタイルでバックエンド開発のリアル - Speaker Deck 2024年05月11日
- ビジネスロジックを「型」で表現するOOPのための関数型DDD / Functional And Type-Safe DDD for OOP - Speaker Deck 2024年03月23日
- DDDとF# / dotnetConf2019 関西 - slidesare 2020年01月06日
リポジトリ
- https://github.com/kawasima/dmmf-ts Domain Modeling Made Functional in TypeScript
関連書籍(主に日本語)
ドメイン駆動設計
- [入門]ドメイン駆動設計 (増田 亨ほか) 2024年07月01日
- ドメイン駆動設計をはじめよう (Vlad Khononov) 2024年07月20日
- ドメイン駆動設計入門 (成瀬 允宣) 2020年02月13日
- 実践ドメイン駆動設計 (Vaughn Vernon) 2015年03月16日
- エリック・エヴァンスのドメイン駆動設計 (Eric Evans) 2011年04月08日
関数型プログラミング・設計
- 関数型デザイン (Robert C. Martin) 2024年06月10日
- なっとく!関数型プログラミング (Michał Płachta) 2023年08月03日
- 関数型プログラミングの基礎 (立川 察理) 2016年11月18日
- Functional and Reactive Domain Modeling (Debasish Ghosh) 2016年11月01日 ※英語
- [増補改訂]関数プログラミング実践入門 (大川 徳之) 2016年09月24日
F#
- 実践F# (荒井 省三、いげ太) 2011年01月07日
- プログラミングF# (Chris Smith) 2010年08月20日
訳者による関連情報
- F# for Fun and Profit 日本語訳
- 『関数型ドメインモデリング』に関するメモ part1 関数型アプローチと「ドメインモデル貧血症」について
- 『関数型ドメインモデリング』に関するメモ part2 関数型アプローチと「Repositoryパターン」について
- 『関数型ドメインモデリング』に関するメモ part3』 関数型アプローチと「Transaction Scriptパターン」について(作成中)
コミュニティ情報
- Twitter ハッシュタグ: #関数型ドメインモデリング #DMMF_JP