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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tomohisa Takaoka
March 26, 2024
2
240
自作ライブラリのAspire対応をしてみての感想 Sekiban + Aspire = 簡単イベントソーシング環境構築
概要: Sekiban - イベントソーシング・CQRSフレームワークの対応を行いました。フレームワークの対応を行う際に気がついたAspireの特徴や利点、使い方などをデモを含めて解説します
Tomohisa Takaoka
March 26, 2024
Tweet
Share
More Decks by Tomohisa Takaoka
See All by Tomohisa Takaoka
AIコーディングの理想と現実 2026 | AI Coding: Expectations vs. Reality 2026
tomohisa
0
1.2k
Sekibanのコアを5言語で動かす ― イベントソーシング×WASMでやってみた | Running Sekiban's Core in 5 Languages — Event Sourcing × WASM
tomohisa
0
70
Sekiban + Microsoft Orleans のアクターをAWS対応しました / Sekiban + Microsoft Orleans actors are now supported on AWS.
tomohisa
0
130
純粋なイミュータブルモデルを設計してからイベントソーシングと組み合わせるDeciderの実践方法の紹介 /Introducing Decider Pattern with Event Sourcing
tomohisa
1
1.9k
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
150
dnx で実行できるコマンド、作ってみました
tomohisa
0
190
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
8
35k
Azure Cognitive Services / Speech で話者分離の音声文字起こしをする / Speaker-Diarized Transcription with Azure Cognitive Services Speech
tomohisa
0
250
DCB版のSekibanのコード、動作、ベンチマークのデモ/dcb sekiban code and benchmark
tomohisa
0
75
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
640
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
140
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
390
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
How STYLIGHT went responsive
nonsquared
100
6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Statistics for Hackers
jakevdp
799
230k
How GitHub (no longer) Works
holman
316
140k
Building the Perfect Custom Keyboard
takai
2
710
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
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