Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

⾃⼰紹介 高丘 知央 ( Tomohisa Takaoka ) 株式会社ジェイテックジャパンCTO イベントソーシング・CQRSフレームワーク Sekiban メンテナ 米国カリフォルニア州ロングビーチ在住(ロスの近く) ● X : @tomohisa ● Github : @tomohisa ● Linkedin : tomohisatakaoka 自作キーボード、3Dプリント自作トラックボール製作 London Tech Talk ポッドキャストとブッククラブ出演 #csharptokyo 🆗

Slide 3

Slide 3 text

株式会社ジェイテックジャパンの紹介 ● 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 ● New York 所在 J-Tech Creations, Inc. の 東京拠点。 ● B2C / B2B アプリケーションを 開発‧運⽤するソフトウェア開発企業。 ● .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。 🆗 #csharptokyo

Slide 4

Slide 4 text

Overview 「⾃作ライブラリのAspire対応をしてみての感想」 1. Aspireへのライブラリ対応の⽅法 2. Aspire + Sekiban連携の説明 3. Aspireの利点 + 将来性 扱わない点 : イベントソーシングとは? https://zenn.dev/jtechjapan_pub/articles/a44d19e0d54ca6 「イベントソーシングについて OSC 2024 Online/Spring で話した」 🆗 #csharptokyo

Slide 5

Slide 5 text

「⾃作ライブラリのAspire対応をしてみての感想」 Aspireへのライブラリ対応の⽅法

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Hostアプリ ● Github.com/dotnet/aspire に追加する ○ (外部ライブラリとして追加する⽅法はわからない) ○ プルリクにどんどん追加 ■ Redis ■ MySQL ■ SQLServer ■ Postgres ■ Oracle etc... 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 8

Slide 8 text

コンポーネントアプリ - Host アプリのクライアント ● Github.com/dotnet/aspire に追加する ○ (外部ライブラリとして追加する⽅法はわからない) ○ プルリクにどんどん追加 ■ Redis ■ MySQL ■ SQLServer ■ Postgres ● EntityFramework ● Non-EntityFramework ■ Oracle ■ Cosmos ● クライアント⽤のライブラリがある 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 9

Slide 9 text

今回追加した 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へのライブラリ対応の⽅法

Slide 10

Slide 10 text

なぜ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 は⾃動的に互いに通信 できるように必要なコンポーネントの設定を継承します。

Slide 11

Slide 11 text

なぜSekibanの対応をしたのですか? ● コンポーネントに関しては簡単に接続するためにNuget Package化するこ とに意義がある ○ Sekiban⽤の Aspire Nuget パッケージがあれば、そのパッケージを⼊れるだけで、Aspireの ホストコンポーネントを簡単に使⽤することができる 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法 .NET Aspire コンポーネント .NET Aspire コンポーネントは、Redis や PostgreSQL などの⼈ 気サービスやプラットフォームに簡単に接続するために設計さ れた NuGet パッケージです。.NET Aspire コンポーネントは、 ヘルスチェックやテレメトリーの追加など、標準化された設定 パターンを通じて、クラウドネイティブな懸念を多く取り扱い ます。...

Slide 12

Slide 12 text

追加⽅法は? ❌ github.com/dotnet/aspire にプルリクを出す(Componentではないから) ◯ ⾃分でNuget Packageをリリースする では、コンポーネントの名前は? ? Aspire.Sekiban.Infrastructure.Cosmos ? Sekiban.Infrastructure.Cosmos.Aspire ? Sekiban.Aspire.Infrastructure.Cosmos わからないから、運営に聞いてみました! 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 13

Slide 13 text

Aspire GithubのDiscussions セクション https://github.com/dotnet/aspire/discussions/1543 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 14

Slide 14 text

追加⽅法の結論 ● Aspireのコンポーネントは特別でないから普通はいらないよ ○ はい、理解して作成しています。あった⽅がユーザーが楽だから ● Aspire.* はオフィシャルコンポーネントに予約されているから使えないよ ○ はい、理解しています ● あとは⾃分で好きな名前でいいんじゃない 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 15

Slide 15 text

追加しました! ● 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へのライブラリ対応の⽅法

Slide 16

Slide 16 text

.NET ユーチューバーの Nick Chapsas ⽒のビデオに 作ったNugetパッケージが載った! https://www.youtube.com/watch?v=2L68EldtKFo&t=576s 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 17

Slide 17 text

Postgres も対応しているから、独⾃Nuget作れば? 作りたかったのですが、バタバタしていて、まだ作っていない 作らなくても、接続⽂字列からAspireで作成したPostgresに接続は可能 今回のために接続してみて、Cosmosみたいに簡単ではなかったので、やはり Aspire Postgres向けのコンポーネントがあると使う⽅の設定が楽であることが わかった。→コンポーネント作る意味はある 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 18

Slide 18 text

「⾃作ライブラリのAspire対応をしてみての感想」 Aspire + Sekiban連携の説明

Slide 19

Slide 19 text

Cosmos DBのホストの定義に関して ● 接続⽂字列をホストから送る ○ builder.AddConnectionString("SekibanAspireCosmos"); // 検証済み ● エミュレーターを起動する ○ builder.AddAzureCosmosDB("cosmos").RunAsEmulator(); // 未検証 ● Azure Bicepを使⽤してリソースを取得する ○ builder.AddAzureCosmosDB("cdb").AddDatabase("cosmosdb"); // 未検証 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 20

Slide 20 text

Cosmos DBのクライアントでのコンポーネント使⽤⽅法 ● Sekiban.Aspire.Infrastructure.Cosmos Nugetパッケージをインストール ● Aspire⽤のAddCosmosを呼び出す 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 21

Slide 21 text

Postgres のホストの起動⽅法 ● HostでPostgresインスタンスを⽴てる🙆 ● HostのPostgresインスタンスのWebのAdminツールを⽴てる🙆 ● Hostのデータを毎回クリアしないようにする🙆 ● Hostに複数のデータベースを作成する🙆 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 22

Slide 22 text

Postgres のコンポーネントの利⽤⽅法 ● Sekiban.Infrastructure.Postgres (Aspire専⽤ではない)Nugetをインストー ル ● Aspireの設定を追加する ● Sekibanは現在はPostgresとBlobStorageが必要 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 23

Slide 23 text

デモ ● Sekibanのコードを確認 ● Postgresのホストに接続してデータを作る ● Postgresのアドミンサービスを使ってみる ● Postgresのデータを再起動でも残っているのを確認 ● Postgresのデータの削除 ● Postgresから、Cosmos DBに接続を切り替える 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireへのライブラリ対応の⽅法

Slide 24

Slide 24 text

「⾃作ライブラリのAspire対応をしてみての感想」 Aspireの利点 + 将来性

Slide 25

Slide 25 text

App Hostから起動して、AppServiceのデバッグはできますか? はい、プロセスにアタッチして可能です 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性

Slide 26

Slide 26 text

プレビュー版で開発して⼤丈夫ですか? はい、リリースだけに関しては、普通にプロジェクトごとにAppServiceにリ リースするコードを現時点でも記述可能です。 全部の⾃動リリースのコードもすでにかけますし、将来はAWSに対しても⽋け るようになると思いますが、デプロイ機能は使っても使わなくてもオーケー 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性

Slide 27

Slide 27 text

分散システムについて今から考えないといけませんか? いいえ、YARPなどのSevice Discovery は後から追加することは可能なので、普 通に開発していくことができます。 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性

Slide 28

Slide 28 text

Blazorじゃないとだめなの? いいえ、相対フォルダでnpmパッケージを追加できるようになりました。 macだとNVMのデフォルトが古くて動かなかった なぜか、設定変更だけでなく、macのリスタートが必要でした sudo dotnet workload update で dcpを更新する必要がありました npm i をしとかないとダメだった。 ⼀緒に実⾏できるから楽に管理できるので良さそう。 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性

Slide 29

Slide 29 text

デメリット的なことは? きれいにうごかないときにアプリの再起動が必要なことがあ る Macの再起動か必要な時もある starter プロジェクトではない時に設定が⾯倒だったりする まだAzure Functionsに対応していない??? David Fowlerの 出ているPodcastでは将来対応すると⾔っていた https://www.dotnetrocks.com/details/1881 🆗 #csharptokyo 「⾃作ライブラリのAspire対応をしてみての感想」Aspireの利点 + 将来性

Slide 30

Slide 30 text

まとめ

Slide 31

Slide 31 text

まとめ ● つかってみてとても使いやすい ● DevSecOps的ないろんな新しい機能を追加してい きやすい ● 分散システムの構成も作りやすい。スケールアッ プ、リバースプロキシ、コンテナ、Dapr etc... ● Postgresのローカル開発環境を簡単に建てられる の嬉しい ● AppServiceのデファクトスタンダードになりそう ● 触っておくと良いと思いました 🆗 #csharptokyo

Slide 32

Slide 32 text

質問、感想などありましたら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