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
650
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.4k
Unsafe.BitCast のすゝめ。
nenonaninu
0
300
.NET 9 のパフォーマンス改善
nenonaninu
0
3.2k
C# 13 / .NET 9 の新機能 (RC 1 時点)
nenonaninu
1
2.5k
Re:ゼロから始める Observability
nenonaninu
3
1.2k
Node-AI のリッチな WEB フロントエンドを支える技術
nenonaninu
3
1.7k
C# ではじめる OpenTelemetry
nenonaninu
0
5.3k
.NET 8 で既定で有効になった Dynamic PGO について
nenonaninu
3
10k
明日から使える ASP.NET Core ロギング術!
nenonaninu
1
12k
Other Decks in Technology
See All in Technology
AI時代の大規模データ活用とセキュリティ戦略
ken5scal
1
260
Amazon S3 Vectorsは大規模ベクトル検索を低コスト化するサーバーレスなベクトルデータベースだ #jawsugsaga / S3 Vectors As A Serverless Vector Database
quiver
2
1k
アカデミーキャンプ 2025 SuuuuuuMMeR「燃えろ!!ロボコン」 / Academy Camp 2025 SuuuuuuMMeR "Burn the Spirit, Robocon!!" DAY 1
ks91
PRO
0
150
LLM 機能を支える Langfuse / ClickHouse のサーバレス化
yuu26
9
2.7k
✨敗北解法コレクション✨〜Expertだった頃に足りなかった知識と技術〜
nanachi
1
780
20250807 Applied Engineer Open House
sakana_ai
PRO
2
620
結局QUICで通信は速くなるの?
kota_yata
8
7.5k
ウォンテッドリーのアラート設計と Datadog 移行での知見
donkomura
0
160
[OCI Technical Deep Dive] OracleのAI戦略(2025年8月5日開催)
oracle4engineer
PRO
1
250
Engineering Failure-Resilient Systems
infraplumber0
0
130
夏休みWebアプリパフォーマンス相談室/web-app-performance-on-radio
hachi_eiji
1
270
Jamf Connect ZTNAとMDMで実現! 金融ベンチャーにおける「デバイストラスト」実例と軌跡 / Kyash Device Trust
rela1470
1
210
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Statistics for Hackers
jakevdp
799
220k
Speed Design
sergeychernyshev
32
1.1k
Faster Mobile Websites
deanohume
309
31k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
810
Building Adaptive Systems
keathley
43
2.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依存)