コンテンツにスキップ

既存のアプリを Aspireify する

最初にプログラミング言語を選択しましょう

このガイドでは、既存のアプリケーションに Aspire のオーケストレーションを追加する方法を紹介します。アプリが C#、Python、JavaScript、またはそれらの組み合わせで書かれていても問題ありません。ゼロから始めるのではなく、 aspire init コマンドを使って、現在のプロジェクトに段階的に Aspire を取り入れていきます。

既存のアプリに Aspire を追加する理由は?

Section titled “既存のアプリに Aspire を追加する理由は?”

分散アプリケーションが成長すると、複数のサービスを調整する作業は、設定ファイルの乱立、ハードコードされた URL、壊れやすい起動スクリプトといった“絡み合った糸”のようになっていきます。環境ごとに異なる接続文字列の管理、サービス間依存関係の手作業での配線、マイクロサービス全体にまたがる問題の追跡…。開発環境のセットアップも儀式のようになり、「データベース → キャッシュ → サービス A → サービス B」の順で起動しなければならず、わずかな手順ミスで最初からやり直し、ということも珍しくありません。

Aspire は、これらの複雑さを ひとつの統合オーケストレーション層 によって解消します。アプリケーション全体を一つのシステムとして扱い、コード内でサービスとその関係を一度定義するだけで (AppHost)、Aspire が自動的にサービス検出を行い、設定を挿入し、ログ・トレース・メトリクスを含むダッシュボードまで提供します。サービスが C#、Python、JavaScript のいずれで書かれていても、あるいはそれらが混在していても、開発からデプロイまで一貫した体験が得られます。

そして何より魅力的なのは、Aspire を段階的に採用できる ことです。まずはオーケストレーションを導入し、準備ができたら可観測性を追加し、必要に応じて外部サービスを統合するといった柔軟な進め方ができます。既存のコードベースに大幅な変更を加える必要はほとんどなく、もし Aspire が合わないと感じた場合でも元に戻すことができます。

始める前に、アプリケーションの使用言語に応じて、次の要件を満たすようにインストールされていることを確認してください。

  • .NET SDK 10.0 以降 — アプリケーションの言語に関係なく、Aspire AppHost に必要です。
  • Aspire CLI のインストール — オーケストレーションやデプロイのコマンドに必要です。
  • Aspire を追加する既存のアプリケーション。

C# アプリケーションの場合:

  • 1 つ以上の .NET または ASP.NET Core プロジェクト (.csproj) を含むソリューション
  • Visual Studio 2022 17.13 以降、Visual Studio Code、JetBrains Rider(任意)

プロジェクトタイプの例:

  • ASP.NET Core Minimal API
  • ASP.NET Core Razor Pages または Blazor アプリ
  • コンソールアプリケーション
  • Worker サービス
  • gRPC サービス
  • Azure Functions

Python アプリケーションの場合:

  • Python 3.10 以降 がインストールされていること
  • パッケージ管理のための uv (推奨) または pip
  • 既存の Python アプリケーション

アプリケーションタイプの例:

  • FastAPI web アプリケーション
  • Flask web アプリケーション
  • Django アプリケーション
  • Python スクリプト や Worker プロセス
  • Streamlit などのその他 Python Web フレームワーク

JavaScript/TypeScript アプリケーションの場合:

  • Node.js 22 以降 がインストールされていること
  • パッケージ管理のための npm, yarn, or pnpm
  • 既存の JavaScript/TypeScript アプリケーション

アプリケーションタイプの例:

  • React、 Vue、 Svelte アプリケーション (特に Vite ベース)
  • Node.js/Express API
  • Next.js アプリケーション
  • Angular アプリケーション
  • TypeScript バックエンド サービス

既存のアプリケーションに Aspire を追加する手順は、主に次のステップで進めます:

  1. Aspire 対応を初期化aspire init を使用して AppHost(オーケストレーション層)を追加します。
  2. アプリケーションを追加 — AppHost に C#、Python、JavaScript のアプリケーションを登録します。
  3. テレメトリーを構成(任意) — 可観測性のために OpenTelemetry を追加します。
  4. 統合を追加(任意) — データベース、キャッシュ、メッセージキューなどを接続します。
  5. 実行と検証 — Aspire オーケストレーションでアプリケーションの動作を確認します。

aspire init コマンドは、既存のアプリケーションに Aspire を追加するための出発点です。このコマンドはプロジェクト構造を分析し、サービスをオーケストレーションする AppHost を追加します。

  1. プロジェクトのディレクトリに移動します:

    ソリューションのディレクトリに移動
    cd /path/to/your-solution
    プロジェクトルートに移動
    cd /path/to/your-project
    ワークスペースルートに移動
    cd /path/to/your-workspace
  2. aspire init を実行して Aspire を初期化:

    Aspire を初期化
    aspire init

    aspire init コマンドは、既定で 対話モード で実行されます。実行すると次の処理が行われます。:

    • 既存のソリューション構成を検出する - プロジェクトベースの AppHost(AppHost.cs を含む AppHost プロジェクト)を作成する - プロジェクトを分析し、オーケストレーションに追加すべきものを提案する - 必要な Aspire パッケージをインストールする
    • 既存のプロジェクト構成を検出する - ファイルベースの AppHost(apphost.cs)を作成する - Python アプリケーションを分析し、オーケストレーションに追加すべきものを提案する - 必要な Aspire パッケージをインストールする
    • 既存のワークスペース構成を検出する - ファイルベースの AppHost(apphost.cs)を作成する - JavaScript / Node.js アプリケーションを分析し、オーケストレーションに追加すべきものを提案する - 必要な Aspire パッケージをインストールする

    aspire init コマンドおよびそのオプションの詳細については、 CLI リファレンス: aspire initを参照してください。

aspire init は何を作成するのか?

Section titled “aspire init は何を作成するのか?”

aspire init を実行すると、ソリューションにはプロジェクトベースの AppHost が作成されます:

  • ExampleEcommerce.sln (updated)
  • ディレクトリsrc/
    • ディレクトリExampleEcommerce.AppHost/ (new) orchestration project
      • ExampleEcommerce.AppHost.csproj project file
      • AppHost.cs orchestration code
    • ディレクトリApi/
      • ExampleEcommerce.Api.csproj
      • Program.cs
      • ディレクトリControllers/
    • ディレクトリWeb/
      • ExampleEcommerce.Web.csproj
      • Program.cs
      • ディレクトリPages/
    • ディレクトリOrderProcessor/
      • ExampleEcommerce.OrderProcessor.csproj
      • Worker.cs

これは Web フロントエンド、API サービス、バックグラウンド ワーカーを備えた典型的な e コマース ソリューションの例です。

aspire init を実行すると、プロジェクトにはファイルベースの AppHost が作成されます:

  • ディレクトリmy-saas-app/
    • apphost.cs (new) orchestration code
    • apphost.run.json (new) configuration
    • ディレクトリapi/
      • main.py
      • ディレクトリrouters/
      • ディレクトリmodels/
      • pyproject.toml
    • ディレクトリfrontend/
      • app.py
      • ディレクトリtemplates/
      • ディレクトリstatic/
      • requirements.txt
    • ディレクトリworker/
      • tasks.py
      • celery_config.py
      • requirements.txt

これは FastAPI バックエンド、Flask フロントエンド、Celery ワーカーを備えた典型的な SaaS アプリケーションの例です。

aspire init を実行すると、プロジェクトにはファイルベースの AppHost が作成されます:

  • ディレクトリmy-store/
    • apphost.cs (new) orchestration code
    • apphost.run.json (new) configuration
    • ディレクトリpackages/
      • ディレクトリapi/
        • ディレクトリsrc/
          • server.js
          • ディレクトリroutes/
        • package.json
      • ディレクトリweb/
        • ディレクトリsrc/
          • App.tsx
          • ディレクトリcomponents/
        • package.json
        • vite.config.ts
      • ディレクトリadmin/
        • ディレクトリsrc/
          • main.ts
          • ディレクトリviews/
        • package.json
    • package.json (workspace root)

これは Node.js API、React ストアフロント、管理ダッシュボードを備えた典型的なモノレポの例です。

新しく作成された AppHost プロジェクト内の AppHost.cs ファイルには、最初に次のような最小限のスターターコードが含まれています:

AppHost.cs — aspire init 後の初期状態
var builder = DistributedApplication.CreateBuilder(args);
// TODO: Add resources here
builder.Build().Run();

apphost.cs ファイルには、最初に次のような最小限のスターターコードが含まれています:

apphost.cs — aspire init 後の初期状態
#:sdk Aspire.AppHost.Sdk@13.0.0
var builder = DistributedApplication.CreateBuilder(args);
// TODO: Add resources here
builder.Build().Run();

apphost.cs ファイルには、最初に次のような最小限のスターターコードが含まれています:

apphost.cs — aspire init 後の初期状態
#:sdk Aspire.AppHost.Sdk@13.0.0
var builder = DistributedApplication.CreateBuilder(args);
// TODO: Add resources here
builder.Build().Run();

これは出発点となるコードです。次のセクションでは、既存のアプリケーションを追加し、それらの関係を構成していきます。

AppHost にアプリケーションを追加する

Section titled “AppHost にアプリケーションを追加する”

AppHost を用意したら、既存のアプリケーションを登録する必要があります。まず、アプリケーションの種類に応じたホスティング パッケージをインストールし、その後 AppHost にリソースを追加します。

ホスティング パッケージのインストール

Section titled “ホスティング パッケージのインストール”

C# プロジェクトで、プロジェクトベースのオーケストレーション (.csproj ファイル) を使用している場合、追加のパッケージは不要です。基本の Aspire SDK には、 AddProject<T> (またはファイルベース アプリ用の AddCSharpApp)のサポートが含まれています。

Python アプリケーションでは、Python 用のホスティング パッケージをインストールします。:

Aspire CLI — Aspire.Hosting.Python パッケージを追加
aspire add python

Aspire CLI は対話的です。求められたら適切な結果を選択してください:

Aspire CLI — 出力例
Select an integration to add:
> python (Aspire.Hosting.Python)
> Other results listed as selectable options...

このパッケージは、AddUvicornAppAddPythonAppAddPythonModule などのメソッドを提供します。

JavaScript / TypeScript アプリケーションの場合は、JavaScript 用のホスティング パッケージをインストールします:

Aspire CLI — Aspire.Hosting.JavaScript パッケージを追加
aspire add javascript

Aspire CLI は対話的です。求められたら適切な結果を選択してください:

Aspire CLI — 出力例
Select an integration to add:
> javascript (Aspire.Hosting.JavaScript)
> Other results listed as selectable options...

このパッケージは、AddViteAppAddNodeAppAddJavaScriptApp などのメソッドを提供します。

AppHost でリソースをモデル化する

Section titled “AppHost でリソースをモデル化する”

AppHost プロジェクト内の AppHost.cs ファイルを更新し、アプリケーションをリソースとして登録します。リソースは分散アプリケーションの構成要素であり、各サービス、コンテナー、インフラストラクチャ リソースは、Aspire がオーケストレーションできる対象になります。

apphost.cs ファイルを更新し、アプリケーションをリソースとして登録します。リソースは分散アプリケーションの構成要素であり、各サービス、コンテナー、インフラストラクチャ リソースは、Aspire がオーケストレーションできる対象になります。

C# プロジェクトの場合は、AddProject を使用して既存の C# プロジェクトを参照します:

AppHost.cs — Complete e-commerce example
var builder = DistributedApplication.CreateBuilder(args);
var api = builder.AddProject<Projects.ExampleEcommerce_Api>("api")
.WithHttpHealthCheck("/health");
var web = builder.AddProject<Projects.ExampleEcommerce_Web>("web")
.WithExternalHttpEndpoints()
.WithReference(api)
.WaitFor(api);
var orderProcessor = builder.AddProject<Projects.ExampleEcommerce_OrderProcessor>("orderprocessor")
.WithReference(api);
builder.Build().Run();

主なメソッド:

  • AddProject<T> - ソリューション内の .NET プロジェクトを追加します。
  • WithHttpHealthCheck - HTTP エンドポイントを通じてサービスの正常性を監視します。
  • WithReference - サービス間通信を有効にします。
  • WaitFor - 適切な起動順序を保証します。

Aspire では、Python アプリケーション向けにいくつかのメソッドが提供されています:

apphost.cs — Complete SaaS example
#:sdk Aspire.AppHost.Sdk@13.0.0
#:package Aspire.Hosting.Python@13.0.0
var builder = DistributedApplication.CreateBuilder(args);
// FastAPI backend
var api = builder.AddUvicornApp("api", "./api", "main:app")
.WithUv()
.WithHttpHealthCheck("/health");
// Flask frontend
var frontend = builder.AddUvicornApp("frontend", "./frontend", "app:app")
.WithUv()
.WithExternalHttpEndpoints()
.WithReference(api)
.WaitFor(api);
// Celery worker
var worker = builder.AddPythonApp("worker", "./worker", "celery")
.WithUv()
.WithArgs("worker", "-A", "tasks")
.WithReference(api);
builder.Build().Run();

主なメソッド:

  • AddUvicornApp - FastAPI、Flask などの ASGI / WSGI フレームワーク向け。
  • AddPythonApp - 単体の Python スクリプト向け。
  • WithUv() - 高速なパッケージ管理のために uv を使用します。(推奨)
  • WithPip() - 従来の pip を使用したパッケージ管理。

JavaScript アプリケーションの場合は、アプリケーションの種類に応じて適切なメソッドを使用します:

apphost.cs — Complete monorepo example
#:sdk Aspire.AppHost.Sdk@13.0.0
#:package Aspire.Hosting.JavaScript@13.0.0
var builder = DistributedApplication.CreateBuilder(args);
// Node.js API
var api = builder.AddNodeApp("api", "./packages/api", "src/server.js")
.WithNpm()
.WithHttpHealthCheck("/health");
// React storefront
var web = builder.AddViteApp("web", "./packages/web")
.WithExternalHttpEndpoints()
.WithReference(api)
.WaitFor(api);
// Admin dashboard
var admin = builder.AddViteApp("admin", "./packages/admin")
.WithExternalHttpEndpoints()
.WithReference(api)
.WaitFor(api);
builder.Build().Run();

主なメソッド:

  • AddViteApp - Vite ベースのアプリケーション(React、Vue、Svelte など)向け。
  • AddNodeApp - Node.js アプリケーション向け。
  • AddJavaScriptApp -npm/yarn/pnpm を使用する汎用的な JavaScript アプリケーション向け
    • WithNpm() / WithYarn() / WithPnpm() - 使用するパッケージ マネージャーを指定
  • WithRunScript - 開発時に実行する npm スクリプトを指定

WithReference の呼び出しにより、サービス間の依存関係が確立され、サービス検出が有効になります:

AppHost.cs — .NET サービスを接続する
// Omitted for brevity...
var api = builder.AddProject<Projects.YourApi>("api");
var web = builder.AddProject<Projects.YourWeb>("web")
.WithReference(api); // Web can call API
var worker = builder.AddProject<Projects.YourWorker>("worker")
.WithReference(api); // Worker can call API
// Omitted for brevity...
apphost.cs — Python サービスを接続する
// Omitted for brevity...
var api = builder.AddUvicornApp("api", "../python-api", "main:app")
.WithUv();
var worker = builder.AddPythonApp("worker", "../python-worker", "worker.py")
.WithReference(api); // Worker gets API_HTTP and API_HTTPS env vars
// Omitted for brevity...
apphost.cs — JavaScript サービスを接続する
// Omitted for brevity...
var api = builder.AddNodeApp("api", "../node-api", "server.js")
.WithNpm();
var frontend = builder.AddViteApp("frontend", "../react-frontend")
.WithReference(api); // Frontend gets API_HTTP and API_HTTPS env vars
// Omitted for brevity...

WithReference を呼び出すことで、リソース間の依存関係を宣言します。あとは Aspire が自動的に処理し、ローカル実行時でも本番環境でも、サービス同士が円滑に通信できるように、実行時およびデプロイ時に必要な構成を自動で注入してくれます。

テレメトリ構成を追加する(任意)

Section titled “テレメトリ構成を追加する(任意)”

ServiceDefaults は、.NET サービスに可観測性、回復性、正常性チェックを追加するための標準化された方法を提供します。この手順は任意ですが、本番アプリケーションでは推奨されます。

  1. aspire init の実行中に、ServiceDefaults を追加するかどうかを確認される場合があります。最初に追加しなかった場合でも、後から Aspire CLI を使用するか、手動で追加できます。

  2. ServiceDefaults を手動でプロジェクトに追加する:

    .NET CLI — ServiceDefaults をプロジェクトに追加する
    dotnet new aspire-servicedefaults -n YourProject.ServiceDefaults
    dotnet sln add YourProject.ServiceDefaults
    dotnet add YourProject reference YourProject.ServiceDefaults
  3. プロジェクトの Program.cs を更新して、ServiceDefaults を使用するようにする:

    Program.cs — ServiceDefaults を追加する
    var builder = WebApplication.CreateBuilder(args);
    // Add Aspire ServiceDefaults for observability and resilience
    builder.AddServiceDefaults();
    // ... your existing service configuration ...
    var app = builder.Build();
    // Map Aspire ServiceDefaults endpoints
    app.MapDefaultEndpoints();
    // ... your existing middleware ...
    app.Run();

ServiceDefaults の詳細については、 Service Defaults を参照してください。

Python アプリケーションは、OpenTelemetry を使用して Aspire ダッシュボードにテレメトリを送信できます:

  1. Python アプリケーションに OpenTelemetry パッケージをインストールします:

    Install OpenTelemetry packages
    uv add opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc
    uv add opentelemetry-instrumentation-fastapi # For FastAPI
    # Or for Flask:
    # uv add opentelemetry-instrumentation-flask
  2. Python アプリケーションで OpenTelemetry を構成します:

    Python — Configure OpenTelemetry
    import os
    from opentelemetry import trace, metrics
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.metrics import MeterProvider
    from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
    from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
    from opentelemetry.sdk.resources import Resource
    from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
    # Get OTLP endpoint from environment (injected by Aspire)
    otlp_endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
    # Configure tracing and metrics
    resource = Resource.create({"service.name": "api"})
    trace.set_tracer_provider(TracerProvider(resource=resource))
    metrics.set_meter_provider(MeterProvider(resource=resource))
    # Instrument your FastAPI app
    FastAPIInstrumentor.instrument_app(app)

JavaScript / Node.js アプリケーションも、OpenTelemetry を使用してテレメトリを送信できます:

  1. OpenTelemetry パッケージをインストールします:

    OpenTelemetry パッケージをインストール
    npm install @opentelemetry/api @opentelemetry/sdk-node \
    @opentelemetry/auto-instrumentations-node \
    @opentelemetry/exporter-trace-otlp-grpc \
    @opentelemetry/exporter-metrics-otlp-grpc
  2. テレメトリ構成ファイルを作成します:

    JavaScript — telemetry.js
    const { NodeSDK } = require('@opentelemetry/sdk-node');
    const {
    getNodeAutoInstrumentations,
    } = require('@opentelemetry/auto-instrumentations-node');
    const {
    OTLPTraceExporter,
    } = require('@opentelemetry/exporter-trace-otlp-grpc');
    const {
    OTLPMetricExporter,
    } = require('@opentelemetry/exporter-metrics-otlp-grpc');
    const {
    PeriodicExportingMetricReader,
    } = require('@opentelemetry/sdk-metrics');
    const { Resource } = require('@opentelemetry/resources');
    const otlpEndpoint =
    process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://localhost:4317';
    const sdk = new NodeSDK({
    resource: new Resource({ 'service.name': 'frontend' }),
    traceExporter: new OTLPTraceExporter({ url: otlpEndpoint }),
    metricReader: new PeriodicExportingMetricReader({
    exporter: new OTLPMetricExporter({ url: otlpEndpoint }),
    }),
    instrumentations: [getNodeAutoInstrumentations()],
    });
    sdk.start();
  3. アプリケーションのエントリーポイントの先頭で、テレメトリ構成をインポートします:

    JavaScript — app.js
    // This must be first!
    require('./telemetry');
    const express = require('express');
    // ... rest of your app

Aspire には、Redis、PostgreSQL、RabbitMQ などの一般的なサービスを簡単に扱える統合ライブラリが用意されています。これらの統合機能は、構成、正常性チェック、テレメトリを自動的に処理します。

AppHost に Redis などのホスティング統合を追加し、それを依存するリソースから参照すると、Aspire は必要な構成を自動的に注入します。これには、接続文字列、URL、環境変数、その他サービス固有の設定が含まれ、サービス間での接続文字列の手動管理が不要になります。

  1. アプリケーション内で Aspire の統合機能が有効に活用できるサービスを特定します。一般的な対象は次のとおりです:

    • データベース(PostgreSQL、SQL Server、MongoDB)
    • キャッシュ(Redis、Valkey)
    • メッセージング(RabbitMQ、Azure Service Bus、Kafka)
    • ストレージ(Azure Blob Storage、AWS S3)
  2. aspire add コマンドを使用して、AppHost に統合パッケージを追加します:

    Add a Redis integration
    aspire add redis

    このコマンドにより、必要な NuGet パッケージが追加され、統合の構成を支援します。

  3. AppHost を更新して統合機能を参照し、すべてのサービス間で共有します。:

    apphost.cs — Add Redis integration for polyglot apps
    var builder = DistributedApplication.CreateBuilder(args);
    // Add Redis resource
    var cache = builder.AddRedis("cache");
    // Share Redis with .NET API
    var api = builder.AddProject<Projects.YourApi>("api")
    .WithReference(cache)
    .WithHttpHealthCheck("/health");
    // Share Redis with Python worker
    var pythonWorker = builder.AddPythonApp("worker", "../python-worker", "worker.py")
    .WithReference(cache); // Python gets CACHE_HOST, CACHE_PORT env vars
    // Share Redis with Node.js service
    var nodeService = builder.AddNodeApp("service", "../node-service", "index.js")
    .WithReference(cache); // Node.js gets CACHE_HOST, CACHE_PORT env vars
    builder.Build().Run();
  4. 各開発言語で統合機能を構成します:

    Redis クライアントを .NET プロジェクトに追加
    dotnet add YourApi package Aspire.StackExchange.Redis
    Program.cs — Redis クライアントを構成する
    var builder = WebApplication.CreateBuilder(args);
    builder.AddRedisClient("cache");
    Redis クライアントを Python プロジェクトに追加
    uv add redis
    Python — Redis クライアントを構成する
    import os
    import redis
    # Aspire injects CACHE_HOST and CACHE_PORT
    redis_client = redis.Redis(
    host=os.getenv("CACHE_HOST"),
    port=int(os.getenv("CACHE_PORT")),
    decode_responses=True
    )
    Redis クライアントを Node.js プロジェクトに追加
    npm install redis
    JavaScript — Redis クライアントを構成する
    const redis = require('redis');
    // Aspire injects CACHE_HOST and CACHE_PORT
    const client = redis.createClient({
    socket: {
    host: process.env.CACHE_HOST,
    port: process.env.CACHE_PORT,
    },
    });

Integrations section で利用可能な統合機能を参照してください。

Aspire をアプリケーションに追加したので、実際に実行してオーケストレーションの動作を確認しましょう。

  1. ソリューション ディレクトリから、Aspire CLI を使用してアプリケーションを実行します:

    Aspire でアプリケーションを実行
    aspire run

    Aspire CLI は次の処理を行います:

    • AppHost(ファイルベースの apphost.cs)を検出する
    • ソリューションをビルドする
    • オーケストレーションされたすべてのサービスを起動する
    • Aspire ダッシュボードを起動する
  2. ダッシュボードの URL がターミナル出力に表示されます:

    出力の例
    🔍 Finding apphosts...
    apphost.cs
    Dashboard: https://localhost:17068/login?t=ea559845d54cea66b837dc0ff33c3bd3
    Logs: ~/.aspire/cli/logs/apphost-13024-2025-11-19-12-00-00.log
    Press CTRL+C to stop the apphost and exit.
  3. 表示された URL を使用して、ブラウザーでダッシュボードを開きます。次の情報を確認できます:

    • オーケストレーションされたすべてのリソースとその状態
    • 各サービスのリアルタイム ログ
    • 可観測性のためのトレースとメトリクス
    • 環境変数と構成情報
  4. 次の方法で、サービスが正しく動作していることを確認します:

    • Resources ページでサービスの正常性を確認する
    • アプリケーションのエンドポイントにアクセスする
    • ダッシュボードでログやトレースを確認する
  5. ターミナルで ⌘+C Control + C Control + C を押して、アプリケーションを停止します。

現在 Docker Compose を使用してサービスをオーケストレーションしている場合、Aspire はそれを置き換えることができ、さらに次のような追加のメリットを提供します。:

docker-compose.yml
services:
postgres:
image: postgres:latest
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=mydb
ports:
- "5432:5432"
api:
build: ./api
ports:
- "8080:8080"
environment:
- DATABASE_URL=postgres://postgres:postgres@postgres:5432/mydb
depends_on:
- postgres
web:
build: ./web
ports:
- "3000:3000"
environment:
- API_URL=http://api:8080
depends_on:
- api

Docker Compose と比べた Aspire の主な利点:

  • 記述量が圧倒的に少ない — それでいて、より表現力が高く強力。
  • URL の手動設定が不要 — サービス同士が自動的に相互発見する。
  • 型安全な参照 — サービス依存関係をコンパイル時にチェック可能。
  • 組み込みダッシュボード — Prometheus や Grafana などの追加ツールなしで可観測性を実現。
  • 開発からデプロイまで一貫 — 同じオーケストレーション コードをローカル実行にも利用でき、Docker Compose の生成や任意の環境へのデプロイが可能。
  • 統合ライブラリ — データベース、キャッシュ、メッセージ キュー向けのベストプラクティスを組み込んだ事前構築済みサポート。
  • 開発言語非依存 — C#、Python、JavaScript など多くの言語や、コンテナー化されたサービスに対応。

おめでとうございます! 既存のアプリケーションに Aspire を正常に追加できました。次におすすめのステップは次のとおりです:

質問 & 回答コラボレーションコミュニティディスカッション視聴