.NET Core ❤ gRPC
.NET チームは、2018年11月から gRPC チームと緊密に連携し、.NET Core 向けの新しい完全マネージド gRPC 実装に取り組んできました。
本日、grpc-dotnet が .NET Core 3.0 とともに利用可能になったことを発表いたします。
入手方法は?
grpc-dotnet パッケージは NuGet.org にリリースされ、プロジェクトですぐに使用できます。これらのパッケージは、最新の .NET Core 3.0 共有フレームワークも必要とします。共有フレームワークを取得するには、開発マシンおよびビルド サーバー用の .NET Core 3.0 SDK を .NET Core 3.0 ダウンロード ページ からダウンロードしてください。
はじめに
gRPC は .NET エコシステムでファーストクラスの市民となったため、gRPC テンプレートは .NET SDK に含まれています。開始するには、SDK をインストールした後、コンソールウィンドウに移動して次のコマンドを実行します。
dotnet new grpc -o GrpcGreeter
cd GrpcGreeter
dotnet run
gRPC クライアントを作成し、新しく作成された gRPC Greeter サービスでテストするには、このチュートリアルの続きをここから参照してください。
gRPC はすでに .NET Core で動作しませんか?
.NET 向けの gRPC には、現在 2 つの公式実装があります。
- Grpc.Core: ネイティブ gRPC Core ライブラリに基づいた、オリジナルの gRPC C# 実装。
- grpc-dotnet: ネイティブ依存関係なしで、新しくリリースされた .NET Core 3.0 に基づいて完全に C# で記述された新しい実装。
これらの実装は共存し、それぞれが利用可能な機能、統合、サポートされるプラットフォーム、成熟度、パフォーマンスの点で独自の利点を持っています。どちらの実装も RPC の呼び出しと処理に同じ API を共有しているため、ロックインが制限され、ユーザーはニーズに最も適した実装を選択できます。
新着情報
既存の C-Core ベースの実装 (Grpc.Core) とは異なり、新しいライブラリ (grpc-dotnet) は、.NET Core の基底クラスライブラリ (BCL) に含まれる既存のネットワーキングプリミティブを利用しています。下の図は、既存の Grpc.Core ライブラリと新しい grpc-dotnet ライブラリの違いを強調しています。
サーバー側では、Grpc.AspNetCore.Server パッケージが ASP.NET Core に統合され、開発者はログ記録、構成、依存性注入、認証、認可などの一般的なクロスカーティングコンサーンのエコシステムを活用できます。これらは ASP.NET Core によってすでに解決されています。ASP.NET エコシステムの人気のあるライブラリ、例えば Entity Framework Core (ORM)、Serilog (ログライブラリ)、Identity Server などが、gRPC とシームレスに連携できるようになりました。
クライアント側では、Grpc.Net.Client パッケージは .NET Core に含まれるおなじみの HttpClient API を基盤としています。サーバーと同様に、gRPC クライアントは HttpClient を基盤とするパッケージのエコシステムから大きな恩恵を受けます。既存のパッケージ、例えば Polly (レジリエンスとフォールトハンドリングライブラリ) や HttpClientFactory (HTTPClient のライフサイクル管理) を gRPC クライアントで使用することが可能になりました。
下の図は、gRPC 用のすべての新しい .NET パッケージとその既存パッケージとの関係を網羅的に示しています。
grpc-dotnet としてリリースされる新しく公開されたパッケージに加えて、両方のスタックにメリットをもたらす改善も行いました。Visual Studio 2019 は、protobuf ファイルの言語構文サポートと、protobuf ファイルを保存した際の gRPC サーバー/クライアントコードの自動生成を備えています。これにより、デザインタイムビルドによる完全なプロジェクト再ビルドが不要になりました。


フィードバック
.NET 開発者向けの gRPC 体験の向上に興奮しています。ぜひ試してみて、grpc-dotnet の issue トラッカー を使用して、機能のアイデアや遭遇したバグについてお知らせください。