Slide 1

Slide 1 text

DDDを突き詰めていったら、 イベントソーシングに 流れ着いた話 4社に聞く、いつの間にかできていたドメイン駆動設計 #ROSCAFE

Slide 2

Slide 2 text

⾃⼰紹介 ⾼丘 知央 ( Tomohisa Takaoka ) 株式会社ジェイテックジャパンCTO C#イベントソーシング‧CQRSフレームワーク Sekiban メンテナ 鉄道指向プログラミングライブラリ ResultBox 開発 ⽶国カリフォルニア州ロングビーチ在住(ロスの近く) ● X : @tomohisa ● Github : @tomohisa ● Linkedin : tomohisatakaoka ⾃作キーボード、3Dプリント⾃作トラックボール製作など Microsoft MVP Developer Technologies (Web Development, .NET) 2024 - new #ROSCAFE 🆗

Slide 3

Slide 3 text

株式会社ジェイテックジャパンの紹介 ● 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 ● New York 所在 J-Tech Creations, Inc. と 協業 ● B2C / B2B アプリケーションを 開発‧運⽤するソフトウェア開発企業。 ● .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。 #ROSCAFE 🆗

Slide 4

Slide 4 text

概要 DDDを突き詰めていったら、 イベントソーシングに流れ着いた話 1. 前提 - 常に成⻑するアーキテクチャ 2. DDD導⼊からより良いDDDを⽬指して 3. イベントソーシングとDDDの関係 4. まとめ #ROSCAFE 🆗

Slide 5

Slide 5 text

DDDを突き詰めていったら、 イベントソーシングに 流れ着いた話 1.前提 - 常に成⻑するアーキテクチャ

Slide 6

Slide 6 text

#ROSCAFE 🆗 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 1.前提 - 常に成⻑するアーキテクチャ Rather than construction, programming is more like gardening. (ソフトウェアは建築というよりもガーデニングに 近い) Audy Hunt (Pragmatic Programmer) (達⼈プログラマー)

Slide 7

Slide 7 text

#ROSCAFE 🆗 アーキテクチャも⽣き物 ● ユーザーの規模が変わる ● ユーザーの⾔語が変わる(多⾔語対応) ● ⾮機能要件が変わる ● 実⾏環境が変わる ● セキュリティ要求が変わる ● 技術トレンド ● 開発メンバーが変わる ● チームメンバーの成⻑ ● 前回より改善できる点が⾒つかる ➡アーキテクチャも常に成⻑が必要 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 1.前提 - 常に成⻑するアーキテクチャ

Slide 8

Slide 8 text

#ROSCAFE 🆗 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 1.前提 - 常に成⻑するアーキテクチャ Old is when you stop learning and growing, and I'm still learning every day. (年寄りっていうのは学びも成⻑もしない⼈のこと だ、⾃分は毎⽇成⻑しているから該当しないな) 最近話した60代の友⼈ アーキテクチャも常に成⻑しないと⽼朽化する

Slide 9

Slide 9 text

#ROSCAFE 🆗 常に成⻑するために ● ユーザーの規模が変わる ● ユーザーの⾔語が変わる(多⾔語対応) ● ⾮機能要件が変わる ● 実⾏環境が変わる ● セキュリティ要求が変わる ● 技術トレンド ● 開発メンバーが変わる ● チームメンバーの成⻑ ● 前回より改善できる点が⾒つかる DDDを突き詰めていったら、イベントソーシングに流れ着いた話 1.前提 - 常に成⻑するアーキテクチャ } 監視やフィードバックによる学び } 開発技術や基盤技術のトレンドの学習 } 開発者やコードの質の向上や底上げ ➡⽌まらずに変化に対応し、少しずつでも継続して向上していくことが組織としても個⼈としても重要

Slide 10

Slide 10 text

DDDを突き詰めていったら、 イベントソーシングに 流れ着いた話 2.DDD導⼊からより良いDDDを⽬指して

Slide 11

Slide 11 text

#ROSCAFE 🆗 DDD開始前 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 2.DDD導⼊からより良いDDDを⽬指して ● MVC with Fat Controller ● スキーマ駆動設計 ⬇ ビジネスロジックの分散 メンテナンスコストの増⼤ なんとか納品はできていたがクオリ ティの点での改善点はたくさんあった マネージャーの⼀⼈が 『DDDというのがいいらしい』 ⬇ ⼀部のプロジェクトで試験導⼊ ⬇ 学習コストが⾼そうだが既存の問題の 解決になりそうなので新規プロジェク トに導⼊。(この時点で皆DDD初⼼ 者) ⬇ 成功するかはっきりわからない中で新 しいことに挑戦する勇気

Slide 12

Slide 12 text

#ROSCAFE 🆗 DDDでの最初のプロジェクト進⾏中 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 2.DDD導⼊からより良いDDDを⽬指して 会社で皆に本を買って勉強 ● エリックエヴァンス ● ヴァーノン実践DDD ● 成瀬さんドメイン駆動⼊⾨ ● 松岡さん モデリング実装ガイド & Q&A ⬇ 進捗が遅い、書き直しがある、各⾃が ⾊々学んだことを適⽤し、⼀貫しない部 分も.... 各⾃の学習量により理解の浸透の違い 結果として... プロジェクトとしては成功!テストが 書きやすくなり、書いたテストにより メンテナンス性が向上した! ⬇ 今になって考えてみると ● 冗⻑な書き⽅が多い ● ドメインモデル貧⾎症 ● 軽量DDDとも⾔える ⬇ さらなる改善の機会!

Slide 13

Slide 13 text

#ROSCAFE 🆗 DDDの最初のプロジェクトがひと段落 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 2.DDD導⼊からより良いDDDを⽬指して 2チームでそれぞれのDDD経験を元に振 り返りを実施 ● KPTA (Keep, Problem, Try and Action) ● それぞれが改善点を考えて発表 結果として... ● 集約単位にドメインモデルを作 り込むことによりトランザク ションを管理の効率化 ● イミュータブルデータモデル ● リッチな値オブジェクト ⬇ 成⻑を⽌めない努⼒! ⬇ 最近はモブプロやチームを超えたモブ プロへの参加などを通して、全体のレ ベルアップにチャレンジしています

Slide 14

Slide 14 text

DDDを突き詰めていったら、 イベントソーシングに 流れ着いた話 3.イベントソーシングとDDDの関係

Slide 15

Slide 15 text

イベントソーシングを使い始めた経緯 ● 既存チームはDDD+RDBプロジェクトの改善を続けている ● CTOとして、全体を⼤きく改善する新アーキテクチャの開発を 開始 ● DDD+RDBで作成したプロジェクトが同じデータのアクセス時 のトランザクションエラーや、理由のわからないデータ更新が たまにある ● ドキュメントDBによる⾼い書き込み耐性を活⽤するアーキテク チャ ● ??イベントソーシング??なんだろう ● グレッグヤングの登壇を⾒て、これは今までRDBで⾒てきたも のを根本的に覆すが、すごく良さそうに感じ、イベントソーシ ングプロジェクトを社内⽤に作り始めた #ROSCAFE 🆗 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 3.イベントソーシングとDDDの関係

Slide 16

Slide 16 text

#ROSCAFE 🆗 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 3.イベントソーシングとDDDの関係 イベントソーシングとDDDの関係 ● ドメイン駆動設計の実践の1つの⽅法としてCQRSとイベントソーシングがグレッグヤン グによって提唱された。(CQRS Documents by Greg Young. 和訳はインターネットアーカ イブで⾒つかるかもしれません。) ● 集約ルート (Aggregate Root)毎にイベントを保存していき、集約ごとにシステムが現在 の状態を計算する(DDDの設計思考に合致している) ● 集約をまたぐ変更はイベントをメッセージとしてイベント駆動で⾏うことが多い ● データの削除を⾏わず、削除は削除イベント、変更は変更イベントを⽤いて⾏う ● データのトレースが⾏いやすいため、慣れるとデバッグも楽になる ⬇ DDDを始めた時に似た、ハードルを超える困難はあるが、イベントソーシングを使っていると いつの間にかDDDの実践の⾯で次のレベルに上がっている感覚

Slide 17

Slide 17 text

Sekiban - Event Sourcing and CQRS Framework. ● 社内⽤に作ったライブラリをフレームワーク化して、オープンソースリリース ● Azure Cosmos DB、AWS Dynamo DB、および PostgreSQLで開発、デプロイ可能 ● .NET Aspireを使⽤して、プロジェクト開始後10分程度でデータベース、API、フロントエンド (Blazor)のプロジェクトを作成して、ドメインコードを書き始めることが可能 ● ドメインの⼀部に適⽤して作成することも可能 ● (弊社の開発の特性もあり)現在は中⼩規模の開発をスムーズに⾏うことのできる機能を先に開 発 - 実際に社内の5つ以上のプロジェクトで本番運⽤ ● オープンソースでサンプルアプリケーションも開発中、⼤規模システム向けの機能も開発開始 しています。 ● 関数型で記述できる、鉄道指向プログラミング (Railway Oriented Programming)にも対応 ● 2023年12⽉にリリース 現在 Star 46 (スターしてくださったらすごく嬉しい! 🥹) https://github.com/J-Tech-Japan/Sekiban #ROSCAFE 🆗 DDDを突き詰めていったら、イベントソーシングに流れ着いた話 3.イベントソーシングとDDDの関係

Slide 18

Slide 18 text

DDDを突き詰めていったら、 イベントソーシングに 流れ着いた話 4.まとめ

Slide 19

Slide 19 text

まとめ ● プログラマー個⼈として、会社の開発チームとして、また 社内のアーキテクチャとして、成⻑を続けることを常に意 識している。気を抜くと停滞してしまう。 ● DDDを最初から⼤成功させるに越したことはないが、別の パラダイムから⼊ってきた時に最初に軽量DDD⾵になって しまうことはあった ● ペアプロ、モブプロは全体の底上げに役⽴っている ● DDDの中でさらにどうやって良くしていくか、またDDD以 外にもさらに良いシステムを作っていくための改善点は常 に意識して『⽼朽化』しないようにしたい ● イベントソーシングいいですよ!Sekibanよろしく #ROSCAFE 🆗

Slide 20

Slide 20 text

質問、感想などありましたらXなどで連絡ください @tomohisa Sekibanはこちら https://github.com/J-Tech-Japan/Sekiban ResultBoxはこちら https://github.com/J-Tech-Japan/ResultBoxes J-Tech Japan Tech Blog https://zenn.dev/p/jtechjapan_pub 直近の登壇予定 ● C# Community Discord Conference (英語 11/19) ● .NET ラボ11⽉ (11/23) ● Findy アーキテクチャカンファレンス (11/26) ● CQRS+ESカンファレンス(12/21) おわり #ROSCAFE 🆗