Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Aspire をカスタマイズしよう & Aspire 9.2
Search
neno
April 26, 2025
Technology
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Aspire をカスタマイズしよう & Aspire 9.2
.NET ラボ 2025/04/26 での発表資料
ブログ:
Aspire をカスタマイズしよう & Aspire 9.2
neno
April 26, 2025
More Decks by neno
See All by neno
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1.7k
大 AI 時代におけるC# の事情 ~ぶっちゃけトークを交えながら~
nenonaninu
1
1.1k
.NET 10 のパフォーマンス改善
nenonaninu
3
7.8k
C# 14 / .NET 10 の新機能 (RC 1 時点)
nenonaninu
1
3.3k
分解して理解する Aspire
nenonaninu
2
3.3k
Unsafe.BitCast のすゝめ。
nenonaninu
0
440
.NET 9 のパフォーマンス改善
nenonaninu
0
4k
C# 13 / .NET 9 の新機能 (RC 1 時点)
nenonaninu
1
2.9k
Re:ゼロから始める Observability
nenonaninu
4
1.6k
Other Decks in Technology
See All in Technology
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
32
33k
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
630
[Kiro Meetup #7] Kiro Crew Dive Deep
konippi
0
380
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
1
390
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
310
品質と信頼性を地続きにする
grimoh
3
1.3k
AIエージェントの一手は 誰も見ていない - Falco拡張OSS「Prempti」とeBPFで サーバーレス実行基盤を二層防御する
keitah
1
600
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
120
AI臭い文章とは何なのか
nasuvitz
5
2.1k
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
780
OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ
yutakaosada
0
100
なぜAI任せのゲームは面白くならないのか?
hirohasuyoutube
0
190
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
710
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
How to train your dragon (web standard)
notwaldorf
97
6.8k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
Navigating Weather and Climate Data
rabernat
0
540
Into the Great Unknown - MozCon
thekraken
41
2.7k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
HDC tutorial
michielstock
2
920
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Everyday Curiosity
cassininazir
0
330
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
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依存)