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
180
自作ライブラリのAspire対応をしてみての感想 Sekiban + Aspire = 簡単イベントソーシング環境構築
概要: Sekiban - イベントソーシング・CQRSフレームワークの対応を行いました。フレームワークの対応を行う際に気がついたAspireの特徴や利点、使い方などをデモを含めて解説します
Tomohisa Takaoka
March 26, 2024
Tweet
Share
More Decks by Tomohisa Takaoka
See All by Tomohisa Takaoka
.NET でアクターモデルをOrleansかDaprでやりたい
tomohisa
0
200
2年間の実運用を経て振り返るイベントソーシングの実際
tomohisa
4
1.2k
イベントソーシング・CQRSで、ドメイン駆動設計をシンプルかつ柔軟に実践する
tomohisa
7
7.8k
.NET Aspireの新機能を使ってみる
tomohisa
0
240
Functional Event Sourcing using Sekiban
tomohisa
0
170
DDDを突き詰めていったら、 イベントソーシングに 流れ着いた話
tomohisa
3
530
メモリ使用率取得したいけど、簡単に取得できない - 仕方ない作るか-MemStat.Net作りました
tomohisa
2
240
OSSの認証サービス Keycloak を.NETから使ってみた-Aspireとコンテナで使える簡単IDaaS
tomohisa
2
1.1k
そろそろイベントソーシング・CQRSを使ってみてもいい頃なんじゃない?
tomohisa
6
4.4k
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
34
1.6k
GitHub's CSS Performance
jonrohan
1030
460k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
The Language of Interfaces
destraynor
155
24k
Designing Experiences People Love
moore
139
23k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Thoughts on Productivity
jonyablonski
68
4.4k
Navigating Team Friction
lara
183
15k
Building Adaptive Systems
keathley
38
2.4k
Making Projects Easy
brettharned
116
6k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
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