.NET Aspire 入門
プロジェクト構成、サービスディスカバリー、Aspire ダッシュボードを取り上げながら、初めての .NET Aspire アプリケーションを構築するための手順を解説します。
この記事では、初めての .NET Aspire アプリケーションの構築手順を案内します。.NET Aspire の概要とその特徴を知りたい場合は、What is .NET Aspire の記事をご覧ください。
Prerequisites
.NET Aspire を始める前に準備しておくべきものがいくつかあります。
- Visual Studio 2022 Preview (バージョン 17.9 以上)
- .NET Aspire ワークロードがインストールされていること
- そして .NET 8.0
- Docker Desktop
Visual Studio を使用したくない場合は、dotnet workload install aspire コマンドで dotnet CLI を使って .NET Aspire をインストールすることもできます。その後はお好みの IDE を自由に使用できます。
.NET Aspire の前提条件のインストール方法に関する包括的なガイドについては、How to install .NET Aspire をご覧ください。
Create new project
Visual Studio で File > New > Project に移動し、プロジェクトの種類のドロップダウンで .NET Aspire を選択するか、“Aspire” という単語を検索します。次の 2 つのテンプレートが表示されるはずです。
- .NET Aspire Application — 空の .NET Aspire プロジェクトテンプレート。
- .NET Aspire Starter Application — Blazor フロントエンド、API バックエンドサービス、そしてオプションで Redis を使ったキャッシュを含む、より包括的なプロジェクトテンプレート。
最初の .NET Aspire アプリには .NET Aspire Starter Application テンプレートを選択します。
プロジェクトに名前を付け、Additional information ダイアログで Use Redis for caching オプションを有効にしてください。これは完全にオプションですが、.NET Aspire ができることの良い例として役立ちます。
Using dotnet CLI
dotnet CLI を使って .NET Aspire アプリを作成することもできます。.NET Aspire Starter Application テンプレートを使ってアプリを作成するには、次のコマンドを使用し、Foo を希望のソリューション名に置き換えてください。
dotnet new aspire-starter --use-redis-cache --output Foo
Project structure
.NET Aspire ソリューションが作成されたので、その構成を見てみましょう。ソリューションには 4 つのプロジェクトがあるはずです。
- ApiService: フロントエンドがデータを取得するために使用する ASP.NET Core API プロジェクト。
- AppHost: .NET Aspire アプリケーションのさまざまなプロジェクトとサービスを接続・構成することでオーケストレーターとして機能します。
- ServiceDefaults: 回復力、サービスディスカバリー、テレメトリーに関連する構成を管理するために使用される共有プロジェクト。
- Web: フロントエンドとして機能する Blazor アプリケーション。
プロジェクト間の依存関係は次のようになります。
上から始めましょう。
AppHost project
これは私たちの .NET Aspire ソリューションのオーケストレータープロジェクトです。その役割は、.NET Aspire アプリケーションのさまざまなプロジェクトとサービスを接続・構成することです。
その .csproj ファイルを見てみましょう。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsAspireHost>true</IsAspireHost>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Foo.ApiService\Foo.ApiService.csproj" />
<ProjectReference Include="..\Foo.Web\Foo.Web.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Aspire.Hosting" Version="8.0.0-preview.1.23557.2" />
</ItemGroup>
</Project>
2 つの点が目立ちます。
IsAspireHost要素は、このプロジェクトをソリューションのオーケストレーターとして明示的にマークしますAspire.Hostingパッケージ参照。このパッケージには、.NET Aspire アプリケーションモデルのコア API と抽象化が含まれています。フレームワークはまだプレビュー段階にあるため、.NET Aspire NuGet パッケージもプレビューリリースとしてマークされています。
次に Program.cs を見てみましょう。さまざまなプロジェクトを接続し、キャッシュを有効にするために使用される、非常になじみのあるビルダーパターンに気付くでしょう。
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedisContainer("cache");
var apiservice = builder.AddProject<Projects.Foo_ApiService>("apiservice");
builder.AddProject<Projects.Foo_Web>("webfrontend")
.WithReference(cache)
.WithReference(apiservice);
builder.Build().Run();
上のコードが本質的に行うことは次のとおりです。
DistributedApplicationを構築するために使用されるIDistributedApplicationBuilderのインスタンスを作成します- 後でプロジェクトとサービスから参照できる
RedisContainerResourceを作成します ApiServiceプロジェクトをアプリケーションに追加し、ProjectResourceのインスタンスを保持しますWebプロジェクトをアプリケーションに追加し、Redis キャッシュとApiServiceを参照します- 最後に
Build()を呼び出してDistributedApplicationインスタンスを構築し、Run()を呼び出して実行します。
ApiService project
ApiService プロジェクトは /weatherforecast エンドポイントを公開しており、私たちの Web プロジェクトから利用できます。API を利用可能にするため、AppHost プロジェクトに登録し、apiservice という名前を付けました。
builder.AddProject<Projects.Foo_ApiService>("apiservice")
Web project
Web プロジェクトは Blazor フロントエンドを表し、ApiService が公開する /weatherforecast エンドポイントを利用します。その方法こそが、.NET Aspire の魔法が本格的に発揮される場所です。
型付きの HttpClient を使用していることに気付くでしょう。
public class WeatherApiClient(HttpClient httpClient)
{
public async Task<WeatherForecast[]> GetWeatherAsync()
{
return await httpClient.GetFromJsonAsync<WeatherForecast[]>("/weatherforecast") ?? [];
}
}
ここで Program.cs を見ると、14 行目に興味深い記述があります。
builder.Services.AddHttpClient<WeatherApiClient>(client =>
client.BaseAddress = new("http://apiservice"));
ApiService プロジェクトを DistributedApplication の ProjectResource として追加するときに apiservice という名前を付けたことを覚えていますか? この行で、型付きの WeatherApiClient がサービスディスカバリーを使用し、apiservice という名前のサービスに接続するように構成されます。http://apiservice は、追加の構成なしで、ApiService リソースの正しいアドレスに自動的に解決されます。
ServiceDefaults project
AppHost プロジェクトと同様に、共有プロジェクトも特別なプロジェクトプロパティで区別されます。
<IsAspireSharedProject>true</IsAspireSharedProject>
このプロジェクトは、回復力、サービスディスカバリー、テレメトリーに関して、すべての異なるプロジェクトとサービスが同じ方法でセットアップされることを保証します。これは、ソリューションのプロジェクトやサービスがそれぞれの IHostApplicationBuilder インスタンス上で呼び出せる一連の拡張メソッドを公開することで実現されています。
Run the project
プロジェクトを実行するには、AppHost をスタートアッププロジェクトとして設定し、Visual Studio で run (F5) を押してください。あるいは、コマンドラインから dotnet run --project Foo/Foo.AppHost でプロジェクトを実行することもできます (Foo は実際のプロジェクト名に置き換えてください)。
アプリケーションが起動すると、.NET Aspire ダッシュボードが表示されます。
ダッシュボードでは、.NET Aspire アプリケーションのさまざまな部分 (プロジェクト、コンテナー、実行可能ファイル) を監視できます。また、サービスの集約された構造化ログ、リクエストトレース、その他のさまざまな有用なメトリクスも提供します。
これで完了です! 初めての .NET Aspire アプリケーションの構築と実行、おめでとうございます!





Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.