Aspire とは何ですか?
Aspire は、分散アプリケーション向けのコードファーストなオーケストレーションおよびオブザーバビリティ レイヤーです。
Aspire を使うと、サービス、フロントエンド、データベース、キュー、キャッシュ、コンテナー、クラウド依存関係を、ひとつのアプリケーション システムとしてモデル化できます。本番環境ではそれらは一体となって動作しますが、開発時には個別に起動し、手作業で構成し、複数のターミナルやダッシュボードをまたいでデバッグしなければならないことがよくあります。Aspire は、そのシステムを定義する場所、起動するコマンド、観測するためのツールチェーンをひとつにまとめます。
アーキテクチャは AppHost で記述し、aspire run でローカル実行し、Aspire Dashboard で状態を確認し、同じアプリ モデルを デプロイ に使えます。Aspire は現在、C# と TypeScript を AppHost の記述言語としてサポートしつつ、C#、JavaScript、Python、Go、Java、Rust、PowerShell などで書かれたワークロードをオーケストレーションできます。AI コーディング ツールも、Aspire CLI、スキル ファイル、MCP サーバーを通じて、その同じモデルを利用します。
Aspire は何であり、何ではないか
Section titled “Aspire は何であり、何ではないか”- Aspire は、分散アプリケーションを一か所でモデル化し、実行し、観測するためのプロダクト レイヤーです。
- Aspire は マルチ言語です。C# または TypeScript の AppHost を選び、多様な言語のワークロードを接続できます。
- Aspire は アプリケーション フレームワークの置き換えではありません。
- Aspire は クラウド プロバイダーでも本番ランタイムでもありません。
- Aspire は .NET 専用ソリューションのためだけのものではありません。Languages & runtimes を参照してください。
Aspire を使う理由
Section titled “Aspire を使う理由”現代のアプリケーション開発では、複数のリソース、ランタイム、ワークフローを協調させる必要があります。Aspire を使わない場合、次のような課題が生じます。
分散開発のつらさ
Section titled “分散開発のつらさ”| 問題 | Aspire なし | Aspire あり |
|---|---|---|
| サービスの起動 | 5 つのターミナルを開き、5 種類のコマンドを実行し、正しい順序で起動することを祈る | aspire run を実行するだけで、すべてが自動起動します。AppHost の概要を参照してください。 |
| 接続文字列 | いたる所に localhost:5432 をハードコードし、本番デプロイで壊れる | サービス ディスカバリが処理するため、同じコードがローカルでも本番でも動作します。サービス ディスカバリを参照してください。 |
| 「自分の環境では動く」問題 | メンバーごとにポートも設定も異なる | ひとつの AppHost 定義を全員が同じように実行します。最初のアプリ チュートリアルを参照してください。 |
| デバッグ | 各サービスに個別にデバッガーをアタッチする | |
| ログの所在 | 5 つのターミナルを見比べる必要がある | Aspire Dashboard にすべてのログが集約されます。Dashboard overviewを参照してください。 |
| データベースの追加 | ローカルにインストールし、接続を設定し、バージョン差異がないことを祈る | builder.AddPostgres("db") で、コンテナー化され、バージョン管理された一貫した構成になります。Integrationsを参照してください。 |
| 複数言語での開発 | C#、Node.js、Python などごとに別々のスクリプトや慣習をつなぎ合わせる | 複数言語のスタックを含む同じ分散アプリを、ひとつの AppHost でモデル化できます。Languages & runtimesを参照してください。 |
| AI コーディング エージェントの利用 | エージェントが環境の断片しか見えず、実行時の状態を推測するしかない | aspire agent init により、アプリ モデル、ログ、トレース、リソースへ構造化されたアクセスを与えられます。Use AI coding agentsを参照してください。 |
Aspire の前と後
Section titled “Aspire の前と後”Aspire を使わない場合、起動手順は次のようになりがちです。
-
データベース コンテナーを起動する
Terminal window docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=secret postgres:15 -
C# API サービスを起動する
Terminal window cd api && dotnet run -
Python ワーカーを起動する
Terminal window cd worker && source .venv/bin/activate && python main.py -
JavaScript フロントエンドを起動する
Terminal window cd frontend && npm run dev -
すべてが接続できるか手動で確認する
面倒で壊れやすい作業が続きます。
Aspire を使う場合 は、次のコマンドだけです。
aspire runそして AppHost が、複数言語スタックを含めたシステム全体をコードで定義します。
var builder = DistributedApplication.CreateBuilder(args);
var db = builder.AddPostgres("db");
var api = builder.AddProject<Projects.Api>("api") .WithReference(db);
var worker = builder.AddPythonApp("worker", "../worker", "main.py") .WithReference(db);
builder.AddNpmApp("frontend", "../frontend") .WithReference(api);
builder.Build().Run();import { createBuilder } from './.modules/aspire.js';
const builder = await createBuilder();
const db = await builder.addPostgres("db");
const api = await builder .addNodeApp("api", "../api", "server.js") .withReference(db);
const worker = await builder .addPythonApp("worker", "../worker", "main.py") .withReference(db);
await builder .addViteApp("frontend", "../frontend") .withReference(api);
await builder.build().run();そのアプリ モデルを AI コーディング ツールにも使わせたい場合は、Use AI coding agentsを参照してください。
主なメリット
Section titled “主なメリット”- コードで構成できる: スクリプトや設定ファイルにアーキテクチャを分散させる代わりに、AppHost でリソース、参照、依存関係を定義できます。
- システム全体をデバッグできる: ひとつのコマンドでアプリを起動し、ログやトレースを一箇所で確認し、Aspire Dashboard でスタック全体をデバッグできます。
- 同じモデルをデプロイに使える: ローカル開発でも、Kubernetes、クラウド、独自インフラへのデプロイでも、同じアーキテクチャ定義を使えます。
- 複数言語で使える: C#、Node.js、Python など、サポートされている言語が異なっても同じ分散アプリ モデルを使えます。
- AI エージェントを活用できる: Aspire CLI のワークフロー、スキル ファイル、MCP を通じて、コーディング エージェントに構造化されたアプリ情報を渡せます。
- 実行対象を拡張できる: Aspire の統合機能を使って、データベース、キャッシュ、メッセージング、クラウド サービスを追加できます。
Aspire の仕組み
Section titled “Aspire の仕組み”Aspire は、コードファーストのアプローチ でアプリケーションのアーキテクチャを定義します。複雑な設定ファイルを管理する代わりに、サービス、データベース、フロントエンド、依存関係をコードで直接記述します。
その AppHost は、分散アプリがどのように構成されるかを表すモデルになります。
- リソース: プロジェクト、実行可能ファイル、コンテナー、データベース、キャッシュ、クラウド サービスを追加します。
- 関係: 参照、依存関係の順序、サービス ディスカバリの接続を表現します。
- 実行: ローカル起動、環境設定、ヘルス チェック、診断を Aspire にオーケストレーションさせます。
- 運用: CLI、Dashboard、AI エージェント用ツールから同じモデルを利用します。
AppHost の言語が変わっても、Aspire はそのモデルを一貫して保ちます。TypeScript AppHost でも、ゲスト/ホスト アーキテクチャを通じて、C# AppHost と同じオーケストレーション エンジン、統合機能、サービス ディスカバリ、診断を利用できます。
このアプローチには、次の利点があります。
- 型安全性: 構成ミスをコンパイル時に検出できます。
- 入力補完のサポート: アーキテクチャ定義中にコード補完やドキュメントを利用できます。
- バージョン管理: インフラ定義をコードと一緒に管理できます。
- リファクタリング: 使い慣れた開発ツールでアプリケーション アーキテクチャを再構成できます。
- 共通ツールチェーン: 開発者と AI エージェントが同じリソース、ログ、トレースを確認できます。
Aspire がアプリケーションをどのように支えているかは、AppHostをご覧ください。
開発環境と本番環境
Section titled “開発環境と本番環境”Aspire は、開発環境と本番環境のギャップを埋めます。
- 開発環境: 依存関係管理、サービス ディスカバリ、集約された診断を備えた状態で、サービスをローカル実行できます。
- 本番環境: 同じアーキテクチャ定義を、クラウド プラットフォーム、Kubernetes、自社環境へデプロイできます。
- 一貫性: ローカルのトポロジを、実際にデプロイしたい構成に合わせ続けられます。
- 自動化: 人間の開発者も AI エージェントも、同じ単一の情報源から作業できます。
Aspire は既存のデプロイ ワークフローを置き換えるものではありません。環境をまたいで一貫した方法でアプリケーション アーキテクチャを定義し管理できるようにすることで、それらを強化します。
詳しくは、パイプラインとアプリのトポロジーをご覧ください。