次の方法で共有


gRPC とネイティブ AOT

作成者: James Newton-King

gRPC では、.NET 8 で .NET ネイティブの事前コンパイル (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 で公開されるアプリには、次の機能があります。

  • ディスク占有領域を最小限に抑える
  • 起動時間の短縮
  • メモリの需要を削減する

Native AOT が提供する利点の詳細と例については、「 ASP.NET Core でネイティブ AOT を使用する利点」を参照してください。

その他のリソース