MS_DotNetAspire - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

.NET Aspire

概要

複数のサービスで構成されるアプリケーション開発やデプロイを支援する
ツールやライブラリの集合体

補足(何を解決しようとしているか): 「Web アプリ + API + DB + Redis + …」
という構成をローカルで一発で立ち上げ、繋ぎ、観測するための仕組みである。

【従来】docker-compose.yml を書く
         ・接続文字列を環境変数で手渡し
         ・待ち合わせ(depends_on)を自分で面倒みる
         ・ログ/メトリクスは各自

【Aspire】AppHost プロジェクト(C# のコード)で構成を書く
         ・接続情報が自動的に注入される(サービス ディスカバリ)
         ・ダッシュボードでログ/トレース/メトリクスを一望
         ・一部だけコンテナ、一部はプロセス、という混在が自然

構成が YAML ではなく C# のコードである点が特徴で、
補完とコンパイル エラーの恩恵を受けられる。

var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("cache");
var db    = builder.AddSqlServer("sql").AddDatabase("appdb");
builder.AddProject<Projects.Api>("api").WithReference(db);
builder.AddProject<Projects.Web>("web").WithReference(cache).WithReference(api);
builder.Build().Run();

詳細

3つ以上の新規プロジェクト、3つ以上のコンテナ・プロセスを必要するケースなどでは
有効かも...と言う程度。

  • Docker コンポーズと異なり、全部 Docker 化する必要はない。
    Docker 側のリモート・デバッグが出来るのは良い。
  • Docker 側のリモート・デバッグもコンテナ化されているものはプロダクトなのだから
    デバッグまでは要らんだろ...と言う感じ。
  • 一部のコンテナを「コレから安定したコンテナに変えて移行したい。」と言う
    過渡期がプロジェクト中に在れば話は別だが...。
  • 新しいモノを覚えるのが大変なので、使いこなせれば良いケド、
    使いこなすのが大変なので使わないと言う話になりそう。

補足(この評価について): 「導入コストに見合うか」という原文の慎重な評価は、
判断基準として妥当である。整理すると次のようになる。

条件 Aspire の要否
サービスが 1〜2 個 不要(複雑さが増えるだけ)
全部コンテナ化済みで安定 不要(Compose で足りる)
サービスが多く、依存の配線が煩雑 有効
一部だけコンテナ、一部はローカル実行という過渡期 有効(原文が唯一認めている場面)
分散トレースを手軽に見たい 有効

原文が「新しいモノを覚えるのが大変」と述べる点は、
IaC (Infrastructure as Code)
「適切なターゲットに有効」「スケール・メリットが必要」という留保と
同じ趣旨であり、学習コストを回収できる規模かどうかが判断軸になる。

補足(誤解されやすい点): Aspire は
本番のオーケストレーターではない

【開発時】Aspire AppHost がローカルで全部を起動・配線する
【本番時】Aspire は動かない
           → マニフェストを出力し、Azure Container Apps / K8s へ変換する

つまり Docker Compose や Kubernetes を置き換えるものではなく
「開発時の体験」と「本番へのデプロイ定義の生成」を担う。
この点を誤解すると評価を誤る。

補足(観測可能性): Aspire が標準で持つ
OpenTelemetry ベースのダッシュボードは、
Application Insights
ローカル版のような位置づけで、
ログ・トレース・メトリクスを最初から得られる。
「サービス間の呼び出しがどこで詰まっているか」を
追加実装なしで見られるのは、多サービス構成では効果が大きい。

参考

Microsoft Learn


Tags: 移行, .NET開発, ツール類

⚠️ **GitHub.com Fallback** ⚠️