0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoでgRPCで構築する方法

gRPCの公式ページのクイックスタートを紹介するものになります。

前提条件

以下のツールがインストールされていることを確認してください:

  • Go: 最新の3つのメジャーリリースのいずれか。インストール手順はGoのGetting Startedガイドを参照してください。

  • Protocol buffer compiler (protoc): バージョン3。インストール手順はProtocol Buffer Compiler Installationを参照してください。

  • Go plugins for the protocol compiler:

コマンド
  go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
  go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

PATHを更新して、protocコンパイラがプラグインを見つけられるようにします

コマンド
  export PATH="$PATH:$(go env GOPATH)/bin"

サンプルコードの取得

サンプルコードはgrpc-goリポジトリの一部です。
1.リポジトリをクローンします

コマンド
   git clone -b v1.65.0 --depth 1 https://github.com/grpc/grpc-go

2. クイックスタートのサンプルディレクトリに移動します

コマンド
   cd grpc-go/examples/helloworld

サンプルの実行

examples/helloworldディレクトリから以下の手順でサンプルを実行します:
1.サーバーコードをコンパイルして実行します

コマンド
   go run greeter_server/main.go

2.別のターミナルからクライアントコードをコンパイルして実行し、クライアントの出力を確認します

コマンド
   go run greeter_client/main.go

出力例

出力例
   Greeting: Hello world

これでgRPCを使用したクライアントサーバーアプリケーションが実行されました。

gRPCサービスの更新

次に、サーバーメソッドを追加してアプリケーションを更新します。gRPCサービスはプロトコルバッファを使用して定義されます。
helloworld/helloworld.protoを開き、新しいSayHelloAgain()メソッドを追加します

protoファイル
// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Sends another greeting
  rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

ファイルを保存します。

gRPCコードの再生成

新しいサービスメソッドを使用する前に、更新された.protoファイルを再コンパイルする必要があります。
examples/helloworldディレクトリで以下のコマンドを実行します

コマンド
  protoc --go_out=. --go_opt=paths=source_relative \
    --go-grpc_out=. --go-grpc_opt=paths=source_relative \
    helloworld/helloworld.proto

これにより、helloworld/helloworld.pb.goとhelloworld/helloworld_grpc.pb.goファイルが再生成されます。

アプリケーションの更新と実行

新しいメソッドを実装し、クライアントコードで呼び出す必要があります。

サーバーの更新

greeter_server/main.goを開き、以下の関数を追加します

main.go
func (s *server) SayHelloAgain(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    return &pb.HelloReply{Message: "Hello again " + in.GetName()}, nil
}

クライアントの更新

greeter_client/main.goを開き、main()関数の末尾に以下のコードを追加します

main.go
r, err = c.SayHelloAgain(ctx, &pb.HelloRequest{Name: *name})
if err != nil {
    log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r.GetMessage())

ファイルを保存します。

実行

再度、サーバーとクライアントを実行します:
1.サーバーを実行

コマンド
   $ go run greeter_server/main.go

2. 別のターミナルからクライアントを実行。今回は名前をコマンドライン引数として追加します

コマンド
   $ go run greeter_client/main.go --name=Alice

出力例

出力結果
   Greeting: Hello Alice
   Greeting: Hello again Alice

まとめ

これでgRPCの構築が完了しました。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?