『仮説行動』がドメインモデリングにも役立ちそう
こんにちは、リファクタリング大好きなミノ駆動です。
馬田隆明氏の著書『仮説行動』の知見が、ドメインモデリングにも役立ちそうだと感じたので、記事にしました。
『仮説行動』はどんな本?
仮説とは、その名の通り「仮の説、仮の答え」です。
高い不確実性の中で大きな成果を創出するには、ビジネス課題を解決する質の高い仮説を考案することが重要です。
書籍『仮説行動』によると、仮説に関してはこれまで思考が重要視されていましたが、それだけでは不十分であり、行動が思考以上に大事とのこと。
この考えをベースに、質の高い仮説を導出し、高い成果につなげるためのノウハウが体系的にまとめられています。
ドメインモデルとは
ドメインとは、ドメイン駆動設計に登場する概念です。
ソフトウェアが対象とする事業活動や事業領域のこと。
ソフトウェアは、なんらかの目的を達成するための手段です。
役に立つソフトウェアを開発するには、事業の業務活動において解決したい課題が何か、達成したい目的が何かを考え、解決手段を考案し、実装する必要があります。
ドメインモデルは解決手段です。
業務活動を表現し、業務課題を解決するモデルです。
ドメインモデルを的確に設計することで、ソフトウェアの機能性と変更容易性が向上します。
機能性とは、顧客のニーズを満たす度合いです(←この記事はこちらがテーマ)。
変更容易性とは、バグをなるべく埋め込まず、素早く正確にコード変更できる度合いです。
ドメインモデリングとは
ドメインモデリングとは、ドメインモデルを設計することです。
業務課題を解決するドメインモデルを的確に設計するには、業務知識の把握が不可欠です。
ドメインエキスパートとは、業務知識に精通した人です。
ドメインエキスパートと一緒にドメインモデリングすることが重要であると、ドメイン駆動設計では説いています。
ドメイン駆動設計では、競争優位性を発揮し、差別化を図ることを重要視しています(競争優位性を発揮したい業務領域をコアドメインと呼びます)。
競合他社が押し合いへし合いの中で利益を上げ、ビジネスで勝利し続ける必要があるわけですから、当然ですよね。
したがって、競争優位性を発揮し差別化を図れるドメインモデルを設計する必要があります。
まさに機能性に寄与するモデリングですね。
ドメインモデリングの難しさ
ドメインモデリングは大変難しい設計活動です。
問題解決に寄与する業務ルールを発見まはた発案し、ドメインモデルにカプセル化する必要があります。
すでにコモディティ化された業務ルールをカプセル化しても競争優位性は発揮できません。
差別化のアイデアを捻出すること自体がそもそも困難な知的活動です。
書籍『ドメイン駆動設計』では、競争優位に立つために(他社に模倣されないよう)設計を秘匿する必要があることにも言及しています。
ドメインモデリングをする上では、ロバストネス分析やイベントストーミングなど、さまざまな分析や設計の手法があります。
そうした手法によって確かにドメインモデルは整理されます。
変更容易性は向上するでしょう。
しかし「機能性を強化する差別化アイデアの捻出につながるか?」といえば、なかなかそうとは言い難い側面があります。
『仮説行動』は機能性向上に寄与しそう!
そこで書籍『仮説行動』です。
『仮説行動』には、ドメインモデルの発案や改良に応用可能な知見が、体系的に網羅されていると感じました。
まず、ドメインモデリング自体が仮説の立案と言えます。
なぜなら、業務課題を解決したりユーザーニーズを満たす機能とはどんな機能なのか、それはどんなドメインモデルとして構造化すればいいのか、アイデアを捻出することがドメインモデリングだからです。
実際、本書の「仮説」を「ドメインモデル」に置き換えて読んでも全く支障がありませんでした。
むしろ置き換えて読むことで、ドメインモデリングに役立つノウハウとして解釈し、理解が深まりました。
書籍『ドメイン駆動設計』を含めDDD関係の文献では、ドメインエキスパートと話し合って業務知識を深く理解することを説いています。
しかし具体的にどのような観点で話し合うかについては希薄です。
『仮説行動』には、こうした議論を整理し、質の向上に役立ちそうな、具体的なノウハウがまとまっています。
いくつかについて、私の所見をまじえて紹介します。
ノウハウ例1:仮説の構成要素とドメインモデルの関係性
仮説の構成要素は、『仮説行動』では次のように説明されています。
ドメインエキスパートと話し合う際も、業務内容や課題などエビデンスをまず起点とし、そこから推論を働かせてドメインモデルを考案することに応用できそうです。
何をエビデンスとするか、どう推論するかについても、さまざまなノウハウが解説されています。
ノウハウ例2:「行動」=「実装」
『仮説行動』における「行動」は、「実装」と読み替えられるとも感じました。
不確実性が高い中、ただ思考していても確実性は高まらない、行動することにより新たなエビデンスを学習・獲得し、確実性が高まっていくと、『仮説行動』では解説しています。
ドメインモデリングに関しても同様のことが言えます。
ドメインモデルは一度作って完成ということはありません。
実際に実装してみて、そこから得られた知見をドメインモデルにフィードバックし、モデルを改良し続けることが重要であると広く言われています。
これは私自身にも経験があります。
たとえば私は以前、以下のRPGを制作しました。
このゲームでは、独自のダメージ計算モデルを実装しています。
作りはじめの頃、意図した通りのダメージになっていませんでした。
たとえば、ある特定の敵に大ダメージを出してほしいのに、想定よりもダメージが小さかったり、逆に大きくなりすぎたりしていました。
計算ルールを何度も改良しては実装し、動作させてみて、少しずつ意図したものに近づいていきました。
また、自分が遊んでみて楽しいと感じる手触りのダメージ計算に仕上がりました。
それは単に実装するだけでなく、獲得した結果から学習し、フィードバックする活動そのものでした。
『仮説行動』では、仮説をより確かなものに素早く昇華させるための、行動の指針や考え方が解説されています。
ドメインモデルと実装のフィードバックサイクルをより的確に回す上で、この行動の考え方が役に立つと考えます。
ノウハウ例3:集約の設計と改良に寄与する仮説マップ
そして驚いたのは、仮説を構造化した仮説マップです。
仮説マップは、仮説の全体像を構造化した図です。
上図に示すように、仮説は複数の下位仮説から構成されます。
このように構造化することで、仮説全体の整合性が取れているか、部分的にどこを改良すればいいかなどを俯瞰して評価することに役立ちます。
ところでドメイン駆動設計において、ドメインモデルは集約(Aggregate)として表現されます。
集約は以下に示すように、複数のオブジェクトを所有しひとまとめにするコンポジション構造になります。
構成するドメインオブジェクトそれぞれには、業務ルールがカプセル化されます。
ドメインモデルを改良する際は、個々のオブジェクトの業務ルールについて、全体と整合するように改良します。
これはまさしく仮説マップと同じ性質だと、『仮説行動』を読んでいて感じました。
ドメインモデルの全体像や改良の評価に、仮説マップの考え方が使える考えます。
おわりに
ドメインモデリングでは、変更容易性を高めることばかりが注目され、機能性をどう高めるかについては、これまであまり議論されてこなかったのではと個人的に感じます。
ドメインモデルの発案や改良方法は、世の中的には断片的に語られている印象です。
書籍『仮説行動』には、体系的に応用可能なノウハウが綴られています。
『仮説行動』をベースに、ドメインモデルの機能性……価値を高める設計活動につなげていけるのではと期待感があります。
今後のドメインモデリングに活用していきたいです。
馬田隆明氏の著書は以前から注目しており、問題整理と詳細化のノウハウについて解説した書籍『解像度を上げる』を、私は普段の設計にすでに活用しています。
こちらも併せて読むと良いでしょう。
顧客の役に立つサービスを開発し利益を上げることは、どのIT企業にとっても最大の関心事でしょう。
皆さんもぜひ手にとってみてはいかがでしょうか。