個人開発シリーズ2:ドメインモデリング

こちらの記事の続きになります。

moai510.hatenablog.com

今回は前回学んだ知識をもとに、ドメインモデリングを行います。 いきなり大きな規模で作ると終わりが見えず、個人開発としては厳しいので、まず解決したい問題を絞ってモデリングを行なっていきたいと思います。

目標はシリーズ0で書いた通り、個人投資家でもVCなどと同じ水準の投資活動が行えるようなツールを作ること」でした。そのために必要なものとして、ドメインについて学んだ結果、以下の二点が思いつきました。

前者は最も重要な素養であり、VCの能力に直結する部分ですが、個人投資家において解決は簡単ではないため、先に後者の実装を進めようと思います(といってもここでは一旦VCと同様な業務フロー管理を可能にする部分のみ)。つまり今回のモデリングでは後者を対象に行います。

とりあえず重要な用語・概念を挙げてみる

スモールスタートでいきたいので、ひとまずこんな感じでしょうか。

名称 説明
ユーザ 個人投資家として投資活動を行う主体。本ツールで支援する対象。
業界 企業を業種や取り扱い商品等により分類する概念。
企業 ユーザにとって以下5つの投資活動を行う対象。
Deal Sourcing 投資先を発掘する業務。
Due Diligence 発掘した投資先候補を詳しく検討するフェーズ。
Exection Due Diligenceで決定した投資先に投資額と期間等を定め、投資の実行をするフェーズ。
Monitoring 投資先の監視・観察を行うフェーズ。
Exit 利益を確定させるために売却を行うフェーズ。
運用実績 ユーザの上記投資活動の実績・成績。

まず先に難しかった点:動詞どうしよう()

※深夜2時を回りました

上記用語でも書いたVC業務フローのモデリングが今回の最も重要な点になっていると思います。 ただし、上で挙げた業務フローに関する概念(Due Diligence等)は動詞的な意味合いを持つ単語なんですが、「あれ動詞ってどうしよう??」となり、ドメインモデルとして定義することに難しさを感じました(一般的にドメインモデル=名詞だと思いますし、動詞だと他との関係性の定義も難しい)。

とはいえ、本ツールを実装する上でこの部分のモデリングは最も重要なものであるため、蔑ろにするわけにもいかないという状況でした(動詞だとしてもドメインモデルに落とし込んでみようと考えを巡らせたりはしましたが、これはすぐに破綻しました。。)

ではどのようにして解決したかというと、新たに適切な名詞を見つけることで解決につながりました。元々下図の通り、ユーザの投資対象として企業が直接関係を持つ形で定義してしまっていたのですが、

f:id:moai510:20210912023225p:plain:w450

下図のように、「投資案件」という名詞をドメインモデルとして捉え、ユーザと直接関係を持たせる対象としました。

f:id:moai510:20210912023411p:plain:w300

これにより、「Deal Sourcingは新しい"投資案件"の発掘・追加すること」、「Due Diligenceは投資案件を検討・分析すること」、「Exectionは投資案件に対して投資を実行すること」など、VC業務フローの全てがこの名詞に紐付き、これらの動詞が全てこのドメインモデルを操作する行動であると捉えることができました。この気づきを得たきっかけはユースケース図を書いたことなので、よくドメインモデリングユースケース図書くのが大事と言われてますが、それを体感できたので良かったです。

f:id:moai510:20210912032433p:plain

今回のように動詞どうしよう問題(ドメインの重要な概念が動詞になるケース)って、モデリングの仕方が悪いのか、一般によくぶち当たる問題なのかは分かりませんが、今回のように適切な名詞を発見するのが一つの解決策になりそうということは発見でした。

また、この辺りのモデリングをしながら気づいたのですが、Deal SourcingやDue Diligenceの具体的な部分のモデリングについても、名詞化やその動詞の成果物を対象に考えると意外と関係を捉えられるようになることにも気づきました。最後の節で具体的なドメインモデル図を示しています。

コンテキストマップ

だいぶドメインモデルも端折って簡略化してますが、とりあえずこんなイメージです。よくあるシステム上のユーザ概念と境界を引くためのコンテキストに加え、将来的に企業向けとしてスタートアップと個人投資家を紐付ける機能とかもあると面白そうと思い、そのためのコンテキストを追加してたりします(今のところ実装対象ではないですが、拡張機能として考慮に入れておくという意味で)。コンテキストが変わるとドメインモデルの意味合いや関係性がかなり変わる想定ですので、今のうちに明確化しておきます。

f:id:moai510:20211013005107p:plain

ドメインモデル

ひとまずざっくりとなモデリング図を書いています。ここまで述べたように、重要な概念である投資案件(InvestmentItem)が中心にきて、それぞれの関係をざっくり示しています。

※実装進めたり進捗が出たらもう少しちゃんとしたものに差し替えるかも

f:id:moai510:20211013010252p:plain

また、「Deal Sourcing => Deal Sourceと案件発掘の元となるものをモデリングすることに」、「Due Diligence => Due DiligenceArtifactsと分析結果の成果物をモデリングするように」考えることで、↑のように関係を捉えることができるようになりました。 後でその辺の開発を進めるときのために、今のうちに含めています。

このように、動詞だとしてもその意味を理解し、適切な名詞に置き換えることで、ドメインの関係が捉えやすくなるということが発見でした(DDDばんばんやってる方からしたら当たり前かもしれませんが)。

他にも、同じUser、Companyというモデルでも、コンテキストが異なると意味合いが異なるので、今のうちからそれをモデル図に表現しています。

それでは開発の一歩として、今回モデリングした部分をコードに落とし込んでいこうと思います。それではまた来週(...来月かも)。