2009年8月24日月曜日

ドメイン駆動を知るために読む本

「ドメイン駆動」とは, (システムの側からではなく)「現実の側」の視点からソフトウェアを作っていく方法のひとつです.


Eric Evansの「ドメイン駆動設計」Domain-Driven Designもそのひとつですし, オブジェクト指向の本来の考え方もそうでしたし, それ以外に源流を持つドメイン分析/設計の考え方もあります.


またユースケースやユーザ中心設計, 問題フレームの考え方なども, 現実の側からのソフトウェア開発の方法のひとつですが, これらはいわゆる「ドメイン」の考え方とは一応区別して捉えられています.


かつては, そして今も「現実をそのままモデリングする」とか「現実から実装までシームレスに開発を行う」とか言うと, 意外なほどに大きな反発を受けることが, ままあります. その人たちは言葉をあまりにナイーブに捉えています. 「モデリング」とはそもそも「特定の視点からの解釈すること」ですから, 「そのまま」とは「まったく同じように」ということではあり得ません (それではモデリングでも何でもありません!). そうではなく, それは「現実の側に立って」モデリングを行う (= 世界を見る, 世界を作る) ことを意味しています.


同じように, ソフトウェア開発は変換/解釈の過程ですから, いくら「シームレス」と言ったからと言って, まったく段差なく変換が行われるわけはありません (まったく段差がなければ自明の結果しか得られません). それは, 「できるだけ変換のギャップを小さくするような」「何らかの意味論を保存するような」変換過程を意味しているだけなのです.


ドメイン駆動のさまざまな方法論については, 一般的なモデリング, パタン, アジャイル開発の知識に加えて, 例えば以下のような書籍を参考にして下さい.



Domain-Driven Design - Tackling Complexity in the Heart of Software, Eric Evans, Addison-Wesley, 2004


きわめて重要な本なのですが, 邦訳されていません. ただし, よい解説「DDD難民に捧げるDomain-Driven Designのエッセンス」(佐藤 匡剛) やAbel Avran, Floyd Marinescuによる縮約版の翻訳「Domain-Driven Design Quickly 日本語版」があります.


Object Design - Role, Responsibilities, and Collaborations, Rebecca Wirfs-Brock and Alan McKean, Peason, 2003


これも「ドメイン駆動」とか言われるずっと前からある, オブジェクト指向の古典で, 責務駆動の考え方ですが, 密接な関係があります. 邦訳もあります.


コンバージェント・エンジニアリング入門 - オブジェクト技術によるBPR, デビッド・A・テイラー, トッパン, 1996


縦書きの薄い (228ページ), 小さい, 古い本ですが, ドメイン駆動がユーザからどう見えるか, どういう効果を与え得るかを的確に示しています.


ドメイン分析・モデリング - これからのソフトウェア開発・再利用 基幹技術, 伊藤潔他編著, 共立出版, 1996


これはオブジェクト指向ではないドメイン駆動の, 特にモデリングや分析などいわゆる「上流」を扱っています. これも古い本ですね.


Executable UML - MDAモデル駆動型アーキテクチャの基礎, スティーブ J. メラー and マーク J. バルサー, 翔泳社, 2003


Eric Evansのドメイン駆動が開発の前半を押さえているとすれば, ドメイン・モデルを動くものに落とし込んでいく過程がモデル駆動です. この両方は車の両輪と言えるでしょう.


ビジネスパターンによるモデル駆動設計, Pevel Hruby, 日経BP, 2007


Eric Evansのとは違いますが, ビジネス分野における具体的なドメイン駆動と言ってもいいと思います. REAというオントロジをベースにしており, アスペクトを使ってモデル駆動で実装しています.


企業情報システムの一般モデル - UMLによるビジネス分析と情報システムの設計, クリス・マーシャル, ピアソン・エデュケーション, 2001


まさに書名の通りです. ただしこれは入り口である, モデリングのところで終わっています.


結構多くの本を並べてしまいましたが, この中で必読書と言えば, 最初の2冊, Domain-Driven DesignとObject Designでしょう. それ以外は副読本, 参考書で, 領域や必要に応じて手にすればいいと思います.


マイアソシエイトストア - ドメイン駆動



カテゴリ (圏論), トポスを知るために読む本

カテゴリ (圏論) とはブルバキ流の集合論とは対照的に, 存在 (集合) ではなく, 関係 (射) を基礎として数学を再定義するものです. 元々は代数幾何学の世界から出たものですが, 自分が関心があるのはトポスなど基礎論的な方面でした. 計算の意味論や型理論, 線形理論など, 計算機科学とも密接な関係があります.


興味からカテゴリ (圏論) を学んでみようと思っている非専門家の方のために, 手元にある参考書を挙げてみます.



層・圏・トポス - 現代的集合象を求めて, 竹内外史, 日本評論社, 1978


古典的な (日本語の) テキストですね. 僕は多分これを読んで圏論を知ったと思う. ぶっ飛んだ.


圏論の基礎, S.マックレーン, シュプリンガー・フェアラーク, 2005


これこそ古典的なテキストの第2版. "Categories for the Working Mathematician"という原書名どおり, トポス方面には行きません. 基礎論屋は働いていないから:-)


数学 - その形式と機能, S.マックレーン, 森北出版, 1992


そのマックレーンが晩年に書いた, 数学における「対象」を通観した読み物. 自然数に始まり, トポスに終わる. 分厚くて, 高価な本ですが, ぱらぱらめくると面白いです.


有限の数学 - 新しい集合論, 森毅, 明治図書, 1971


集合の代わりに圏の言葉で初等数学の書き直しを試みています. 初等学校の教育者向けですから難しくありません. 森さんらしい洒脱さが楽しいですが, 残念ながら絶版です.


圏論による論理学 - 高階論理とトポス, 清水義夫, 東京大学出版会, 2007


名前のとおりの本です. でも丁寧に書かれているし, 著者のもくろみ (トポスを普遍論理と言っていいのではないか) も明確で読みやすいのではないでしょうか.


Toposes and Local Set Theories - An Introduction, J. L. Bell, Dover, 1988


これ以降は英語の本です. 最初の数十ページで, 圏論の定義からトポスまで行ってしまい, その後はLocal Set Theories (つまり, 古典的な集合論) とトポスの関係が中心です. 前に挙げた「圏論による論理学」とは領域は同じですが, 方向性が違います.


Topoi - The Categorical Anaylsis of Logic, Robert Goldbaltt, Dover, 2006 (2nd. ed.)


確か初版は1980年頃に出ていたような気がします. 当時はトポスに関する標準的なテキストだったと思います.


Computational Category Theory, D.E. Rydeheard and R.M. Burstall, Printice Hall, 1988


これと次の2冊はどちらかというと計算機科学のテキストです. 1980年代後半に, 圏論と特に型理論などとの関係が重視されてきます. このテキストはML (!) でカテゴリを表現するもので, ソフトウェア屋にとっては面白いのではないでしょうか.


Basic Category Theory for Computer Scienteists, Benjamin C. Pierce, MIT Press, 1991


これも計算機科学関係者向けのテキストで, 仮想的な関数型言語に対応するカテゴリを例にとり, 薄い本ですが, 最後にはD. Scott流の計算意味論を与えています.


Conceptual Mathematics - A first introduction to categories, F. William Lawvere and Stephen H. Schanuel, Cambridge University Press, 1997


これぞ真打ち, Lawvereのテキストです. 彼のテキストは普通の数学のテキストとは違う, 何か生き生きとした感触がそのまま現れているような感じがあります. 自分にとっては結局Lawvere流のToposがいちばんしっくり来るようです.


Synthetic Differential Geometry, Anders Kock, Cambdrige Univertisy Press, 2006


真打ちとか言いながら, まだ出てきます. この本は実は手元に原稿のコピーしかないのですが, ε-δ式の微分が理解できない自分にとっては, 重要な本でした. 要は基礎論の人間 (の一部) に取っては受け入れがたい微積分学を, コーシー流ではない圏論的に (直観主義的と言ってもいい?) 定式化しています. その基本はLawvere流のトポスです.


追記: これを書いた直後に2006年の版を買いました. しかし... なんかとても大がかりな話になっているような気がする... 1982年頃にはもっと素朴だったような気が...


マイアソシエイトストア - カテゴリ (圏), トポス