【Go】gRPCでのコンパイルのあれこれ。
gRPCでのコンパイルの方法と生成されるファイルについて調べました。
インストール
1. protoc
これはどの環境でも必要です。
Macの場合はbrewコマンドでインストールできます。
brew install protobuf
2. Goプラグイン
Goでコード生成する場合に必要です。
以下の2つのパッケージをインストールします。
(バージョンは2023年12月
現在のものなので、ドキュメントを常に確認してください)
$ 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年以上更新されていないので、これはもう使われなくなったのだと思います。
さいごに
以下のUdemyがとても分かりやすかったので、勉強したい方はぜひ買ってみてください!
Discussion