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
2年間の実運用を経て振り返るイベントソーシングの実際
tomohisa
1
280
イベントソーシング・CQRSで、ドメイン駆動設計をシンプルかつ柔軟に実践する
tomohisa
7
7.1k
.NET Aspireの新機能を使ってみる
tomohisa
0
220
Functional Event Sourcing using Sekiban
tomohisa
0
150
DDDを突き詰めていったら、 イベントソーシングに 流れ着いた話
tomohisa
3
490
メモリ使用率取得したいけど、簡単に取得できない - 仕方ない作るか-MemStat.Net作りました
tomohisa
2
220
OSSの認証サービス Keycloak を.NETから使ってみた-Aspireとコンテナで使える簡単IDaaS
tomohisa
2
1.1k
そろそろイベントソーシング・CQRSを使ってみてもいい頃なんじゃない?
tomohisa
6
3.9k
関数型ドメインモデリングを 非関数型のプログラミング言語で やってみた
tomohisa
7
4.1k
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
328
21k
How to train your dragon (web standard)
notwaldorf
88
5.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Scaling GitHub
holman
458
140k
Gamification - CAS2011
davidbonilla
80
5.1k
The World Runs on Bad Software
bkeepers
PRO
65
11k
For a Future-Friendly Web
brad_frost
175
9.4k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
A better future with KSS
kneath
238
17k
Automating Front-end Workflow
addyosmani
1366
200k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
96
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