---
# System prepended metadata

title: gRPCの整理

---

# gRPCの整理



## 周辺知識の吸収

1. 公式ドキュメント

   gRPC概要

   https://grpc.io/docs/guides/index.html

   gRPCコンセプト

   https://grpc.io/docs/guides/concepts/

2. gRPCを雰囲気で理解

   まずはこの記事の””gRPCの4つの通信方式””までを読んでgRPCの雰囲気を掴む

   https://qiita.com/gold-kou/items/a1cc2be6045723e242eb

3. gRPCをNodeで動かす

   以下の記事はNodeでgRPCサーバを立てて、かつNodeのgRPCクライアントからサーバを呼ぶもの

   https://tomokazu-kozuma.com/run-grpc-sample-code-with-nodejs/

   以下のリポジトリは、上の記事で使っていたサンプルコード

   https://github.com/grpc/grpc/tree/master/examples/node/dynamic_codegen



## 登場する単語

- Protocol Buffers

  - スキーマ言語の一種（Json, XMLと同系列）
  - Googleの解説
    - https://developers.google.com/protocol-buffers
  - Qiita
    - https://qiita.com/yugui/items/160737021d25d761b353

- protoファイル

  - Protocol Buffersを定義するファイル

  - クライアントサイドとバックエンドで共通して使う

  - >  データ構造およびサービスはプロトコル定義ファイル (Proto Definition file (.proto)) でデザインされ、*protoc*プログラムにより[コンパイル](https://ja.wikipedia.org/wiki/コンパイラ)される。このコンパイル作業により目的のサービスに適合するコードが生成される。

    https://ja.wikipedia.org/wiki/Protocol_Buffers

- gRPCサービス

  - gRPC通信を経てバックエンドが提供、クライアントが使用できるメソッド

  - 下記をprotoファイルに定義する。

    ```proto
    service HelloService {
      rpc SayHello (HelloRequest) returns (HelloResponse);
    }
    
    message HelloRequest {
      string greeting = 1;
    }
    
    message HelloResponse {
      string reply = 1;
    }
    ```

    - HelloServiceというサービスは、SayHelloというメソッドでHelloRequestというパラメータ受け取りHelloResponseという戻り値を返す
    - 上の例は通常の関数呼び出しと同じように、クライアントがサーバーに単一の要求を送信し、単一の応答を返す単項RPC。
    - gRPCには４種類のサービスメソッドを定義可能。それについては以下参照
      - https://qiita.com/CyLomw/items/9aa4551bd6bb9c0818b6

    

    そこで、具体的にどんなパラメータを受け取りどんな値を返すか（メソッドのロジック）を、それぞれの好きな言語で記述していく

    ```javascript
    function sayHello(call, callback) {
      callback(null, { message: "Good " + call.request.name });
    }
    ```
