CureApp開発者ブログ

アプリで治療する未来を創造するCureApp, Inc. のエンジニアブログです

DDDの勉強会 DDDConf01を開催しました!

さて、昨日5月11日、DDDConf01を開催いたしました。 場所はいつもお世話になっている表参道にある青山アクセラレーションセンター。 会場は満員で、いつにもまして大盛況で終えることができました。 お越しいただいた方、ありがとうございました。 トーマツのスタッフの方、遅くまで対応いただきありがとうございました。 f:id:cureapp-dev:20160512094659j:plain f:id:cureapp-dev:20160512094606j:plain

内容

今回ご登壇頂いたのは、DDDを社内で実践している4社。 弊社のほかasoview!さん、ChatWorkさん、UZABASEさんです。

asoview! 藤岡さん

www.slideshare.net

非エンジニア含め納得したユビキタス言語「チケットブック」がブレイクスルーとなり、より深いモデリングに到達したという 社内の事例をご紹介いただきました。言葉とGoogle画像検索結果がチーム全員の理解を助けることにつながったとのことで、DDD実践のメリットとしての良い例でした。

ディスカッションテーマは、「DDDにドキュメントは必要なのか?」。 詳細なドキュメントは不要という大枠は各パネラーで一致していましたが、 コードそのものが仕様なのか?ということには両論ありました。コードには大枠の意図が入らないと加藤さんは指摘しました。 その他、

  • 自動ドキュメントで担保
  • テストケースで担保
  • モデル図だけは作る

といった話題がのぼりました。

ChatWork 加藤さん

集約を適切に決めないとデッドロックが発生する事例を紹介していただきました。 集約の境界を決めるうえでは、

  • writeがどこに多数発生するのか
  • 削除した際に集約内モデルは同時に削除されるようなものなのか
  • 集約の制約条件の整合性をどのレベルで担保するか

等考慮すべきポイントをわかりやすく挙げていただきました。

ディスカッションでも、他のパネラーがどのように集約を扱っているかという話題になりました。 無限なデータと有限なデータで分ける、などの例が出ました。 UZABASEさんの発表も集約レベルでキャッシュすることの話で、 「集約」は今回の勉強会での重要なワードとなりました。

UZABASE 杉浦さん

newspicksのBtoB広告配信サービスを遅延なく行うという段階でDDDを採用し、 高速化につながったという事例を紹介していただきました。 データを集約レベルでキャッシュすることで、すべてのビジネスロジックをローカルに完結して適用可能となり、 高速化につながったと。トランザクション境界と集約は単位としてほぼ同一だ、という話でした。

ディスカッションは、「チームにいかにDDDを浸透させるか」。

  • Pull Requestのフィードバックによる教育
  • 非エンジニアを含めたワークショップ

などが挙がりました。ワークショップの例としては、加藤さんから「自動販売機のモデリング」の例がありました。 皆、「釣り銭」という概念に気づかないけれどそこがないとサービスを完遂させることはできず、さらによいUXを提供するには 釣り銭効率という概念を知っている必要がある、など題材としてとても興味深いものでした。

CureApp 鈴木

DDDの考え方に基づいて1から実装した時に、ビジネスロジック以外のコードを書く手間が大きかったため、 それをまとめてbase-domainというライブラリに落とし込んだという話をしました。

  • factoryにおいて、入れ子になった集約などのモデルを生成するロジックが複雑になりがち
  • repositoryの中でインフラ層のコードが書かれすぎる
  • クラスの呼び出し方法を統一しないと依存関係が複雑になる

などの問題を解決するためのJavaScriptライブラリです。インフラ層の切り分けができること、またUniversal JSにこだわり どのプラットフォームでも動くように設計しています。

ディスカッションテーマは、「DDDに向いた言語は?」。 クラスという概念で書き通したいということからJavaを推すという観点や、言語はステージに合わせて変えてよいという意見がありました。 スピードが求められるフェイズではコンパイルの要らない言語での高速なイテレーションが重視され、 安定・継続・大規模を目指すフェイズでは型がある言語は開発を助けるだろうと考えています。 弊社は、ビジネスロジックはプラットフォーム依存しないべきという理由からJSを採用していますが、 今後はSwiftC#などの言語にも注目です。

まとめ

DDDに興味のある方々が集まって雑多にDDDのトピックを話すことができました。 今後は、もっともっと深い部分を議論できるような熱い場になるといいなと思います。 自身も勉強になり、とても刺激的な場でした。