新しい .NET Aspire プロジェクトを作成する方法について学習する
クラウドネイティブ開発では、開発者が、データベース、メッセージング キュー、キャッシュのようなさまざまなマイクロサービスを接続する必要がある場合があります。 .NET Aspire では、これらのサービス間の接続の作成と管理に使用できるテンプレートのセットを提供することで、このプロセスが簡略化されます。
このユニットでは、新しい .NET Aspire プロジェクトを作成し、2 つのスターター プロジェクト テンプレートの違いを解釈する方法について学習します。 その後、生成されたソリューションの構造を調べます。
.NET Aspire の前提条件
新しい .NET Aspire プロジェクトを作成する前に、ローカルにインストールする必要がある前提条件がいくつかあります。
- .NET 8
- Visual Studio 2022 Preview
- Docker Desktop または Podman
- Visual Studio の .NET Aspire ワークロード
次の演習では、これらの前提条件をインストールする手順を行います。
プロジェクトに最適な .NET Aspire テンプレートを選択する
現在、次の 2 つの .NET Aspire スターター テンプレートを使用できます。
.NET Aspire Application:このテンプレートは、新しいプロジェクトの開始点として適しています。 AspireSample.AppHost および AspireSample.ServiceDefaults プロジェクトのみが含まれます。 このテンプレートは、最初から開始し、独自のコンポーネントとサービスを追加する場合に便利です。
.NET Aspire Starter Application:このテンプレートには AspireSample.AppHost および AspireSample.ServiceDefaults プロジェクトが含まれていますが、サンプルの Blazor App AspireSample.Web と、それにデータを提供する API AspireSample.ApiService も含まれています。 これらのプロジェクトは、サービス検出とその他の一般的な .NET Aspire 機能の基本的な例を使用して事前に構成されています。
両方の Aspire テンプレートには、サービスの正常性とそれらの間のトラフィックを監視するためのダッシュボードが用意されています。 ダッシュボードは、一目でアプリの状態と構造の概要がわかるので、ローカル開発エクスペリエンスの向上に役立ちます。
次の 3 つのプロジェクト テンプレートも使用できます。
- .NET Aspire App Host:App Host (オーケストレーター) プロジェクトのみを含むテンプレート。
- .NET Aspire Service Defaults:Service Defaults プロジェクトのみを含むテンプレート。
- .NET Aspire Test Project:App Host プロジェクトの単体テストのみを含むテンプレート。
.NET Aspire テンプレートを使用する新しい .NET Aspire プロジェクトの作成
Visual Studio の起動ダイアログを使用して、新しい .NET Aspire プロジェクトを作成することができます。[ファイル]>[新規]>[プロジェクト] も使用できます。 .NET CLI コマンドを使用することもできます。 .NET Aspire Application テンプレートを使用してソリューションを作成するには、次のコマンドを使用します。
dotnet new aspire
または、.NET Starter Application テンプレートを使用するには、次のコマンドを使います。
dotnet new aspire-starter
Visual Studio を使用する利点は、ダイアログで構成オプションを選択することです。 .NET CLI コマンドは、既定の設定で新しい .NET Aspire プロジェクトを作成する場合に便利ですが、省略可能なフラグを使用して既定値を変更できます。 次の演習では、両方の方法を使用して、新しい .NET Aspire プロジェクトを作成する方法を確認します。
.NET Aspire テンプレートによって生成されるソリューションの構造を調べる
.NET Aspire テンプレートでは、特定の構造を持つソリューションが生成されます。 この構造は、キャッシュまたはテスト オプションが有効になっていない、スターター アプリケーションの簡略化された図です。
────📂 AspireSample
├───📂 AspireSample.ApiService
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├─── appsettings.json
│ ├─── AspireSample.ApiService.csproj
│ └─── Program.cs
├───📂 AspireSample.AppHost
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├─── appsettings.json
│ ├─── AspireSample.AppHost.csproj
│ └─── Program.cs
├───📂 AspireSample.ServiceDefaults
│ ├─── AspireSample.ServiceDefaults.csproj
│ └─── Extensions.cs
├───📂 AspireSample.Web
│ ├───📂 Components
│ │ ├───📂 Layout
│ │ │ ├─── ...
│ │ ├───📂 Pages
│ │ │ ├─── ...
│ │ ├─── ...
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├───📂 wwwroot
│ │ ├───...
│ ├─── appsettings.json
│ ├─── AspireSample.Web.csproj
│ ├─── Program.cs
│ └─── WeatherApiClient.cs
└─── AspireSample.sln
どちらのテンプレートでも AppHost および ServiceDefaults プロジェクトが追加されます。 これらのプロジェクトは、.NET Aspire を使用して構築されたアプリケーションの中核をなすものです。 AppHost プロジェクトはエントリ ポイントであり、オーケストレーターとして機能する役割があります。
ServiceDefaults プロジェクトには、アプリケーションの既定の構成が含まれています。 これらの構成は、ソリューション内のすべてのプロジェクトで再利用されます。
上記のソリューションには、Web および ApiService プロジェクトも含まれています。 Web プロジェクトは、カウンターを持ち、ApiService を呼び出して予測データを取得する Blazor WebAssembly アプリです。 ApiService は、予測データを返すシンプルな API です。
コード構造を見ていく
AspireSample.AppHost プロジェクトの Program.cs には次のコードがあります。
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("cache");
var apiService = builder.AddProject<Projects.AspireStarterSample_ApiService>("apiservice");
builder.AddProject<Projects.AspireStarterSample_Web>("webfrontend")
.WithReference(cache)
.WithReference(apiService);
builder.Build().Run();
上記のコードを 1 行ずつ見ていきます。
IDistributedApplicationBuilder
であるbuilder
変数を作成します。IResourceBuilder<RedisResource>
であるcache
変数を作成します。プロジェクトの
IServiceMetadata
の詳細を含むジェネリック型パラメーターを使用してAddProject
を呼び出し、AspireSample.ApiService プロジェクトをアプリケーション モデルに追加します。これは、.NET Aspire の基本的な構成要素です。
AddProject
では、アプリ内のプロジェクト間のサービス検出と通信が構成されます。 名前引数 apiservice は、アプリケーション モデル内のプロジェクトを特定するために使用され、後で通信するプロジェクトによって使用されます。再度
AddProject
を呼び出します。今回は、アプリケーション モデルに AspireSample.Web プロジェクトを追加します。 また、WithReference
の複数の呼び出しをチェーンして、cache および apiservice 変数を渡します。WithReference
API は、.NET Aspire のもう 1 つの基本的な API であり、サービス検出情報または接続文字列構成を、アプリケーション モデルに追加するプロジェクトに挿入します。最後に、
builder
ではBuild
とRun
を呼び出して、アプリケーションを起動します。