BASEプロダクトチームブログ

ネットショップ作成サービス「BASE ( https://thebase.in )」、ショッピングアプリ「BASE ( https://thebase.in/sp )」のプロダクトチームによるブログです。

俺たちのドメイン"リ"モデリング

f:id:applepine1125:20201203131205p:plain

この記事はBASE Advent Calendar 2020の6日目の記事です。 devblog.thebase.in

こんにちは。BASE BANK 株式会社 Dev Division所属、Software Developer の松雪(@applepine1125)です。

現在、BASE BANK株式会社(以下BASE BANK)内で事業に対する認識を揃え効率良くプロダクト開発を行うために行っているドメインモデリングについてご紹介します。

BASE, BASE BANKのドメインとは

BASE BANKでのドメインモデリングの話をする前に、まずはBASE株式会社(以下BASE)やBASE BANKの事業領域について少しお話しましょう。

BASEでは、誰でも簡単にネットショップを作成できるサービス「BASE」 を運営しており、ショップ画面のカスタマイズや商品の管理、決済、発送、売上管理など、オーナーズが「BASE」上でショップ運営を行うための様々な機能を提供しています。 BASE BANKでは、オーナーズのキャッシュフローを加速させるために、資金調達サービス YELL BANK や売上金を最短翌日に振り込むことができる お急ぎ振り込み機能 など、オーナーズがBASEで作成したショップを通して得た売上にまつわる様々なサービスや機能の開発、運用を行っています。

これらのことからわかるように、BASE BANKの事業はBASEから完全に独立しているわけではなく、むしろBASEと事業面でもシステム面でも密接に結びついています。 そのため、事業運営のためのドメイン知識も共通の概念が多く、サービスや機能の設計、開発ではBASE側のメンバーとコミュニケーションを取りながら進めることがほとんどです。

ドメインモデリングを始めるキッカケ

BASE BANKが設立されてから最近までごく少数のメンバーで開発運用が行われてきたこともあり、事業やシステムに登場する概念とその関係が何らか目に見える形で継続して整理され続けるということはありませんでした。 しかしBASE BANKとしてショップの売上というかなり重要な領域に携わっているため、BASE BANKのメンバーはドメインに対する理解を常に深めていくべきであり、またチームに人が増えてきたタイミングなのでドメインモデリングを通してドメイン知識のインプットも行えると効率がよいのでは、という声があがりBASE BANKのメンバーでドメインモデリング会が開催されるようになりました。

f:id:applepine1125:20201203131341p:plain

自分が入社して日が浅い頃に出したPRの中で、そこそこな量の語彙やロジックの認識合わせが発生し、上記のようにドメインモデリングの機運が高まったのがキッカケでした。

そもそもドメインモデリングとは

そもそもドメインモデリングとは一体何なのでしょうか、ここで一旦おさらいしておきましょう。
Domain Driven Designの著者であるEric Evansは、まずドメインモデルについて

ドメインモデルとは特定の図ではなく、図が伝えようとしている考え方である。
これはドメインエキスパートの頭の中にある単なる知識ではなく、その知識が厳密に構成され、選び抜かれて抽象化されたものなのだ。

と述べています。

そしてドメインモデルの基本的用法、つまりシステムや事業に対しどのように作用するかとして、

1. モデルと設計の核心が相互に形成し合う
2. モデルは、チームメンバ全員が使用する言語の基盤である
3. モデルとは、蒸留された知識である

の3つを挙げています。

モデルと設計の核心が相互に形成し合うとは、つまりモデルとそれに基づいた設計、実装が密接に結びつくことでモデルに価値が生まれ、ソフトウェアが正確であると言えることを示しています。
モデルは、チームメンバ全員が使用する言語の基盤であることで、モデルをチーム内の共通言語とし、エンジニアのみならず同じチームであるデザイナーやビジネスのメンバーとも共通言語を用いてコミュニケーションを取ることで、コミュニケーションとソフトウェアの実装とを深く素早く結び付けられるようになります。
最後の モデルとは、蒸留された知識である が指し示しているのは、先に引用した 知識が厳密に構成され、選び抜かれて抽象化されたもの と同義と考えてよいでしょう。
モデルが "厳密に構成され、選び抜かれ" ていることで、無駄な語彙のブレや認識のズレの発生を抑えることができ、より効率的にメンバーが作業を行えるようになります。

そういったドメインモデルを形成する際、効率的なモデリングの要素として

1. モデルと実装を結びつける
2. モデルに基づいて言語を洗練させる
3. 知識豊富なモデルを開発する
4. モデルを蒸留する
5. ブレインストーミングと実験を行う

の5つをEric Evansは自身の経験を基に導き出しています。
1,2,4はドメインモデルの基本的用法に結びつきそうなのですが、3と5はどういった意味なのでしょうか。
モデルの名前や関係だけでなく、その振る舞い、制約も含めてモデリングすることで、業務に必要な様々な知識をモデルを通して捉える事ができる。そういったことを知識豊富なモデルを開発すると表現しています。
ブレインストーミングと実験を行う ことは、思考実験用に様々なモデルを登場させ、様々なユースケースに適用し使えるかどうかを机上で試すことで、表現や振る舞いが的確かどうかのフィードバックを素早く獲得できるということを指しています。

モデリングにおいていちばん重要なのは、以下の図のようにモデリングの成果物を設計や実装に落とし込んで運用してみて得た新たな知見をモデルに反映させる フィードバックループ(継続的な学習) を構築することです。 f:id:applepine1125:20201203131402j:plain:w500

ドメインエキスパートも含め、事業やシステムについて始めから"完全に"理解していることは殆ど無いでしょう。事業を運営したりシステムを構築、運用していく上で様々な発見をするはずです。"わからないことがわかる(無知の知や不確実性に気づく。と言えるかもしれないですね)"ということもあるでしょう。 そういった発見を無碍に扱うのではなく、意識的にモデルに取り込み、育て、共有し、次の設計や開発に活かすことでドメインモデルの真価が発揮されます。

俺たちのドメイン”リ”モデリングとは

ここまで前提となるBASE, BASE BANKのドメインについてや、ドメインモデリングの考え方について説明してきましたが、ようやくBASE BANKで行っているドメイン"リ"モデリングについてご説明します。

ちなみにタイトルやこの節の名前がドメインモデリングではなくドメイン"リ"モデリング となっていることにお気づきでしょうか。 ドメインモデリングを始めるキッカケ の節で述べたように、これまで体系立てて継続的にドメインの整理を行ってこなかったので、メンバー各々の頭の中に存在するふわっとしたモデルを一度解体し、再構築する。という意味合いを込めドメイン"リ"モデリングと呼びました。

具体的に、ドメイン"リ"モデリングでは、
- 現在運営、開発しているサービスの概念をホワイトボードツールmiro を使ってまず羅列し、ドメインエキスパート(BASE BANK立ち上げ時から関わっているPMやエンジニアなど)に各概念や関係の説明をしてもらう
- その中で他のメンバーも含め質問や議論をしながら、名前(クラス名含む)のブレを修正し、各概念の関係を再検討、再構築していく

といったことをひたすら繰り返していきます。

例を挙げると、振込申請という機能についてドメインモデリングを行った際は以下のような成果物となりました。 f:id:applepine1125:20201203131422j:plain モザイクだらけで申し訳ありません。概念が多数登場して色々な整理を行っていそうだな?というのが伝わればと・・・

ドメイン"リ"モデリングではモデルの脱構築を目的としているので、すでに構築されているシステムの実装(各モジュールやテーブル定義など)に引っ張られないことが重要です。チーム内の議論でも、油断すると現在のシステムではこうなっているから~という論じ方になってしまうため注意深く進めました。

より深くモデリングを行うのであれば、リレーションシップ駆動要件分析(RDRA)やICONIXなどの分析フレームワーク、プロセスを採用すべきかと思いますが、BASE BANKのドメインモデリングではRDRAで言うところの概念モデルのみを作成している段階です。 理由は、BASE BANKが複数サービス、機能を受け持っているため、まずはそれぞれの概念について広く整理することを目的としたからです。
しかしライトウェイトなドメインモデリングだけで終わらせる気はなく、運用していく上でさらにドメインに関する知見を得たり、フィードバックループのイテレーションをより素早く回せるようになったら、より深いモデリングを行っていくつもりです。

ドメイン"リ"モデリングのこれから

そもそもドメインモデリングとは で述べたように、モデルは実装と結びついて価値が生まれます。しかし”リ”モデリングを始めてからまだ日も浅く、すでに構築されたシステムに対して"リ"モデリングしたモデルを適用しようとすると大きく変更が必要となる箇所がいくつかあるため、現状モデルと実装を密接に結びつけられているとは言い難い状況であるというのが課題としてあります。

しかしドメイン"リ"モデリングをきっかけに、追加機能の設計やそれに伴うリファクタリングにおいて、チーム内で作成したモデルを基に活発に議論が交わされたり、カジュアルにドメインモデリング会が開催され設計や実装が行われている様が見受けられます。
また現在新規開発しているサービスにおいても、概念やその関係の整理を丁寧に行いながら開発を進められているので、ドメイン"リ"モデリングはただのムーブメントに終わらずBASE BANKチームに定着していくだろうな、そうなるように今後も継続して既存の実装に対してもアプローチできるようにしていかなければと感じています。

もう一つの課題として、BASE,BASE BANKのドメインとはの節で

BASE側のメンバーとコミュニケーションを取りながら進めることがほとんど

と述べましたが、BASE側のメンバーも含めてドメインモデリング会をやろうとすると大所帯になり機動力が落ちてしまうので、BASE BANKのメンバーのみでモデリングを行っているというのが現状です。 つまり業務上の関係者全員とはモデルを共有できていないということになるので、Eric Evansの言う "モデルは、チームメンバ全員が使用する言語の基盤である" というドメインモデルの基本用法と逸脱してしまっています。
これに関しては、今後業務内で関係者とコミュニケーションを取る際に少しづつ浸透させていったり、ドメインモデリングという活動自体を社内に広めていき、よりコミュニケーションを取りやすくできればなと思っています。

おわりに

以上、俺たちのドメイン"リ"モデリングの紹介でした。

余談ですが、ドメインモデリングを行う過程で各事業のドメインが整理されるだけでなく、BASEの中でのBASE BANKという会社の立ち位置がより明確になったのがとても印象的でした。 f:id:applepine1125:20201203131451p:plain after baseとは、オーナーズがショップで売上を立ててから先のお金の流れとそれに関連する機能、サービス(YELL BANKやお急ぎ振込など)を指す社内用語です。 ドメイン"リ"モデリングを通じて、各事業への理解が深まるだけでなく、それらを運営していく会社そのもののスタンスも明らかになることは今回新たな発見でした。

明日は BASE 株式会社 CSEチームの小林さんです! ではまた。

参考文献