【Go】gRPCでのコンパイルのあれこれ。

2023/12/10に公開

gRPCでのコンパイルの方法と生成されるファイルについて調べました。

インストール

1. protoc

これはどの環境でも必要です。
Macの場合はbrewコマンドでインストールできます。

brew install protobuf

2. Goプラグイン

Goでコード生成する場合に必要です。
以下の2つのパッケージをインストールします。
(バージョンは2023年12月現在のものなので、ドキュメントを常に確認してください)

https://grpc.io/docs/languages/go/quickstart/

$ 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

コンパイル

protocコマンドで実行します。

-Iオプションはインクルードパスを指定するために使用されます。
.protoファイル内で他の.protoファイルをインポートする際、-Iで指定されたディレクトリ内を検索します。-Iで指定されたパス内にインポートされるファイルが存在しない場合、protoc はエラーを返します。

例:

protoc -I. --go_out=. --go-grpc_out=. proto/*.proto

【おまけ】pluginsについて → 結論:非推奨

書籍で勉強してた時に、以下のコードでのコンパイルを発見しました。
ここに出ている--go_out=plugins=grpc:apiについて気になったので調べてみました。

事前に以下のプラグインをインストール

go get -u github.com/golang/protobuf/protoc-gen-go

コンパイル実行

protoc -Iproto --go_out=plugins=grpc:api proto/*.proto

--go_out=plugins=grpc:apiでは、plugins=grpcでgRPCプラグインを指定し、:apiでその出力先ディレクトリを指定しています。ここでapiは出力されるGoファイルのディレクトリを指します。

プラグインを調べてみると、こちらのリポジトリを発見しました。
READMEを見ると、

google.golang.org/protobuf これは、更新され簡素化された API、protobuf リフレクションのサポート、およびその他の多くの改善点を含むモジュールによって置き換えられました 。新しいコードではgoogle.golang.org/protobufモジュールを使用することをお勧めします。

と書かれていて2年以上更新されていないので、これはもう使われなくなったのだと思います。

https://github.com/golang/protobuf

さいごに

以下のUdemyがとても分かりやすかったので、勉強したい方はぜひ買ってみてください!
https://www.udemy.com/share/106uwE3@g0IcYKhhkNIlhdnAVOHt2DZDcMpfkzjFcmYstQTS6t9DPbY2qg6YsS_9IobUaf0jxQ==/

Discussion