39
ビッグローブ × DDD 〜ドメイン駆動設計の現場〜 ファーストサービスのリリースまでの活動

20150616 dev love発表資料

Embed Size (px)

Citation preview

Page 1: 20150616 dev love発表資料

ビッグローブ × DDD〜ドメイン駆動設計の現場〜ファーストサービスのリリースまでの活動

Page 2: 20150616 dev love発表資料

自己紹介氏名 大西 真央(@mmmmao0530)

組織としての役割 DDD布教活動

チームとしての役割 リードエンジニア(技術リーダー)

最近の関心ごと ・効果的なドメインモデル作成

・チームビルディング

Page 3: 20150616 dev love発表資料

太陽系戦略

Wifi

0A0

モバイルコラボ関連会員

VAS特典

商品契約

トリトン

冥王星海王星土星

木星

火星地球

ドメイン駆動設計の拡大

認証

金星

第二世代

時間軸:2年

今回話すところ

Page 4: 20150616 dev love発表資料

アジェンダ① ファーストリリースまでの道のり

② DDD導入後の変化・成果

Page 5: 20150616 dev love発表資料

ファーストリリースまでの道のり

Page 6: 20150616 dev love発表資料

概略

2013/06 2014/02

Page 7: 20150616 dev love発表資料

①DDD手法の模索

Page 8: 20150616 dev love発表資料

増田さんDDD導入支援として、外部講師を呼んで

週1回くらいのペースで、支援してもらった。

DDDのコンセプトを説明

具体的なDDDの進め方を説明

ドメインモデル・コードのレビュー

Page 9: 20150616 dev love発表資料

実践の場

2013年2Qに新サービスが開始予定

新旧のアーキテクチャで平行開発あわよくば、新でリリースする(はずだった)

Page 10: 20150616 dev love発表資料

新サービスの内容

Page 11: 20150616 dev love発表資料

新サービスの仕様 その①① 「BIGLOBE LTE・3G」もしくは「BIGLOBE 3G」の契約者が利用可能。

② 利用する端末のMacアドレスの登録・変更・削除の管理が可能。

③ 「BIGLOBE LTE・3G」もしくは「BIGLOBE 3G」を解約すると、連動して対象のMacアドレスも削除。

④ Macアドレスの変更可能回数は月2回まで(同月内の削除⇒登録も変更とみなす)

Page 12: 20150616 dev love発表資料

新サービスの仕様⑤ 登録できるMacアドレス数は、 「BIGLOBE LTE・3G」もしくは「BIGLOBE

3G」の料金プランによって異なる。

⑥ 登録されたMacアドレスで、WiFiを利用可能にする。

⑦ WiFi利用実績が90日間なければ、Macアドレスが削除。

Page 13: 20150616 dev love発表資料

開発チームの編成

新アーキテクチャチーム 旧アーキテクチャチーム

相互連携

Page 14: 20150616 dev love発表資料

まず、初めにやったこと

守破離の守を実践

Page 15: 20150616 dev love発表資料

Biglobeで作られた初めてのドメインモデルアプリケーション層 ドメイン層 インフラストラクチャ層

今見ると、関連がないのでよくわからないドメインモデル

エンティティとか

値オブジェクト

Page 16: 20150616 dev love発表資料

ドメインモデル⇔コードへ①同じ機能を

個人ごとに開発

②開発チームで

気づきの共有

③個人の開発に

フィードバッグ

④増田さんに

質問・レビュー

⑤作ったやつを壊して

0から開発

Page 17: 20150616 dev love発表資料

意識した点手続き型に縛られないために、オブジェクト指向設計に完全に振り切ってみた。プリミティブな値は、全て値オブジェクトでラッピングGetter・Setter禁止1行につき1ドットまで可能な限りIF文を除外などなど

※オブジェクト指向エクササイズとほぼ同じ考え方を導入。

Page 18: 20150616 dev love発表資料

結果 リリース断念

旧のアーキテクチャを

リリース

アプリケーション

コードが

間に合わず

インフラが

間に合わず

Page 19: 20150616 dev love発表資料

次サービスへの万全の準備リリースできなかったサービスを最後まで完遂(未リリース)

アーキテクチャ全体コンセプトの再整理

アプリケーションから利用されるライブラリの整理

インフラの整備

ビルドツールの変更(MavenからGradle)

Page 20: 20150616 dev love発表資料

②ファーストリリースへ

Page 21: 20150616 dev love発表資料

対象サービス

失敗したWi-Fiスポットに再チャレンジ

旧→新にアーキテクチャをリニューアル

機能強化

を同時に実施。

Page 22: 20150616 dev love発表資料

チーム編成新アーキテクチャチーム:5名 旧アーキテクチャチーム:3名

融合

一つのチーム:8名

Page 23: 20150616 dev love発表資料

1チームにした理由

今回、失敗するとDDD導入活動が白紙になる可能性があったので、自分たちで退路を断った。

Page 24: 20150616 dev love発表資料

僕達の心境・状況

Page 25: 20150616 dev love発表資料

開発したモデル

守破離の破をちょっとだけ実践

ユースケースフロー図

ユースケース記述だと、細かい内容も記述する必要があったので、自分たちのスタイルと不一致

Page 26: 20150616 dev love発表資料

例:ユースケースフロー図

ざっくりとした処理の流れと責務がわかればよい

処理の流れ

アクターアクター

Page 27: 20150616 dev love発表資料

苦労した点①

旧メンバへのDDDの伝え方がわからない旧メンバが不安でいっぱい

早い段階でコード作成して、まずはコードで共有

新アーキテクチャチーム

DDD暦 6ヶ月旧アーキテクチャチーム

DDD暦 0ヶ月融合

Page 28: 20150616 dev love発表資料

苦労した点②

新アーキテクチャ

旧アーキテクチャ20年分の貴重な資産

旧アーキテクチャの資産を有効活用するための腐敗防止層

Page 29: 20150616 dev love発表資料

祝:リリース

約8ヶ月かけてようやくリリース。

Page 30: 20150616 dev love発表資料

リリース後

約1ヶ月間

ドメインモデルから

リファクタリングを実施。

Page 31: 20150616 dev love発表資料

DDD導入後の変化・成果

Page 32: 20150616 dev love発表資料

変化① 上流設計

特定メンバで実施

全員で実施(理由は次のスライド)

Page 33: 20150616 dev love発表資料

変化② 業務

業務を理解しなくても開発可能

業務をコードで表現するため

業務を理解して開発することが必須

Page 34: 20150616 dev love発表資料

変化③ 自動テスト

自動テスト環境がなかった

自動テスト環境整備

Page 35: 20150616 dev love発表資料

変化④ 仕様変更

自動テストがないので、場当たり的な対応のみ

ドメインモデルから見直してベストな設計・実装を模索

Page 36: 20150616 dev love発表資料

変化⑤ 環境

独自言語なので外部から調達不可惰性で開発

成長しないと不要扱いされる危機感も刺激的

Page 37: 20150616 dev love発表資料

成果①

過去何度もトライして、

成功しなかった

旧アーキテクチャからの進化に成功

Page 38: 20150616 dev love発表資料

成果②

DDD全展開 決定

Page 39: 20150616 dev love発表資料

ご静聴ありがとうございました。