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
490
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.2k
Unsafe.BitCast のすゝめ。
nenonaninu
0
280
.NET 9 のパフォーマンス改善
nenonaninu
0
3k
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
5.1k
.NET 8 で既定で有効になった Dynamic PGO について
nenonaninu
3
9k
明日から使える ASP.NET Core ロギング術!
nenonaninu
1
11k
Other Decks in Technology
See All in Technology
入門 ESlint Typegen #TSKaigi #TSKaigi2025_kataritai
bengo4com
0
2k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
270
メルカリにおけるデータアナリティクス AI エージェント「Socrates」と ADK 活用事例
na0
15
6.7k
セキュリティSaaS企業が実践するCursor運用ルールと知見 / How a Security SaaS Company Runs Cursor: Rules & Insights
tetsuzawa
1
2.3k
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
440
ソフトウェアは捨てやすく作ろう/Let's make software easy to discard
sanogemaru
10
6.2k
Spring for GraphQLって実際どうなの?〜小規模スタートアップの事例紹介〜
kogayushi
0
140
從開發到架構設計的可觀測性實踐
philipz
0
190
ソフトウェアテストのAI活用_ver1.20
fumisuke
0
200
組織とセキュリティ文化と、自分の一歩
maimyyym
3
1.4k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
17k
プロジェクトマネージャーに最後まで残るたった一つの仕事は交渉
ichimichi
1
160
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Facilitating Awesome Meetings
lara
54
6.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
6
640
Rails Girls Zürich Keynote
gr2m
94
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Gamification - CAS2011
davidbonilla
81
5.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.6k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
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依存)