【小ネタ】gRPCって結局なんなんだ？

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

個人的にAWSのアップデート情報内で**gRPCに対応した**といったワードが出てきていたのですが、**そもそもgRPCって何ぞや**と思いましたので簡単に調べてみました。

## AWSのアップデート情報では

AWS What Newで調べてみたところ7件ヒットしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/2d15d09a-37e7-47e0-929f-9c7db918370f.png)

https://aws.amazon.com/about-aws/whats-new/2018/01/aws-deep-learning-amis-now-come-with-tensorflow-1-5-0-and-new-model-serving-capabilities/

https://aws.amazon.com/about-aws/whats-new/2019/11/aws-app-mesh-now-supports-http2-and-grpc-services/

https://aws.amazon.com/about-aws/whats-new/2019/11/aws-cloudformation-updates-for-amazon-api-gateway-aws-codepipeline-aws-amplify-amazon-es-aws-app-mesh-and-more/

https://aws.amazon.com/about-aws/whats-new/2020/10/application-load-balancers-enable-grpc-workloads-end-to-end-http-2-support/

https://aws.amazon.com/about-aws/whats-new/2020/12/aws-load-balancer-controller-version-2-1-available-support-additional-elb-configurations/

https://aws.amazon.com/about-aws/whats-new/2024/01/amazon-ecs-configurable-timeout-service-connect/

https://aws.amazon.com/about-aws/whats-new/2024/11/amazon-cloudfront-supports-grpc-delivery/

直近だと、CloudFrontがgRPCに対応したといった内容が記憶に新しいかと思います。

## そもそもgRPCって

gRPC公式サイトに情報がまとめられていましたので引用いたします。

>In gRPC, a client application can directly call a method on a server application on a different machine as if it were a local object, making it easier for you to create distributed applications and services. As in many RPC systems, gRPC is based around the idea of defining a service, specifying the methods that can be called remotely with their parameters and return types. On the server side, the server implements this interface and runs a gRPC server to handle client calls. On the client side, the client has a stub (referred to as just a client in some languages) that provides the same methods as the server.
gRPC clients and servers can run and talk to each other in a variety of environments - from servers inside Google to your own desktop - and can be written in any of gRPC’s supported languages. So, for example, you can easily create a gRPC server in Java with clients in Go, Python, or Ruby. In addition, the latest Google APIs will have gRPC versions of their interfaces, letting you easily build Google functionality into your applications.

- 翻訳文
>gRPCでは、クライアントアプリケーションは別のマシン上のサーバーアプリケーションのメソッドを、まるでローカルオブジェクトであるかのように直接呼び出すことができるため、分散アプリケーションやサービスの作成が容易になります。多くのRPCシステムと同様に、gRPCはサービスを定義するという概念に基づいており、リモートから呼び出せるメソッドを、そのパラメータと戻り値の型とともに指定します。サーバー側では、サーバーがこのインターフェースを実装し、クライアントからの呼び出しを処理するためのgRPCサーバーを実行します。クライアント側では、クライアントはサーバーと同じメソッドを提供するスタブ（一部の言語では単にクライアントと呼ばれます）を持ちます。
gRPC クライアントとサーバーは、Google 社内のサーバーからお客様のデスクトップまで、さまざまな環境で実行および相互通信でき、gRPC がサポートする任意の言語で記述できます。例えば、Java で gRPC サーバーを作成し、Go、Python、Ruby でクライアントを作成するといったことも簡単にできます。さらに、最新の Google API には gRPC バージョンのインターフェースが用意されているため、Google の機能をアプリケーションに簡単に組み込むことができます

#### イメージ図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/0f5f7be8-42f0-435a-b3d9-c2a9da9ca3ff.png)

凄くざっくりといえば**クラウドアプリケーションに強いAPI**といったイメージかと思います。

:::note info
gRPGを利用するメリットに関しては以下公式ブログを読むと理解が深まるかと思います。

https://grpc.io/blog/principles/
:::

## まとめ

今回、gRPCとは何かというのをざっくり調べてみましたが**クラウドアプリケーション向けのAPI**といった理解が行えました。そのうえで、**具体的な実装イメージ**や**ユースケースに辻ては、次回以降記事としてまとめていきたいと思いました。

最後まで、記事をお読みいただきありがとうございました！！

## 参考資料

https://www.youtube.com/watch?v=gnchfOojMk4

https://grpc.io/videos/