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 オプションを使って有効にできます。

  1. 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
    
  2. 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 を使う利点」を参照してください。

その他のリソース