Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
自作ライブラリのAspire対応をしてみての感想 Sekiban + Aspire = 簡単イ...
Search
Tomohisa Takaoka
March 26, 2024
2
170
自作ライブラリのAspire対応をしてみての感想 Sekiban + Aspire = 簡単イベントソーシング環境構築
概要: Sekiban - イベントソーシング・CQRSフレームワークの対応を行いました。フレームワークの対応を行う際に気がついたAspireの特徴や利点、使い方などをデモを含めて解説します
Tomohisa Takaoka
March 26, 2024
Tweet
Share
More Decks by Tomohisa Takaoka
See All by Tomohisa Takaoka
Functional Event Sourcing using Sekiban
tomohisa
0
90
DDDを突き詰めていったら、 イベントソーシングに 流れ着いた話
tomohisa
3
350
メモリ使用率取得したいけど、簡単に取得できない - 仕方ない作るか-MemStat.Net作りました
tomohisa
2
190
OSSの認証サービス Keycloak を.NETから使ってみた-Aspireとコンテナで使える簡単IDaaS
tomohisa
2
960
そろそろイベントソーシング・CQRSを使ってみてもいい頃なんじゃない?
tomohisa
6
3.6k
関数型ドメインモデリングを 非関数型のプログラミング言語で やってみた
tomohisa
7
3.7k
Aspire, Sekiban, ResultBoxで作るかんたんWebアプリ開発
tomohisa
2
310
Event Sourcing and Azure Cosmos DB using Sekiban Framework
tomohisa
1
82
長文から長文を生成するLLMツールをオープンソースで作ってみた。
tomohisa
2
390
Featured
See All Featured
Unsuck your backbone
ammeep
668
57k
Visualization
eitanlees
145
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Navigating Team Friction
lara
183
14k
Code Review Best Practice
trishagee
64
17k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
A designer walks into a library…
pauljervisheath
203
24k
Designing for Performance
lara
604
68k
BBQ
matthewcrist
85
9.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
GraphQLとの向き合い方2022年版
quramy
43
13k
Speed Design
sergeychernyshev
24
610
Transcript
⾃作ライブラリのAspire対応をし てみての感想 Sekiban + Aspire = 簡単イベントソーシング環境構築 #csharptokyo
⾃⼰紹介 高丘 知央 ( Tomohisa Takaoka ) 株式会社ジェイテックジャパンCTO イベントソーシング・CQRSフレームワーク Sekiban
メンテナ 米国カリフォルニア州ロングビーチ在住(ロスの近く) • X : @tomohisa • Github : @tomohisa • Linkedin : tomohisatakaoka 自作キーボード、3Dプリント自作トラックボール製作 London Tech Talk ポッドキャストとブッククラブ出演 #csharptokyo 🆗
株式会社ジェイテックジャパンの紹介 • 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 • New York 所在
J-Tech Creations, Inc. の 東京拠点。 • B2C / B2B アプリケーションを 開発‧運⽤するソフトウェア開発企業。 • .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。 🆗 #csharptokyo
Overview 「⾃作ライブラリのAspire対応をしてみての感想」 1. Aspireへのライブラリ対応の⽅法 2. Aspire + Sekiban連携の説明 3. Aspireの利点
+ 将来性 扱わない点 : イベントソーシングとは? https://zenn.dev/jtechjapan_pub/articles/a44d19e0d54ca6 「イベントソーシングについて OSC 2024 Online/Spring で話した」 🆗 #csharptokyo
「⾃作ライブラリのAspire対応をしてみての感想」 Aspireへのライブラリ対応の⽅法
Aspire に追加するライブラリのタイプ • Aspire Hostに追加するタイプ ◦ ローカルで起動するタイプ ◦ ローカルでDockerで起動するタイプ ◦
Azure などから取得するタイプ ◦ ConnectionString • Aspire の各サービスで使⽤するコンポーネント ◦ 基本的に設定はEnvironment経由で受け取る ◦ Aspireなしでも動くものだが、ログなどのためにコンポーネントを使う 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法 GithubのWeb上で説明 https://github.com/dotnet/aspire
Hostアプリ • Github.com/dotnet/aspire に追加する ◦ (外部ライブラリとして追加する⽅法はわからない) ◦ プルリクにどんどん追加 ▪ Redis
▪ MySQL ▪ SQLServer ▪ Postgres ▪ Oracle etc... 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
コンポーネントアプリ - Host アプリのクライアント • Github.com/dotnet/aspire に追加する ◦ (外部ライブラリとして追加する⽅法はわからない) ◦
プルリクにどんどん追加 ▪ Redis ▪ MySQL ▪ SQLServer ▪ Postgres • EntityFramework • Non-EntityFramework ▪ Oracle ▪ Cosmos • クライアント⽤のライブラリがある 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
今回追加した 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へのライブラリ対応の⽅法
なぜ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 は⾃動的に互いに通信 できるように必要なコンポーネントの設定を継承します。
なぜSekibanの対応をしたのですか? • コンポーネントに関しては簡単に接続するためにNuget Package化するこ とに意義がある ◦ Sekiban⽤の Aspire Nuget パッケージがあれば、そのパッケージを⼊れるだけで、Aspireの
ホストコンポーネントを簡単に使⽤することができる 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法 .NET Aspire コンポーネント .NET Aspire コンポーネントは、Redis や PostgreSQL などの⼈ 気サービスやプラットフォームに簡単に接続するために設計さ れた NuGet パッケージです。.NET Aspire コンポーネントは、 ヘルスチェックやテレメトリーの追加など、標準化された設定 パターンを通じて、クラウドネイティブな懸念を多く取り扱い ます。...
追加⽅法は? ❌ github.com/dotnet/aspire にプルリクを出す(Componentではないから) ◯ ⾃分でNuget Packageをリリースする では、コンポーネントの名前は? ? Aspire.Sekiban.Infrastructure.Cosmos
? Sekiban.Infrastructure.Cosmos.Aspire ? Sekiban.Aspire.Infrastructure.Cosmos わからないから、運営に聞いてみました! 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
Aspire GithubのDiscussions セクション https://github.com/dotnet/aspire/discussions/1543 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
追加⽅法の結論 • Aspireのコンポーネントは特別でないから普通はいらないよ ◦ はい、理解して作成しています。あった⽅がユーザーが楽だから • Aspire.* はオフィシャルコンポーネントに予約されているから使えないよ ◦ はい、理解しています
• あとは⾃分で好きな名前でいいんじゃない 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
追加しました! • 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へのライブラリ対応の⽅法
.NET ユーチューバーの Nick Chapsas ⽒のビデオに 作ったNugetパッケージが載った! https://www.youtube.com/watch?v=2L68EldtKFo&t=576s 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
Postgres も対応しているから、独⾃Nuget作れば? 作りたかったのですが、バタバタしていて、まだ作っていない 作らなくても、接続⽂字列からAspireで作成したPostgresに接続は可能 今回のために接続してみて、Cosmosみたいに簡単ではなかったので、やはり Aspire Postgres向けのコンポーネントがあると使う⽅の設定が楽であることが わかった。→コンポーネント作る意味はある 🆗 #csharptokyo
「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
「⾃作ライブラリのAspire対応をしてみての感想」 Aspire + Sekiban連携の説明
Cosmos DBのホストの定義に関して • 接続⽂字列をホストから送る ◦ builder.AddConnectionString("SekibanAspireCosmos"); // 検証済み • エミュレーターを起動する
◦ builder.AddAzureCosmosDB("cosmos").RunAsEmulator(); // 未検証 • Azure Bicepを使⽤してリソースを取得する ◦ builder.AddAzureCosmosDB("cdb").AddDatabase("cosmosdb"); // 未検証 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
Cosmos DBのクライアントでのコンポーネント使⽤⽅法 • Sekiban.Aspire.Infrastructure.Cosmos Nugetパッケージをインストール • Aspire⽤のAddCosmosを呼び出す 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
Postgres のホストの起動⽅法 • HostでPostgresインスタンスを⽴てる🙆 • HostのPostgresインスタンスのWebのAdminツールを⽴てる🙆 • Hostのデータを毎回クリアしないようにする🙆 • Hostに複数のデータベースを作成する🙆
🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
Postgres のコンポーネントの利⽤⽅法 • Sekiban.Infrastructure.Postgres (Aspire専⽤ではない)Nugetをインストー ル • Aspireの設定を追加する • Sekibanは現在はPostgresとBlobStorageが必要
🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
デモ • Sekibanのコードを確認 • Postgresのホストに接続してデータを作る • Postgresのアドミンサービスを使ってみる • Postgresのデータを再起動でも残っているのを確認 •
Postgresのデータの削除 • Postgresから、Cosmos DBに接続を切り替える 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法
「⾃作ライブラリのAspire対応をしてみての感想」 Aspireの利点 + 将来性
App Hostから起動して、AppServiceのデバッグはできますか? はい、プロセスにアタッチして可能です 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性
プレビュー版で開発して⼤丈夫ですか? はい、リリースだけに関しては、普通にプロジェクトごとにAppServiceにリ リースするコードを現時点でも記述可能です。 全部の⾃動リリースのコードもすでにかけますし、将来はAWSに対しても⽋け るようになると思いますが、デプロイ機能は使っても使わなくてもオーケー 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性
分散システムについて今から考えないといけませんか? いいえ、YARPなどのSevice Discovery は後から追加することは可能なので、普 通に開発していくことができます。 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性
Blazorじゃないとだめなの? いいえ、相対フォルダでnpmパッケージを追加できるようになりました。 macだとNVMのデフォルトが古くて動かなかった なぜか、設定変更だけでなく、macのリスタートが必要でした sudo dotnet workload update で dcpを更新する必要がありました
npm i をしとかないとダメだった。 ⼀緒に実⾏できるから楽に管理できるので良さそう。 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性
デメリット的なことは? きれいにうごかないときにアプリの再起動が必要なことがあ る Macの再起動か必要な時もある starter プロジェクトではない時に設定が⾯倒だったりする まだAzure Functionsに対応していない??? David Fowlerの
出ているPodcastでは将来対応すると⾔っていた https://www.dotnetrocks.com/details/1881 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性
まとめ
まとめ • つかってみてとても使いやすい • DevSecOps的ないろんな新しい機能を追加してい きやすい • 分散システムの構成も作りやすい。スケールアッ プ、リバースプロキシ、コンテナ、Dapr etc...
• Postgresのローカル開発環境を簡単に建てられる の嬉しい • AppServiceのデファクトスタンダードになりそう • 触っておくと良いと思いました 🆗 #csharptokyo
質問、感想などありましたらXなどで連絡ください @tomohisa Long2Longという、⻑⽂から⻑⽂を作るアプリをオープンソースで作りました https://github.com/tomohisa/Long2Long 「コンパイル時のユニットテスト」導⼊するとユニットテストを 書かなくてよくなるのか?と いうタイトルで登壇しました https://zenn.dev/jtechjapan_pub/articles/d4e1dacb6f00a2 Sekiban GitHub
https://github.com/J-Tech-Japan/Sekiban J-Tech Japan Tech Blog https://zenn.dev/p/jtechjapan_pub おわり 🆗 #csharptokyo