mcpField
A
aspire

aspire

github.com/codewithmukeshクラウド・DevOps7933.0k 回インストール12 週間前に更新
リポジトリ

aspire について

複数サービスのアプリを開発する .NET 開発者向けの .NET Aspire スキルです。ローカルでのオーケストレーション、共通設定、可観測性、デプロイ用アセットの生成を扱います。

主な機能

  1. 01AppHost によるローカルオーケストレーション
  2. 02共通サービスデフォルト
  3. 03データベースとブローカーの統合
  4. 04ダッシュボードでのログ・メトリクス・トレース
  5. 05デプロイ用アセットの生成

活用シーン

  1. 01サービスと依存コンポーネントの一括起動
  2. 02ヘルスチェックとテレメトリの共通設定
  3. 03コンテナーや Kubernetes のデプロイマニフェスト生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/codewithmukesh/dotnet-claude-kit --skill aspire

インストール後、Claude Code で/aspireを入力して読み込まれたか確認します。

詳細

.NET Aspire

基本原則

  1. AppHost がオーケストレーションを担い、それ自体はデプロイしません — Aspire の主な役割は、サービス、データベース、メッセージブローカーをまとめて起動するローカル開発環境を提供することです。最新の Aspire では、デプロイ用アセット(docker-compose/Kubernetes マニフェスト向けの aspire publish、Azure Container Apps 向けの aspire deploy)も生成できますが、AppHost プロセス自体は開発時およびビルド時に使うツールであり、本番環境のランタイムではありません。
  2. ServiceDefaults を基盤にする — ServiceDefaults プロジェクトでは、すべてのサービスの OpenTelemetry、ヘルスチェック、回復性を一元的に設定します。
  3. Aspire のインテグレーションを使う — Aspire には、PostgreSQL、Redis、RabbitMQ、SQL Server などの組み込みインテグレーションがあります。これらは接続文字列、ヘルスチェック、トレースを自動的に処理します。
  4. ダッシュボードをオブザーバビリティツールとして使う — ローカル開発でのトレース、ログ、メトリクスには、Seq/Grafana をローカルにセットアップする代わりに Aspire ダッシュボードを使います。

パターン

AppHost の設定
// AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);

// Infrastructure resources
var postgres = builder.AddPostgres("postgres")
    .WithPgAdmin()
    .AddDatabase("myappdb");

var redis = builder.AddRedis("redis")
    .WithRedisInsight();

var rabbitmq = builder.AddRabbitMQ("messaging")
    .WithManagementPlugin();

// Application projects
var api = builder.AddProject<Projects.MyApp_Api>("api")
    .WithReference(postgres)
    .WithReference(redis)
    .WithReference(rabbitmq)
    .WithExternalHttpEndpoints();

var worker = builder.AddProject<Projects.MyApp_Worker>("worker")
    .WithReference(postgres)
    .WithReference(rabbitmq);

builder.Build().Run();
ServiceDefaults
// ServiceDefaults/Extensions.cs — Standard Aspire service defaults
// Configures OpenTelemetry (metrics + tracing), health checks, service discovery, and resilience
public static class Extensions
{
    public static IHostApplicationBuilder AddServiceDefaults(this IHostApplicationBuilder builder)
    {
        builder.ConfigureOpenTelemetry();
        builder.AddDefaultHealthChecks();
        builder.Services.AddServiceDiscovery();

        builder.Services.ConfigureHttpClientDefaults(http =>
        {
            http.AddStandardResilienceHandler();
            http.AddServiceDiscovery();
        });

        return builder;
    }

    // ConfigureOpenTelemetry: adds logging, metrics (ASP.NET, HttpClient, Runtime),
    //   tracing (ASP.NET, HttpClient, EF Core), and OTLP exporter if configured
    // AddDefaultHealthChecks: adds a "self" liveness check tagged ["live"]
}
プロジェクトでの ServiceDefaults の使用
// MyApp.Api/Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();

// Add Aspire integrations
builder.AddNpgsqlDbContext<AppDbContext>("myappdb");
builder.AddRedisDistributedCache("redis");

var app = builder.Build();
app.MapDefaultEndpoints(); // health check endpoints
app.Run();
サービス間通信
// AppHost — configure service references
var orderApi = builder.AddProject<Projects.OrderApi>("order-api");
var paymentApi = builder.AddProject<Projects.PaymentApi>("payment-api")
    .WithReference(orderApi); // paymentApi can discover orderApi

// In PaymentApi — use service discovery
builder.Services.AddHttpClient<OrderClient>(client =>
{
    client.BaseAddress = new Uri("https+http://order-api");
});
Aspire を使ったソリューション構成
MyApp.slnx
├── MyApp.AppHost/               # Aspire orchestrator
│   └── Program.cs
├── MyApp.ServiceDefaults/       # Shared service configuration
│   └── Extensions.cs
├── src/
│   ├── MyApp.Api/               # Web API project
│   └── MyApp.Worker/            # Background worker
└── tests/
    └── MyApp.Api.Tests/

アンチパターン

AppHost プロセスをデプロイしない
// BAD — running the AppHost executable in production as an orchestrator
// The AppHost is a dev/build-time tool, not a production runtime

// GOOD — deploy the generated assets, not the AppHost:
//   aspire publish  → docker-compose / Kubernetes manifests from the app model
//   aspire deploy   → direct deployment (e.g., Azure Container Apps)
Aspire で接続文字列をハードコードしない
// BAD — hardcoding connection strings defeats Aspire's purpose
builder.Services.AddDbContext<AppDbContext>(o =>
    o.UseNpgsql("Host=localhost;Database=myapp;..."));

// GOOD — use Aspire integration (connection string injected automatically)
builder.AddNpgsqlDbContext<AppDbContext>("myappdb");
ServiceDefaults を省略しない
// BAD — manually configuring each service
builder.Services.AddOpenTelemetry()...
builder.Services.AddHealthChecks()...

// GOOD — use shared service defaults
builder.AddServiceDefaults();

判断ガイド

シナリオ推奨事項
複数のサービスを使ったローカル開発Aspire AppHost
単一プロジェクトのローカル開発dotnet run で問題ありません。Aspire は任意です
サービス構成の共有ServiceDefaults プロジェクト
ローカル開発用データベースAspire の AddPostgres()/AddSqlServer()
サービスディスカバリーAspire 組み込みのサービスディスカバリー
本番環境へのデプロイaspire publish(compose/K8s マニフェスト)または aspire deploy(ACA)。AppHost 自体は決してデプロイしません
ローカル開発でのオブザーバビリティAspire ダッシュボード(自動設定)

コメント