クイックスタート

このガイドでは、シンプルな動作例を使用して、RubyでのgRPCの開始方法を説明します。

クイックスタート

このガイドでは、シンプルな動作例を使用して、RubyでのgRPCの開始方法を説明します。

前提条件

  • Rubyバージョン2以上

gRPC

gRPCをインストールするには、次のコマンドを実行します。

$ gem install grpc

gRPCツール

RubyのgRPCツールには、プロトコルバッファコンパイラ`protoc`と、`.proto`サービス定義からサーバーとクライアントコードを生成するための特別なプラグインが含まれています。クイックスタートの最初の部分では、helloworld.protoからサーバーとクライアントのスタブを既に生成していますが、残りのクイックスタート、後のチュートリアル、そして独自のプロジェクトのためには、これらのツールが必要です。

gRPCツールをインストールするには、次のコマンドを実行します。

$ gem install grpc-tools

サンプルのダウンロード

このクイックスタートを進めるには、サンプルコードのローカルコピーが必要です。GitHubリポジトリからサンプルコードをダウンロードします(次のコマンドではリポジトリ全体がクローンされますが、このクイックスタートや他のチュートリアルに必要なのはexamplesディレクトリのみです)。

# Clone the repository to get the example code:
$ git clone -b v1.62.0 --depth 1 --shallow-submodules https://github.com/grpc/grpc
# Navigate to the "hello, world" Ruby example:
$ cd grpc/examples/ruby

gRPCアプリケーションの実行

`examples/ruby`ディレクトリから

  1. サーバーを実行します

    $ ruby greeter_server.rb
    
  2. 別のターミナルから、クライアントを実行します

    $ ruby greeter_client.rb
    

おめでとうございます!gRPCを使用したクライアントサーバーアプリケーションを実行しました。

gRPCサービスの更新

今度は、クライアントが呼び出すことができるサーバーに追加メソッドでアプリケーションを更新する方法を見てみましょう。gRPCサービスはプロトコルバッファを使用して定義されています。`.proto`ファイルでサービスを定義する方法の詳細については、基本チュートリアルを参照してください。現時点では、サーバーとクライアントの「スタブ」の両方に、クライアントから`HelloRequest`パラメータを受け取り、サーバーから`HelloResponse`を返す`SayHello` RPCメソッドがあり、このメソッドは次のように定義されていることを知っていれば十分です。

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (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;
}

`Greeter`サービスに2つのメソッドを持たせるように更新しましょう。`examples/protos/helloworld.proto`を編集し、同じリクエストとレスポンスタイプを持つ新しい`SayHelloAgain`メソッドで更新します。

// 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コードの生成

次に、新しいサービス定義を使用するようにアプリケーションで使用されるgRPCコードを更新する必要があります。`examples/ruby/`ディレクトリから

$ grpc_tools_ruby_protoc -I ../protos --ruby_out=lib --grpc_out=lib ../protos/helloworld.proto

これにより、生成されたクライアントとサーバーのクラスを含む`lib/helloworld_services_pb.rb`が再生成されます。

サーバーの更新

同じディレクトリで、`greeter_server.rb`を開きます。新しいメソッドを次のように実装します。

class GreeterServer < Helloworld::Greeter::Service

  def say_hello(hello_req, _unused_call)
    Helloworld::HelloReply.new(message: "Hello #{hello_req.name}")
  end

  def say_hello_again(hello_req, _unused_call)
    Helloworld::HelloReply.new(message: "Hello again, #{hello_req.name}")
  end
end

クライアントの更新

同じディレクトリで、`greeter_client.rb`を開きます。新しいメソッドを次のように呼び出します。

def main
  stub = Helloworld::Greeter::Stub.new('localhost:50051', :this_channel_is_insecure)
  user = ARGV.size > 0 ?  ARGV[0] : 'world'
  message = stub.say_hello(Helloworld::HelloRequest.new(name: user)).message
  p "Greeting: #{message}"
  message = stub.say_hello_again(Helloworld::HelloRequest.new(name: user)).message
  p "Greeting: #{message}"
end

実行!

これまでと同様に、`examples/ruby`ディレクトリから

  1. サーバーを実行します

    $ ruby greeter_server.rb
    
  2. 別のターミナルから、クライアントを実行します

    $ ruby greeter_client.rb
    

次のステップ