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 をカスタマイズしよう & Aspire 9.2
Search
neno
April 26, 2025
Technology
0
400
Aspire をカスタマイズしよう & Aspire 9.2
.NET ラボ 2025/04/26 での発表資料
neno
April 26, 2025
Tweet
Share
More Decks by neno
See All by neno
分解して理解する Aspire
nenonaninu
2
2.1k
Unsafe.BitCast のすゝめ。
nenonaninu
0
270
.NET 9 のパフォーマンス改善
nenonaninu
0
2.9k
C# 13 / .NET 9 の新機能 (RC 1 時点)
nenonaninu
1
2.4k
Re:ゼロから始める Observability
nenonaninu
3
1.1k
Node-AI のリッチな WEB フロントエンドを支える技術
nenonaninu
3
1.6k
C# ではじめる OpenTelemetry
nenonaninu
0
5k
.NET 8 で既定で有効になった Dynamic PGO について
nenonaninu
3
8.8k
明日から使える ASP.NET Core ロギング術!
nenonaninu
1
11k
Other Decks in Technology
See All in Technology
Developer 以外にこそ使って欲しい Amazon Q Developer
mita
0
170
Software Architecture in an AI-Driven World
atty303
49
20k
雑に疎通確認だけしたい...せや!CloudShell使ったろ!
alchemy1115
0
240
Part1 GitHubってなんだろう?その2
tomokusaba
2
820
LangfuseではじめるAIアプリのLLMトレーシング
codenote
0
200
Coding Agentに値札を付けろ
watany
3
560
Google Cloud Next 2025 Recap マーケティング施策の運用及び開発を支援するAIの活用 / Use of AI to support operation and development of marketing campaign
atsushiyoshikawa
0
320
Google Cloud Next 2025 Recap 生成AIモデルとマーケティングでのコンテンツ生成 / Generative AI models and content creation in marketing
kyou3
0
320
Azure & DevSecOps
kkamegawa
2
200
名単体テスト 禁断の傀儡(モック)
iwamot
PRO
1
310
WindowsでGenesisに挑戦した話
natsutan
0
120
LLMの開発と社会実装の今と未来 / AI Builders' Community (ABC) vol.2
pfn
PRO
2
190
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Visualization
eitanlees
146
16k
Designing for humans not robots
tammielis
253
25k
Fireside Chat
paigeccino
37
3.4k
Writing Fast Ruby
sferik
628
61k
Building Applications with DynamoDB
mza
94
6.4k
A designer walks into a library…
pauljervisheath
205
24k
Into the Great Unknown - MozCon
thekraken
38
1.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
The Cult of Friendly URLs
andyhume
78
6.4k
Embracing the Ebb and Flow
colly
85
4.7k
Transcript
Aspire をカスタマイズしよう & Aspire 9.2 .NET ラボ 2025/04/26 何縫ねの。
自己紹介 1 • 所属: NTTコミュニケーションズ イノベーションセンター • Microsoft MVP for
Developer Technologies (2024~) • .NET / Web Development • 趣味: C#, OSS, ドール, 一眼(α7 IV), シーシャ • 執心領域 • C# ⇔ TypeScript • SignalR • Observability / OpenTelemetry 何縫ねの。 nenoNaninu nenoMake ブログ https://blog.neno.dev その他 https://neno.dev
OSS 紹介 2 属性を付与するだけ Tapper • C# の型定義から TypeScript の型定義を生成する
.NET Tool/ library • JSON / MessagePack 対応! https://github.com/nenoNaninu/Tapper
OSS 紹介 3 • C# の SignalR Client を強く型付けするための Source
Generator TypedSignalR.Client Before After (using TypedSignalR.Client) こんな SignalR の Hub と Receiver の interface が あったとして… 脱文字列! 全てが強く型付け! https://github.com/nenoNaninu/TypedSignalR.Client
4 • TypeScript の SignalR Client を強く型付けするための .NET Tool /
library TypedSignalR.Client.TypeScript Before After (using TypedSignalR.Client.TypeScript) 脱文字列! 全てが強く型付け! TypeScript 用の型を C# から自動生成 MessagePack Hub Protocol 対応! https://github.com/nenoNaninu/TypedSignalR.Client.TypeScript 属性を付与するだけ! OSS 紹介
5 • SignalR 使ったアプリを快適に開発するための GUI を自動生成する library • 2 step
で利用可能! • http pipeline に middleware の追加 • Hub と Receiver を定義してる interface に属性を付与 • JWT 認証 サポート • パラメータのユーザ定義型サポート • JSON で入力! SignalR 版 SwaggerUI TypedSignalR.Client.DevTools https://github.com/nenoNaninu/TypedSignalR.Client.DevTools OSS 紹介
AspNetCore.SignalR.OpenTelemetry OSS 紹介 6 https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry • トレースのための計装 • 最低限のログ •
接続時 • Transport 層の情報も出力(WebSocket 等) • メソッド呼び出し時 • HubName.MethodName の素朴なログ • メソッド呼び出し毎にログのスコープを追加 • HubName, MethodName, InvocationId を 振っているのでログの検索性が向上 • Duration • 切断時 • 切断時に例外が発生していれば例外もログに出力 Inspired by HttpLogging SignalR のメソッド呼び出し毎に スパンが切られるように https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry
7 ブログ記事 めちゃくちゃ 気合を入れて書いたのでぜひ…! https://blog.neno.dev/entry/2025/04/14/130323 直近に公開した記事
お品書き 8 • Aspire とは • Aspire をカスタマイズしよう • Aspire
9.2 の新機能
Aspire とは 9
Aspire とは 10 以前の登壇資料を参照してください…! https://speakerdeck.com/nenonaninu/fen-jie-siteli-jie-suru-aspire
Aspire とは 11 Aspire が提供してくれる事は主に3つ 分散アプリケーションの開発のためのローカル開発環境 • 現時点においてはこれが主な価値 • 実は(?)分散アプリケーションの開発ではなくても十分利用する価値がある
分散アプリケーションのテスト • 分散アプリケーションのテストがだいぶ書きやすくなる クラウドへのデプロイ • 現時点においてこれを目的で Aspire 使うのはあまりおススメしない https://speakerdeck.com/nenonaninu/fen-jie-siteli-jie-suru-aspire?slide=21
Aspire をカスタマイズしよう 12
Aspire をカスタマイズしよう 13 素朴に使うだけで十分いろいろな事をやってくれる • 必要なコンポーネントの一括起動 • .NET プロジェクト •
コンテナ • 実行ファイル • コンポーネント間通信のための URI / 接続文字列 • OpenTelemetry 関連 • 開発用ダッシュボード
Aspire をカスタマイズしよう 14 それ以上を望もう • 開発時にいろいろツール使っていませんか? • Aspire に組み込めそうなものなら組み込んでしまおう…!
Aspire をカスタマイズしよう 15 自分の場合は gRPC UI だった • 自分は gRPC
service を開発する際に gRPC UI を愛用していた • SwaggerUI みたいに GUI ぽちぽちして叩きたいからね…! https://github.com/fullstorydev/grpcui
Aspire をカスタマイズしよう 16 自分の場合は gRPC UI だった • 自分は gRPC
service を開発する際に gRPC UI を愛用していた • SwaggerUI みたいに GUI ぽちぽちして叩きたいからね…! https://github.com/fullstorydev/grpcui
Aspire をカスタマイズしよう 17 自分の場合は gRPC UI だった • 自分は gRPC
service を開発する際に gRPC UI を愛用していた • SwaggerUI みたいに GUI ぽちぽちして叩きたいからね…! https://github.com/fullstorydev/grpcui 毎回 CLI 叩くのだるい…!
Aspire をカスタマイズしよう 18 そうだ Aspire に組み込んでしまえ
OSS 紹介 19 https://github.com/nenoNaninu/AspireExtensions.GrpcUI AppHost で gRPC service のプロジェクトに対して WithGrpcUI
をメソッドチェーンでつなげてあげる事で ダッシュボードからボタン一つで gRPC UI が起動可能…! AspireExtensions.GrpcUI
OSS 紹介 20 https://github.com/nenoNaninu/AspireExtensions.GrpcUI AspireExtensions.GrpcUI
OSS 紹介 21 https://github.com/nenoNaninu/AspireExtensions.GrpcUI AspireExtensions.GrpcUI
OSS 紹介 22 gRPC UI が使いたくなったら ダッシュボードから立ち上げる https://github.com/nenoNaninu/AspireExtensions.GrpcUI AspireExtensions.GrpcUI
OSS 紹介 23 https://github.com/nenoNaninu/AspireExtensions.GrpcUI AspireExtensions.GrpcUI
OSS 紹介 24 https://github.com/nenoNaninu/AspireExtensions.GrpcUI AspireExtensions.GrpcUI
OSS 紹介 25 https://github.com/nenoNaninu/AspireExtensions.GrpcUI AspireExtensions.GrpcUI 現れた URL をクリックすれば gRPC UI
に飛べる…!
OSS 紹介 26 https://github.com/nenoNaninu/AspireExtensions.GrpcUI AspireExtensions.GrpcUI 現れた URL をクリックすれば gRPC UI
に飛べる…!
Aspire をカスタマイズしよう 27 • AspireExtensions.GrpcUI はぺら1ライブラリ…! • なので皆さんも使っているツールとかあれば 簡単に Aspire
に組み込めます…! 特段難しい事はしてない…!
Aspire をカスタマイズしよう 28 https://github.com/nenoNaninu/AspireExtensions.GrpcUI ぶっちゃけこれだけ…!
Aspire をカスタマイズしよう 29 https://github.com/nenoNaninu/AspireExtensions.GrpcUI ぶっちゃけこれだけ…! 中身をみてきましょう
• Aspire には RunMode / PublishMode がある • 開発時に Aspire
を立ち上げる場合は RunMode • Bicep / Terraform などを吐き出すときは PublishMode • AspireExtensions.GrpcUI は開発時にのみ使えれば OK なので RunMode かどうかを確認 Aspire をカスタマイズしよう 30 ExecutionContext.IsRunMode https://github.com/nenoNaninu/AspireExtensions.GrpcUI
Aspire をカスタマイズしよう 31 gRPC UI が存在するかどうかを確認 • AspireExtensions.GrpcUI では gRPC
UI の実行ファイルに依存している • gRPC UI の実行ファイルが存在するかチェック • 存在しなければコンソールにメッセージを流してあげる https://github.com/nenoNaninu/AspireExtensions.GrpcUI
Aspire をカスタマイズしよう 32 実行ファイルかコンテナか https://github.com/nenoNaninu/AspireExtensions.GrpcUI • AspireExtensions.GrpcUI は gRPC UI
の実行ファイルに依存している • 事前に gRPC UI をインストールしておく必要がある • 実行ファイルではなくコンテナに依存していれば、 ユーザは事前に gRPC UI をインストールしておく必要はない • Aspire がよしなにイメージを引っ張ってきてくれる • gRPC UI は公式にコンテナのイメージを用意していない
Aspire をカスタマイズしよう 33 実行ファイルかコンテナか https://github.com/nenoNaninu/AspireExtensions.GrpcUI • AspireExtensions.GrpcUI は gRPC UI
の実行ファイルに依存している • 事前に gRPC UI をインストールしておく必要がある • 実行ファイルではなくコンテナに依存していれば、 ユーザは事前に gRPC UI をインストールしておく必要はない • Aspire がよしなにイメージを引っ張ってきてくれる • gRPC UI は公式にコンテナのイメージを用意していない このライブラリ使うためだけに Unofficial なイメージが DL されるのも嫌じゃろう… という事で実行ファイルを事前に DL してもらう形に
Aspire をカスタマイズしよう 34 AddExecutable https://github.com/nenoNaninu/AspireExtensions.GrpcUI
Aspire をカスタマイズしよう 35 AddExecutable https://github.com/nenoNaninu/AspireExtensions.GrpcUI 実行ファイルを指定 引数はこの時点では組み立てられないので空 (GetEndpoints がこのタイミングでは有効な値を返してくれない)
Aspire をカスタマイズしよう 36 AddExecutable https://github.com/nenoNaninu/AspireExtensions.GrpcUI Port を指定しておかないと ダッシュボード上に URL が現れない
プロキシは不要なので切る 実行ファイルを指定 引数はこの時点では組み立てられないので空 (GetEndpoints がこのタイミングでは有効な値を返してくれない)
Aspire をカスタマイズしよう 37 AddExecutable https://github.com/nenoNaninu/AspireExtensions.GrpcUI gRPC service の endpoint を取得して
http か https かで grpcui に渡す引数を調整 実行ファイルを指定 引数はこの時点では組み立てられないので空 (GetEndpoints がこのタイミングでは有効な値を返してくれない) Port を指定しておかないと ダッシュボード上に URL が現れない プロキシは不要なので切る
Aspire をカスタマイズしよう 38 AddExecutable https://github.com/nenoNaninu/AspireExtensions.GrpcUI WithExplicitStart を叩く事で 必要に応じて dashboard 上から起動できる
gRPC service の endpoint を取得して http か https かで grpcui に渡す引数を調整 実行ファイルを指定 引数はこの時点では組み立てられないので空 (GetEndpoints がこのタイミングでは有効な値を返してくれない) Port を指定しておかないと ダッシュボード上に URL が現れない プロキシは不要なので切る
Aspire をカスタマイズしよう 39 これだけ!
Aspire をカスタマイズしよう 40 これだけ! という事で皆さんも Aspire を カスタムして開発体験を向上させましょう…!
Aspire 9.2 の新機能 41
Aspire 9.2 42 2025-04-11 に Aspire 9.2 がリリースされました…! • 個人的には
Publishers + Aspire CLI がアツい…! • ただし 9.2 段階では Preview • Aspire を用いたテストの xUnit v3 / Microsoft.Testing.Platform 対応 • ダッシュボードの強化 https://learn.microsoft.com/en-us/dotnet/aspire/whats-new/dotnet-aspire-9.2
Aspire 9.2 43 Aspire 9.1 時点で bicep 等を publish するための方式
https://github.com/aws/integrations-on-dotnet-aspire-for-aws/issues/50
Aspire 9.2 44 Aspire 9.1 時点で bicep 等を publish するための方式
https://github.com/aws/integrations-on-dotnet-aspire-for-aws/issues/50 返ってきた intermediate manifest format に従った JSON を ガチャガチャいじくる必要があった(つらい)
Aspire 9.2 45 Aspire 9.2 からの新しい publish の方式 https://github.com/aws/integrations-on-dotnet-aspire-for-aws/issues/50
Aspire 9.2 46 Aspire 9.2 からの新しい publish の方式 https://github.com/aws/integrations-on-dotnet-aspire-for-aws/issues/50 JSON
を介さずに C# で全て解決…!
Aspire 9.2 47 Aspire 9.2 からの新しい publish の方式
Aspire 9.2 48 Aspire 9.2 からの新しい publish の方式
Aspire 9.2 49 Aspire 9.2 からの新しい publish の方式 docker-compose.yml が
出力される…!
Aspire 9.2 50 Aspire のテストが次世代の形式に対応 • 事前知識 • 今までの dotnet
test および Test Explorer は VSTest に依存していた • VSTest はもう結構な年季もので、だいぶ複雑になっている • そこで VSTest の代替となる Microsoft.Testing.Platform が開発された • xUnit.v3 は Microsoft.Testing.Platform に対応している • オプションでMicrosoft.Testing.Platform を用いるか切り替えられる • Aspire のテストが xUnit.v3 及び Microsoft.Testing.Platform に対応した https://xunit.net/docs/getting-started/v3/whats-new https://xunit.net/docs/getting-started/v3/microsoft-testing-platform https://learn.microsoft.com/en-us/dotnet/core/testing/microsoft-testing-platform-intro
Aspire 9.2 51 Aspire のテンプレートのインストール Aspire + xunit.v3 + Microsoft.Testing.Platform
の 新規プロジェクトを作成
Aspire 9.2 52 テストテンプレートの csproj に少し手を加えたほうが better
Aspire 9.2 53 カスタム HTTP コマンド • カスタムコマンド自体は Aspire 9.0
時点からある • カスタム HTTP コマンドが Aspire 9.2 から導入
Aspire 9.2 54 カスタム HTTP コマンド • カスタムコマンド自体は Aspire 9.0
時点からある • カスタム HTTP コマンドが Aspire 9.2 から導入
Aspire 9.2 55 カスタム HTTP コマンド • カスタムコマンド自体は Aspire 9.0
時点からある • カスタム HTTP コマンドが Aspire 9.2 から導入
Aspire 9.2 56 ダッシュボード強化 • リソースグラフ • リソースアイコン • リソースアイコンの色とトレースの色が一致しているのが嬉しいポイント
• テレメトリの一時停止 • コンソールログのタイムスタンプを UTC に
まとめ 57 Aspire をカスタマイズしていこう 普段使っている開発用ツールの Aspire への組み込み • e.g., AspireExtensions.GrpcUI
• https://github.com/nenoNaninu/AspireExtensions.GrpcUI カスタムコマンド・カスタム HTTP コマンド • ダッシュボードからのアクションの拡張 Publishers + Aspire CLI (Preview) • 自分の望むデプロイ先用への Terraform などを出力するよう カスタムする事が C# の世界のみで完結可能に (脱 JSON依存)