📠
【gRPC】Bufを使用する際のprotoファイル間のimport
概要
gRPCを使用する際にBuf
という、protoからのコード出力を管理するツールがあります。このツールの詳細はprotocからBufに乗り換えて設定をソースコード管理しようの記事で紹介されています、yamlファイルで設定を管理できるので導入することは個人的には良いかなと思います。
さて、このBufを使った時にprotoファイル間のimportってどうなるのというのを、今回メモ書きします。
前提
以下のフォルダ構成を前提とします。
protoファイルはproto
フォルダ配下、出力するコードはsrc/gen
配下に設定するものとします。sampleUser.proto
からsampleCommon.proto
をimportします。
ルートフォルダ
├ proto
│ ├ sampleCommon.proto
│ └ sampleUser.proto
├ src
│ └ gen
└ buf.gen.yaml
結論
Protocol Buffer の import におけるファイルの取扱いについての記事にある通り、相対パスでimportするファイルを指定すれば基本的には問題ないです。
以下にバックエンド側Golangとクライアント側TypeScriptの設定サンプルを記載しておきます、connect-grpcの設定もしていますがconnectは使用しないでも大丈夫です。
Golangでの設定サンプル
ルートフォルダからbuf generate
でコードを出力します。
buf.gen.yaml
version: v1
plugins:
- name: go
out: src/gen
opt: paths=source_relative
- name: connect-go
out: src/gen
opt: paths=source_relative
sampleCommon.proto
syntax = "proto3";
option go_package = "root_folder/src/gen/proto;sample";
package sample;
・
・
・
sampleUser.proto
syntax = "proto3";
option go_package = "root_folder/src/gen/proto;sample";
import "proto/sampleCommon.proto";
package placeNote;
・
・
・
TypeScriptでの設定サンプル
ルートフォルダからnpx buf generate ./proto
でコードを出力する前提とします。
その場合protoの相対パスのルートがprotoフォルダになるので、importもそれに合わせます。
buf.gen.yaml
version: v1
plugins:
- plugin: es
out: src/gen
opt: target=js+dts
- plugin: connect-query
out: src/gen
opt: target=js+dts
sampleCommon.proto
syntax = "proto3";
package sample;
・
・
・
sampleUser.proto
syntax = "proto3";
import "sampleCommon.proto";
package sample;
・
・
・
Discussion