Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自作ライブラリのAspire対応をしてみての感想 Sekiban + Aspire = 簡単イベントソーシング環境構築

Tomohisa Takaoka
March 26, 2024
92

自作ライブラリのAspire対応をしてみての感想 Sekiban + Aspire = 簡単イベントソーシング環境構築

概要: Sekiban - イベントソーシング・CQRSフレームワークの対応を行いました。フレームワークの対応を行う際に気がついたAspireの特徴や利点、使い方などをデモを含めて解説します

Tomohisa Takaoka

March 26, 2024
Tweet

More Decks by Tomohisa Takaoka

Transcript

  1. ⾃⼰紹介 高丘 知央 ( Tomohisa Takaoka ) 株式会社ジェイテックジャパンCTO イベントソーシング・CQRSフレームワーク Sekiban

    メンテナ 米国カリフォルニア州ロングビーチ在住(ロスの近く) • X : @tomohisa • Github : @tomohisa • Linkedin : tomohisatakaoka 自作キーボード、3Dプリント自作トラックボール製作 London Tech Talk ポッドキャストとブッククラブ出演 #csharptokyo 🆗
  2. 株式会社ジェイテックジャパンの紹介 • 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 • New York 所在

    J-Tech Creations, Inc. の 東京拠点。 • B2C / B2B アプリケーションを 開発‧運⽤するソフトウェア開発企業。 • .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。 🆗 #csharptokyo
  3. Overview 「⾃作ライブラリのAspire対応をしてみての感想」 1. Aspireへのライブラリ対応の⽅法 2. Aspire + Sekiban連携の説明 3. Aspireの利点

    + 将来性 扱わない点 : イベントソーシングとは? https://zenn.dev/jtechjapan_pub/articles/a44d19e0d54ca6 「イベントソーシングについて OSC 2024 Online/Spring で話した」 🆗 #csharptokyo
  4. Aspire に追加するライブラリのタイプ • Aspire Hostに追加するタイプ ◦ ローカルで起動するタイプ ◦ ローカルでDockerで起動するタイプ ◦

    Azure などから取得するタイプ ◦ ConnectionString • Aspire の各サービスで使⽤するコンポーネント ◦ 基本的に設定はEnvironment経由で受け取る ◦ Aspireなしでも動くものだが、ログなどのためにコンポーネントを使う 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法 GithubのWeb上で説明 https://github.com/dotnet/aspire
  5. Hostアプリ • Github.com/dotnet/aspire に追加する ◦ (外部ライブラリとして追加する⽅法はわからない) ◦ プルリクにどんどん追加 ▪ Redis

    ▪ MySQL ▪ SQLServer ▪ Postgres ▪ Oracle etc... 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
  6. コンポーネントアプリ - Host アプリのクライアント • Github.com/dotnet/aspire に追加する ◦ (外部ライブラリとして追加する⽅法はわからない) ◦

    プルリクにどんどん追加 ▪ Redis ▪ MySQL ▪ SQLServer ▪ Postgres • EntityFramework • Non-EntityFramework ▪ Oracle ▪ Cosmos • クライアント⽤のライブラリがある 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
  7. 今回追加した Sekibanは? • github.com/J-Tech-Japan/Sekiban ◦ Cosmos DB, Dynamo DB, PostgreSQLをクライアントとするイベントソーシングフレーム

    ワーク、AppService や Functionsの上で動作するデータ処理フレームワーク ◦ データベースエンジンや、それだけでサーバーホストとなるものではない ▪ ホストアプリではない ◦ Cosmos DB, PostgreSQLを利⽤するフレームワークなので、直接のAspireコンポーネントで もない ▪ github.com/dotnet/aspire に追加するものではない 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
  8. なぜSekibanの対応をしたのですか? • Aspireのコンセプト ◦ https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法 .NET Aspire

    コンポーネント .NET Aspire コンポーネントは、Redis や PostgreSQL などの⼈ 気サービスやプラットフォームに簡単に接続するために設計さ れた NuGet パッケージです。.NET Aspire コンポーネントは、 ヘルスチェックやテレメトリーの追加など、標準化された設定 パターンを通じて、クラウドネイティブな懸念を多く取り扱い ます。 各コンポーネントは .NET Aspire オーケストレーションで動作す るように設計されており、.NET プロジェクトおよびパッケージ 参照に基づいて依存関係を通じて設定を流すことができます。 ⾔い換えると、Example.ServiceFoo が Example.ServiceBar を 参照している場合、Example.ServiceFoo は⾃動的に互いに通信 できるように必要なコンポーネントの設定を継承します。
  9. なぜSekibanの対応をしたのですか? • コンポーネントに関しては簡単に接続するためにNuget Package化するこ とに意義がある ◦ Sekiban⽤の Aspire Nuget パッケージがあれば、そのパッケージを⼊れるだけで、Aspireの

    ホストコンポーネントを簡単に使⽤することができる 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法 .NET Aspire コンポーネント .NET Aspire コンポーネントは、Redis や PostgreSQL などの⼈ 気サービスやプラットフォームに簡単に接続するために設計さ れた NuGet パッケージです。.NET Aspire コンポーネントは、 ヘルスチェックやテレメトリーの追加など、標準化された設定 パターンを通じて、クラウドネイティブな懸念を多く取り扱い ます。...
  10. 追加⽅法は? ❌ github.com/dotnet/aspire にプルリクを出す(Componentではないから) ◯ ⾃分でNuget Packageをリリースする では、コンポーネントの名前は? ? Aspire.Sekiban.Infrastructure.Cosmos

    ? Sekiban.Infrastructure.Cosmos.Aspire ? Sekiban.Aspire.Infrastructure.Cosmos わからないから、運営に聞いてみました! 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
  11. 追加しました! • Sekiban で Cosmos DBを使うためのNuget Package • Sekiban.Aspire.Infrastructure.Cosmos https://www.nuget.org/packages/Sekiban.Aspire.Infrastructure.Cosmos/0.18

    .2-preview 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
  12. Cosmos DBのホストの定義に関して • 接続⽂字列をホストから送る ◦ builder.AddConnectionString("SekibanAspireCosmos"); // 検証済み • エミュレーターを起動する

    ◦ builder.AddAzureCosmosDB("cosmos").RunAsEmulator(); // 未検証 • Azure Bicepを使⽤してリソースを取得する ◦ builder.AddAzureCosmosDB("cdb").AddDatabase("cosmosdb"); // 未検証 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
  13. デモ • Sekibanのコードを確認 • Postgresのホストに接続してデータを作る • Postgresのアドミンサービスを使ってみる • Postgresのデータを再起動でも残っているのを確認 •

    Postgresのデータの削除 • Postgresから、Cosmos DBに接続を切り替える 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
  14. デメリット的なことは? きれいにうごかないときにアプリの再起動が必要なことがあ る Macの再起動か必要な時もある starter プロジェクトではない時に設定が⾯倒だったりする まだAzure Functionsに対応していない??? David Fowlerの

    出ているPodcastでは将来対応すると⾔っていた https://www.dotnetrocks.com/details/1881 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性
  15. まとめ • つかってみてとても使いやすい • DevSecOps的ないろんな新しい機能を追加してい きやすい • 分散システムの構成も作りやすい。スケールアッ プ、リバースプロキシ、コンテナ、Dapr etc...

    • Postgresのローカル開発環境を簡単に建てられる の嬉しい • AppServiceのデファクトスタンダードになりそう • 触っておくと良いと思いました 🆗 #csharptokyo