Slide 1

Slide 1 text

ネットシェア可 Cline+Sonnet3.7 でイベント ソーシング開発をやってみた 株式会社ジェイテックジャパン 高丘 知央 2025年3月14日(金曜日) イベントソーシング・CQRS勉強会 #1 - イベントソーシングやってみた報告会 #イベントソーシング勉強会

Slide 2

Slide 2 text

自己紹介 高丘 知央 - Tomohisa Takaoka X: @tomohisa GitHub: @tomohisa Works at: 株式会社ジェイテックジャパン、J-Tech Creations, Inc. JTS Group - 株式会社ジャパンテクニカルソフトウェア 品川 CTO: 中小企業の受託開発をモダンな開発スタイルで。イベントソ ーシング、CQRSなどのソフトウェアアーキテクチャに関するコンサ ル業務 Microsoft MVP for Developer Technologies from Nov 2024- OSS: Sekiban - Event Sourcing and CQRS Framework. 2 / 26

Slide 3

Slide 3 text

本日のアジェンダ 1. イベントソーシングとAIプログラミング時代 2. AIでプログラミングするためのポイント 3. Sekiban+Orleansで実際にやってみた 4. イベントソーシング+アクターモデルの価値 5. まとめ 3 / 26

Slide 4

Slide 4 text

1. イベントソーシングとAIプログラミング時代 4 / 26

Slide 5

Slide 5 text

1-1. イベントソーシングの基本概念 イベントソーシングは「何が起きたか」を記録するアーキテクチャパターン データの変更を永続的なイベントとして記録 何も失われることがない(完全な変更履歴) 任意の時点の状態に正確に戻すことが可能 従来のステート中心アプローチとの違い 従来:現在の状態のみを保存、変更履歴は失われる イベントソーシング:すべての変更をイベントとして保存 状態は常にイベントの再生によって導出される 5 / 26

Slide 6

Slide 6 text

1-2. AIプログラミング時代に特に価値がある理由 AIが生成したコードによる変更の追跡 高速で大量のコード生成が可能なAI時代 意図しない変更も完全に追跡可能 問題発見時の修正・巻き戻しが容易 高速開発と安全性の両立 開発スピードを維持したまま完全な追跡可能性を確保 AIによる変更の影響を可視化しリスクを最小化 人間による事後確認と修正をいつでも確実に実施可能 6 / 26

Slide 7

Slide 7 text

1-3. イベントソーシングとAIの相性 集約のストーリーをイベントの追記で作る特性 集約ルートの状態変化をイベントの連続として表現 時系列に沿った「ストーリー」としての理解が容易 LLMの言語処理力との親和性 LLMはストーリー理解と生成に優れている イベントのリストを見せることでAIが精度高くコードを生成 時系列データの因果関係をLLMが自然に理解 7 / 26

Slide 8

Slide 8 text

2. AIでプログラミングするためのポイント 8 / 26

Slide 9

Slide 9 text

2-1. 「真似プログラミングの天才」としてのSonnet 3.7 Sonnet 3.7の特性 既存コードを微調整して作成することが得意 類似コードを見つけて応用する能力が高い フロントエンドやゲーム開発が特に得意(学習データが豊富) 効果的な活用法 基本設計が整ったテンプレートを渡す 一つの機能を実装し、それを真似させて拡張 アーキテクチャの基本パターンを示してから実装を依頼 9 / 26

Slide 10

Slide 10 text

2-2. プログラマの新たな役割 「真似の素」の供給者としての役割 成長可能な優れたアーキテクチャを提供 正しく設計され動作するサンプルを用意 アーキテクチャについての知識を増やす重要性 アーキテクトとしての視点 将来を見据えつつ今必要な技術を考える 「動けばいい」ではなく成長可能なシステムを設計 AIに適切な方向性を示す 10 / 26

Slide 11

Slide 11 text

2-3. コンテキスト管理とデバッグ コンテキスト管理の重要性 コンテキスト量は費用に直結 多すぎると混乱の原因に 1つでも正しく動くサンプルを提供して「真似」してもらう デバッグアプローチ AIにある程度任せてみる(単純なパターンのエラーは修正可能) 同じ問題で無限ループに入った時は開発者が修正 進捗を注意深く確認することが重要 11 / 26

Slide 12

Slide 12 text

2-4. Clineの教育と成長 「しつけや教育、成長を助ける」という考え方 思考過程を観察し、不足情報を特定 AIに自ら指示書を更新させる方法が効果的 間違いから学ぶ機会を活用 Memory Bank機能の活用 プロジェクトの文脈を保存 一度学習した内容を次回以降に活用 指示の繰り返しを減らし効率化 12 / 26

Slide 13

Slide 13 text

3. Sekiban+Orleansで実際にやってみた 13 / 26

Slide 14

Slide 14 text

3-1. Sekiban.Pure.Orleansの特徴 イベントソーシングとアクターモデルを組み合わせたアーキテクチャ C#のモダンな記法サポート Microsoft Orleansの仮想アクターモデルによる分散処理 イベントソーシングの簡単な実装 低コストでの運用が可能 簡単な導入方法 dotnet new install OrleansSekiban.Template dotnet new sekiban-orleans -n MySampleCode 14 / 26

Slide 15

Slide 15 text

3-2. 実装例 集約ルート public record WeatherForecast( string? Summary, int TemperatureC, DateTime Date) : IAggregatePayload { public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); public static WeatherForecast Create(WeatherForecastInputted ev) => new(ev.Summary, ev.TemperatureC, ev.Date); } イベント public record WeatherForecastInputted( string Summary, int TemperatureC, DateTime Date) : IEventPayload;

Slide 16

Slide 16 text

3-3. 低コストでの運用 Azure App Service + Cosmos DB Serverlessで月額1万円以内 Azure App Service B1 (1.75GBメモリ, 1コア) Cosmos DB Serverless(アクターステートとイベントストア用) Azure Table Storage(プロジェクションデータ用) Azure Blob Storage(大容量データ保存用) スケーラビリティと初期投資 需要に応じて柔軟に拡張可能 最小限のリソースから開始可能 将来的な成長に合わせて必要なコンポーネントのみをスケールアップ 16 / 26

Slide 17

Slide 17 text

3-4. 実際の開発デモ Cline+Sonnet3.7でブログシステムを約1時間で作成 イベントソーシングを使用したドメインコマンド、イベント、集約 コマンド、クエリーのAPI Blazorによるフロントエンド Unitテスト E2Eテスト Playwright 開発効率の向上 テンプレートからの迅速な開発 AIによるコード生成の精度向上 複雑なパターンの実装を短時間で実現 17 / 26

Slide 18

Slide 18 text

3-4. 実際の開発デモ アンケートシステムを今日の朝11時に作り始めた Orleansのパワーを活かして、しかもリアルタイム表示付き(Microsoft の SignalRを 使って) ほとんど手で触らず、Cline + Sonnet3.7にガンガン書かせる。 出来ました! https://60de-47-156-86-5.ngrok-free.app ここでリアルタイムアンケートを使ってみて下さい! 18 / 26

Slide 19

Slide 19 text

3-4. 実際の開発デモ https://github.com/tomohisa/EsStudy0314 19 / 26

Slide 20

Slide 20 text

4. イベントソーシング+アクターモデルの価値 20 / 26

Slide 21

Slide 21 text

4-1. 「後悔しない」アーキテクチャの実現 完全な安全性と回復力 AIが生成したコードの影響を完全に把握可能 どんな変更も履歴として永続的に保持 問題発生時は任意の時点に正確に復元可能 迅速な開発と確実な品質 AIの高速な開発能力を最大限に活用 問題の早期発見と確実な解決 人間とAIの理想的な協調を実現 21 / 26

Slide 22

Slide 22 text

4-2. アクターモデルによるスケーラビリティ リニアスケーラビリティの実現 最小限のリソースで開始可能 サーバー追加による直線的な性能向上 アーキテクチャの根本的な変更不要 イベントソーシングとの相乗効果 イベントの処理を並列化し、高速な処理を実現 各アクターが独立してイベントを処理 システムの複雑性を管理可能な範囲に抑制 22 / 26

Slide 23

Slide 23 text

4-3. イベントソーシングの予期せぬ分析価値 イベント記録時には意識していなかった情報が後から貴重な分析資産に 例:ECサイトのショッピングカート履歴から顧客行動分析 過去データを活用した新機能の実装が可能 従来のログでは取得できない完全な行動履歴の分析 コンテキストの保持 変更の意図と理由 変更時の環境情報 関連する業務ルール 23 / 26

Slide 24

Slide 24 text

5. まとめ 24 / 26

Slide 25

Slide 25 text

5. まとめ 難しくないけど、面倒なコードの書き初めが楽になった 似ているけど別機能の書き換えがすごく楽 C#だと Source Generator のコードが人間には面倒だが、LLMは得意 バグが起きたときに、バグを貼って修正案の提案をするなどは明らかにおかしいとき を除き、うまくいかない。地道なデバッグや、公式ドキュメントを見るのは必要だ が、MCPサーバーにそのような情報検索を頼んで修正案を出すなどの工夫はできそ う。 心地よく、今まで以上のアウトプットを出せるようになった! 25 / 26

Slide 26

Slide 26 text

ネットシェア可 Thank you! 株式会社ジェイテックジャパン https://www.jtechs.com/japan/ Sekiban - イベントソーシング・CQRSフレームワーク https://github.com/j-tech-japan/sekiban Zenn - ジェイテックジャパンブログ https://zenn.dev/p/jtechjapan_pub