株式会社スタディスト

DDDをベースにシステムデザインにチームで取り組む


ビジュアルSOPマネジメントプラットフォーム「Teachme Biz(ティーチミー・ビズ)」を運営するスタディスト。サービスの拡大が進む中で設計に課題を感じていたWindowsアプリチームにDDD(Domain Driven Design:ドメイン駆動設計)をベースにしたシステムデザインの並走コンサルを提供しました。

※ SOP:標準作業手順書(Standard Operating Procedures)
※ 並走コンサル:レヴィのメンバーもプロジェクトに入り、システムデザインやモデリングについてのプロセス設計、レクチャー、壁打ちを行いながら実施するコンサルをこう呼んでいます。

今回の取り組みについてWindowsアプリチームの島田さん、有冨さんにお話を伺いました。

笑顔が素敵なお二人(左:有冨さん、右:島田さん)

Windowsアプリチームはどういうことをやっているんですか?

島田さん

Teachme BizのWindowsデスクトップアプリの開発保守をやっています。

Windowsデスクトップアプリはお客様の現場では評価が高いようで、営業やCSの人からお客様からの良いフィードバックを聞くことが多いです。ただ、2016年にリリースしてから4年がたち、継ぎ足しで機能を追加してきた結果、不具合報告もかなり多くなってきていました。また、Webアプリとの開発リソース差やそもそものコンセプトをどうするか、といった問題もあり、今回大きくリニューアルすることになり、その中でDDDをやってみようという話になりました。

どうしてDDDをやってみようと思ったのですか?

島田さん

きっかけはDDDの勉強会に行ったことですね。そこで、良さそうだな、という感触を得て、しばらくは有冨さんと一緒にボトムアップ方式で元々のアプリのリファクタリングを少しずつ進めていました。

有冨さん

Value Objectを作ることで、引数にStringではなくて何を渡せば良いかが分かる、安心できるというメリットはすごく実感できました。一方で、ボトムアップでやるだけでは大きく手を加えられないということも分かってきて、リニューアルのコンセプトの見直しも同時期に進んでいたので、この取り組み自体は3ヶ月くらいで終わりました。

他チームも含めたシステムデザインについてのヒアリング

リニューアルのタイミングでDDDへの取り組みを変えたんですね?

島田さん

はい、リニューアルでは、今までのアプリと同じ機能を再実装するのではなく、Teachme Bizというプロダクト全体からみてWindowsアプリはどうあるべきかを捉え直しました。その結果、Webブラウザ版アプリのプラグインとしてのWindowsアプリという全く違うコンセプトが見えてきました。

ボトムアップでのDDD自体は悪くなかったのですが、そのまま進めても今と全く違うコンセプトのアプリケーションにたどり着かなそうなので、じゃあどうしようか?という時にちょうどレヴィと一緒にDDDしてみるという選択肢が出てきました。戦術だけでは限界が見えたので戦略側にもいってみたという感じでしょうか。

有冨さん

最初はレヴィさんと一緒にユーザーストーリーマッピングをして、付箋で業務フローをモデリングしながらユーザーが業務の中でどうWindowsアプリを使いたいのか、を少しずつ明らかにしていきました。

その後、週一回の打ち合わせの場でドメインモデルを作成するワークショップを行い、その後の一週間でコードを書いて、それに対してレヴィさんにフィードバックをもらう、ということを繰り返しながら少しずつ考え方や具体的な実装方法を学んでいった感じですね。

業務フローをベースに重要な概念をモデリングする
登場する概念を整理

今回の取り組みはどうでしたか?どんな変化がありましたか?

島田さん

まず、非常に良かったですよ(笑)

伴走してくれるのでいつでも相談できる安心感がありましたし、どんな質問でも何かしらのリアクションが返ってくるので非常に心強かったです。もちろんすぐに答えが見つからないこともありますが、その場合も一緒に悩んでくれるので、親近感が上がりました(笑)

振り返ってみると、これまでは「このクラスがー」というような実装に近いところで議論が多く、「業務」としてユーザーがこのアプリケーションをどのように使うか、ということに焦点を当てられていなかったです。今回、実装から離れて、ユーザーの利用シーンを想定しながら議論できるようになったのが良かったです。アプリケーションがあって、ユーザーがいて、ユーザーを含めたその世界を適切にソフトウェアに落とし込むには?というのを考える視点ができた気がします。

有冨さん

システムの変更がどこからくるのか?という話が一番印象に残っていますね。これまでDDDのようなアーキテクチャーを入れるとなるとシステム的に区切っていくという印象で、あまり本質的なことができない気がしていたのですが、システムの変更がユーザーサイド・業務からやってくるので、その粒度で分けるという発想が生まれて納得感のある設計ができるようになってきたと思います。

そういう意味では、もう、ちゃんと設計せずにコード書けなくなってしまったなと。とりあえず動くものを作ろう、という場合は良いんだけど、メンテナンスし続けるプロダクトはモデリングしてから進める方が圧倒的に早いという実感があります。書きながら考えるより、変更していくスピードが圧倒的に早い。

今後どうしていきたいですか?

有冨さん

DDDや設計の話ってふんわり抽象的な話が多くて取っつきづらいと思ってます。一方ですごく大事だと思うので、広めていけるように体系化して学べるようになると嬉しいなと。個人の活動では限界があるので、レヴィが企業の枠組みを使ってビジネスにして提供して欲しいですね(笑)

あと、クライアントアプリにとってAPIが境界になるので、そこをちゃんとモデリングしたらどうなるんだろう?というのは気になってますね。

島田さん

巷で言うDDDは、ボトムアップ的なイメージが先行している気がしていて、それはそれでいいと思うのですが、レヴィには「DDDに真っ正面から取り組むのは大事だよ」的なことをもっと主張して欲しいですね。アプローチの違うパターンがあるぞと。

また、今回はWindowsアプリの話だけでしたがTeachme Biz全体としてもちゃんとモデリングして、もっと設計の話をできるようにしていきたいですね。

ありがとうございました!