gRPC とネイティブ AOT
作成者: James Newton-King
.NET 8 では、gRPC で .NET ネイティブ Ahead-Of-Time (AOT) がサポートされています。 ネイティブ AOT を使うと、gRPC のクライアント アプリとサーバー アプリを、小さくて高速なネイティブ実行可能ファイルとして発行できます。
警告
.NET 8 では、すべての ASP.NET Core 機能がネイティブ AOT と互換性を持つわけではありません。 詳しくは、「ASP.NET Core とネイティブ AOT の互換性」を参照してください。
はじめに
AOT コンパイルは、アプリが発行されるときに実行されます。 ネイティブ AOT は、PublishAot
オプションを使って有効にできます。
gRPC のクライアントまたはサーバー アプリのプロジェクト ファイルに
<PublishAot>true</PublishAot>
を追加します。 これにより、発行時にネイティブ AOT コンパイルが有効になり、ビルド中および編集中に動的なコード使用状況分析が有効になります。<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <PublishAot>true</PublishAot> </PropertyGroup> <ItemGroup> <PackageReference Include="Grpc.AspNetCore" Version="2.51.0" /> <PackageReference Include="Google.Protobuf" Version="3.22.0" /> </ItemGroup> </Project>
ネイティブ AOT は、ASP.NET Core gRPC テンプレートで
-aot
オプションを指定して有効にすることもできます。dotnet new grpc -aot
dotnet publish -r <RID>
を使って、特定のランタイム識別子 (RID) でアプリを発行します。
アプリは発行ディレクトリから使用でき、実行に必要なすべてのコードがそこに含まれています。
ネイティブ AOT の分析には、アプリのすべてのコードと、アプリが依存するライブラリが含まれます。 ネイティブ AOT の警告を確認し、修正手順を実行してください。 開発ライフサイクルの早い段階で問題を検出するために、アプリの発行を頻繁にテストすることをお勧めします。
発行サイズを最適化する
ネイティブ AOT 実行可能ファイルには、アプリをサポートするために必要な外部依存関係のコードだけが含まれています。 使われないコードは自動的にトリミングされます。
ASP.NET Core gRPC サービスの発行サイズは、WebApplication.CreateSlimBuilder()
を使ってホスト ビルダーを作成することで最適化できます。 このビルダーは、ASP.NET Core アプリの実行に必要な最小限の機能リストを提供します。
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.AddGrpc();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
app.Run();
ネイティブ AOT を使う利点
ネイティブ AOT を使って発行されたアプリには、次の利点があります。
- ディスク占有領域の最小化
- 起動時間の短縮
- 必要なメモリの削減
ネイティブ AOT が提供する利点の詳細と例については、「ASP.NET Core でネイティブ AOT を使う利点」を参照してください。
その他のリソース
ASP.NET Core