Carpe Diem

備忘録

Protocol Buffers

gRPCでFieldMaskを使う(更新編)

概要 christina04.hatenablog.com 前回はFieldMaskを使ってオーバーフェッチを避ける方法を説明しました。 今回はMutation(更新)におけるFieldMaskの活用方法を説明します。 環境 Go v1.18.3 protoc-gen-go v1.25.0 protoc v3.19.4 grpc-go v1.47.0 MongoDB…

gRPCでFieldMaskを使う(取得編)

概要 クライアントデバイスが多様化する中、UIに必要なデータもそれぞれ異なるためAPIのオーバーフェッチ(不要なデータの取りすぎ)が課題になってきます。 またマイクロサービス間の通信でも、例えばマスタ系データのうち必要なデータだけ取得して利用した…

Bazelを使ってみる その4(gRPCのビルド)

概要 Bazel解説第4弾です。 Bazelを使ってみる その1(Goのビルド) - Carpe Diem Bazelを使ってみる その2(protobufのビルド) - Carpe Diem Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem 今回はgRPCをビルドしてみます。 gRPCは2…

Bazelを使ってみる その2(protobufのビルド)

概要 前回に引き続き今回もBazelについて書きます。 christina04.hatenablog.com 今回はProtocol BuffersをビルドしてGoで利用できるコードを生成します。 環境 Bazel 4.2.2

ProtobufとStreamで扱うJSONはどちらが省メモリなのか

背景 JSONよりもProtobufの方が ファイルサイズが小さい シリアライズ・デシリアライズが速い ということは色んな検証記事から明らかになっています。 一方でGoのProtobufはデータをstreamで扱うのではなく、全部メモリに載せてシリアライズ・デシリアライズ…

WARNING: Missing 'go_package' option が出る時の対処法

背景 いつの間にかprotocでprotoc-gen-goプラグインを使うと以下のようなエラーが出るようになりました。 2021/01/05 06:19:01 WARNING: Missing 'go_package' option in "xxx/xxx.proto", please specify it with the full Go package path as a future rel…

GoGo Protobufのメリット・デメリット

概要 Goでprotobufのコードを生成する際には公式のgolang/protbuf以外にgogo/protobufが候補に挙がると思います。 メリット 大きなメリットはパフォーマンスとカスタマイズ性です。 marshalling と unmarshalling が高速 去年のベンチマークですが、公式より…

protocの使い方

概要 christina04.hatenablog.com で紹介したprotoeasyがリンクごと消えて使えなくなったので、protocの使い方を整理するために書きます。 環境 libprotoc 3.9.1 使い方 Goを例に基本的な使い方を説明します。 SRC_DIRディレクトリに.protoファイルがある場…

.proto ファイルの整形に clang-format を使う

概要 gRPCで通信しようとすると.protoファイルが沢山出てきます。 ただ人によってインデントが異なったりするのは良くないので、何かしらformatterが無いかなと探したら github.com こちらのissueで「Googleではclang-formatを使ってるよ」という回答があっ…

protoeasyでprotobufのコンパイルを簡単にする

概要 gRPCなどで使われているprotobufですが、.protoの定義は簡単でもコンパイルにちょっと学習コストがかかります。 gogoprotoやgrpc-gatewayといった他のライブラリも使うと、中々にカオスなコマンドになります。 grpc-gatewayの例 protoc -I/usr/local/in…