Blog

ドメイン駆動設計社内勉強会を開催しました!

こんにちは!今回ドメイン駆動設計(DDD)についての社内勉強会を開催したので、運営責任者の佐藤、発起人の松尾、ドメインエキスパート役の大里の3名でその様子や学びをブログで紹介したいと思います。

開催に至った背景

昨今のソフトウェア開発において、複雑なビジネスロジックを持つアプリケーションを開発する機会が増えてきています。そんな中、DDDは複雑なドメインを効果的にモデリングし、ソフトウェアに落とし込むための設計手法として注目を集めています。

今回の勉強会では、DDDの第一人者であるログラス松岡 幸一郎さんを講師としてお招きし、DDDの基本概念から実践的な適用方法まで、幅広く学ぶ機会を得ることができました。松岡さんは長年DDDに取り組んでこられた経験から、わかりやすく要点を押さえた説明をしてくださいました。

当日の様子

第1回

第1回のテーマは「モデリング実践講座」。ニフティの実際に提供しているサービスを題材に松岡さんにライブでモデリングを実施していただきました。今回選定したのは「@niftyつなぎモバイル」です。「@niftyつなぎモバイル」は、例えば引越しや事業者変更などの際に、光回線が開通するまでの期間でもすぐにネットが使用でき、しかも@nifty光や@nifty MAX光をご契約のお客様はタダという、とてもうれしいサービスです。回線が開通後もそのまま継続利用(有料)は可能です。

@niftyつなぎモバイル」の料金プランは以下の3つとなります。

ニフティのサービスである@niftyつなぎモバイルの月額料金の画像。つなぎモバイルの料金が開通まで、開通翌月、通常料金と期間によって変更されることが明記されている。

今回はこの「@niftyつなぎモバイル」の料金が決定されるロジックについて、ドメイン駆動設計を使ってモデリングを行いました。これだけでワクワクしませんか?

実況チャンネルも準備して、いよいよスタートです。参加者はこの時点で87名!

松岡さんの「こんばんわ」の挨拶に次々と反応するニフティのエンジニアたち。

DDD勉強会に対する期待度も上がります。

さて、講義のほうは松岡さんおすすめのsudoモデリングを使用して進みます。

sudoモデリングとはなんなのかの説明文
システム関連図、ユースケース図、ドメインモデル図、オブジェクト図の4つのモデル図を作成することが示されている。必要に応じて、状態遷移図やER図を使うことも推奨されている。

ドメインエキスパートとして松岡さんのヒアリングに回答していくのは、「@niftyつなぎモバイル」のシステム担当者の大里さんです。

次々に魔法のように情報を絡め取って、図に落としていきます。このあたりに全く無駄がなく、そして必要な情報を聞き出していくファシリテーション力はさすがです。

それぞれの状態がどのタイミングで変化するのか、またその際の補足情報を吹き出しのコメントで追記していきます。

できあがった図は以下です。詳細はお見せできませんが、雰囲気は掴んでいただけたでしょうか?

出来上がったドメインモデル図やユースケース図。
システムの複雑な関係性が、矢印や四角、人型などを用いてわかりやすくまとめられており、文字の詰まった30近くの図形が並んでいる

トリガーとなるきっかけや関連する人やシステムも多くて複雑ですが、松岡さんのおかげでエンジニアだけでなく非エンジニアでも理解できる状態になりました。

「外部講師の勉強会で過去1よかった」という声もあがるほど、大盛況で第1回目の勉強会は幕を閉じました。

第2回

1回目でモデリングした内容から、実際のコードに落とし込む方法をライブ形式で学んでいきました。

ドメインモデル図やユースケース図をもとにコーディングをしている図。
左側にコードエディタが置かれ、右側にドメインモデルずやユースケース図が並べら、図を見ながらコーディングしていることがわかる

DDDの概念としてドメインモデルや値オブジェクトを学んでも実際のコードに落とし込むとなるとどうすればいいのか・・・と手が止まってしまいがちです。今回の勉強会では、松岡さんのモデリングからコーディングまでの様子を見せていただくことで、机上の空論ではない実践的なDDDの手法を学ぶことができました。

オフライン参加者の様子。
10人くらいの参加者が、共有された画面をプロジェクターを使用してみている
(オフライン参加の様子)

感想:ドメインエキスパートを経験して

言葉での説明が難しかった箇所が図に表されることによって、受講者全員に仕様が共有できたことが体感できました。 slackでの実況で実際にコードを読んだことがないエンジニアの方々にサービスの仕様自体への質問や疑問点が多く挙げられたため、sudoモデリングでサービス関係者の認識を合わせることによる有用性を感じることができました。

知っているサービスでsudoモデリングを説明していただけたため、Youtubeやブログでご説明していただくよりも複雑なサービスでのsudoモデリングの書き起こし方を理解することができました。特にsudoモデリングと主な4つのモデルの違いや図に起こすほどでもない些細な情報の扱い方を理解することができました。 主な4つのモデルの違いについてはsudoモデリングの目的の一つはサービスの共通理解をするというところであるため、しっかりとルールに則ったユースケース図やドメインモデル図などではなくてもよいということでした。ユースケース図やドメインモデル図を作ったことがなかったのですが、sudoモデリングは複雑なサービスを図に起こすことのきっかけにしやすいと思いました。

最後に

今回の勉強会はシステム部門全体に声をかけ、2回合わせると延べ参加人数が150名を超える大規模な開催となりました。社内勉強会でこれほどの規模は運営メンバーとしても初めてということもあり、当日まで様々な心配は消えませんでしたが、終わってみると参加者の満足度が5点満点中4.8点という非常に高い評価をいただくことができました。

松岡さんのDDDに対する熱意や教え導いていただいた力がとても素晴らしかったこと、そして何よりも保守性が高く、またお客様にとって価値の高いサービスを提供したいと思うニフティのエンジニアにとって学びの大きかった勉強会となったと思います。ありがとうございました。

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!