【プロトコルバッファ】

Protocol Buffers(プロトコルバッファ) とは?

最終更新:
💡 共通の設計図とフィールド番号で、データをバイナリにする

型とフィールド番号を.protoファイルで定義し、構造化データをバイナリへ変換・復元する仕組み。Googleが開発し、複数言語のコード生成やデータ形式の拡張に対応する。

📌 このページのポイント
Protocol Buffers:共通の型で読み書き.proto型・番号コード生成送り手のコード名前:Akiバイナリへ変換受け手のコード名前:Aki構造を復元転送:フィールド番号を使ったバイナリ互換性の規則に従い、番号の再利用を避けるサイズ・速度の差はデータや実装による
同じ定義から生成したコードでデータを受け渡す模式図。バイナリ形式そのものは圧縮ではない。gRPCは通信の仕組みで、Protocol Buffersを標準のデータ形式として使う。
ひよこ ひよこ
Protocol Buffersって何なの?JSONとは違うの?
ペンギン先生 ペンギン先生
JSONは人が読めるテキスト形式だけれど、Protocol Buffersは型と番号を定義してバイナリで保存・送信する仕組みだよ。同じ定義から作ったコードを使い、異なる言語でも構造化データを読み書きできるんだ。
ひよこ ひよこ
圧縮するから、必ず10倍速くなるの?
ペンギン先生 ペンギン先生
バイナリ形式そのものは圧縮ではないよ。小さく格納して速く処理しやすい設計だけれど、サイズや速度の差はデータやライブラリ、比較条件で変わる。「JSONの何分の1」「必ず何倍」と固定できないので、必要なら実際のデータで測ろう。
ひよこ ひよこ
.protoファイルっていうのは何なの?
ペンギン先生 ペンギン先生
データの設計図だよ。たとえば名前は文字列、年齢は整数と定義し、それぞれに番号を付ける。protocなどで言語ごとの読み書き用コードを生成するんだ。送り手と受け手が互換性のある定義を使うことが大切だね。
ひよこ ひよこ
gRPCとセットでよく聞くけど、どういう関係なの?
ペンギン先生 ペンギン先生
gRPCは別の機械にある処理を呼び出す通信の仕組みで、標準でProtocol Buffersをデータ形式に使うよ。サービスとメッセージの定義からコードも生成する。一方、Protocol Buffersだけをファイル保存などに使うこともできるんだ。
ひよこ ひよこ
フィールドを追加・削除しても大丈夫?
ペンギン先生 ペンギン先生
バイナリ形式では、新しいフィールドの追加など互換性を保てる変更があるよ。ただし既存の番号を変えたり、削除した番号を別の意味へ再利用したりしてはいけない。番号を予約し、アプリ側が省略された値をどう扱うかも確認する。JSON形式での互換性は別の規則なんだ。
ひよこ ひよこ
全部この形式にすればいいの?
ペンギン先生 ペンギン先生
人が直接読んで編集する用途では、JSONなどのテキストが便利なこともあるよ。Protocol Buffersの内容を調べるには、定義を使ってデコードする。大きすぎるメッセージにも注意が必要なので、データの性質、読みやすさ、生成コードの管理を合わせて選ぼう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Protocol Buffers」って出てきたら「共通の型定義でデータを読み書きするバイナリの仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Protocol Buffers」 = プロトコルバッファ
💬 略してprotobufと呼ぶよ。.protoの定義、生成コード、各言語のライブラリ、保存・送信用の形式などを合わせた仕組みなんだ。

参考資料

← 用語集にもどる