概要
GoのgRPCで、バリデートを実装する際に便利なのが、protoc-gen-validateです。【Go】gRPCのリクエストバリデータを自動生成するの記事で紹介されている通り、protoファイルでバリデートの定義を設定することで、バリデートのコードを自動生成してくれます。
今回はprotoc-gen-validateを含めたprotoファイルで、コード出力時にprotoc-gen-go: invalid Go import path
というエラーが発生したので、対応方法などをメモ書きします。
事象発生時の状況
エラーが発生したprotoファイルは以下の通りです。
なお、使用したProtocol Buffersのバージョン3.19.4
はです。
syntax = "proto3";
option go_package = "pb";
import "validate/validate.proto";
package pb;
// ユーザ認証用のサービス
service AuthenticationUserService {
// Google認証コードの検証
rpc VerifyGoogleAuthCode (VerifyGoogleAuthCodeRequest) returns (UserResponse) {}
}
message VerifyGoogleAuthCodeRequest {
string googleAuthCode = 1 [(validate.rules).string.min_len = 1];
}
message UserResponse {
string id = 1;
string name = 2;
string authToken = 3;
}
実行したコマンドは以下です。
protoc -I=. -I=${GOPATH}/pkg/mod -I=${GOPATH}/pkg/mod/github.com/envoyproxy/protoc-gen-validate@v0.6.7 --go_out="plugins=grpc:./src" --validate_out="lang=go:./src" ./src/proto/*.proto
対応
import path
の設定に問題がありそうということで、go_package部分を修正する必要がありそうです。このパス部分の解説はWARNING: Missing 'go_package' option が出る時の対処法の記事が詳しいです。
今回の場合はgo_package
で指定した名前とpackage
名は同じにしていますが、protoc-gen-validateを含めると上手くいかないことから、セミコロン(;)を使ってパスを置き換えると上手く出力できました。
syntax = "proto3";
// パスの置き換えを行うよう修正
option go_package = "pb/;pb";
import "validate/validate.proto";
package pb;
// ユーザ認証用のサービス
service AuthenticationUserService {
// Google認証コードの検証
rpc VerifyGoogleAuthCode (VerifyGoogleAuthCodeRequest) returns (UserResponse) {}
}
message VerifyGoogleAuthCodeRequest {
string googleAuthCode = 1 [(validate.rules).string.min_len = 1];
}
message UserResponse {
string id = 1;
string name = 2;
string authToken = 3;
}