【ぷろとこるばっふぁーず】
Protocol Buffers とは?
最終更新:
💡 データの構造を定義し、バイナリで保存・交換する
構造化したデータを保存・交換するための、Googleが開発した仕組み。通常は.protoファイルでメッセージの型とフィールド番号を定義し、生成コードとライブラリーでバイナリへの変換や読出しを行う。
📌 このページのポイント
JSONと何が違うの?
.protoファイルには何を書く?
メッセージ名、フィールドの名前・型・番号などを書くよ。たとえばint32 a = 1は、aという整数のフィールドに番号1を付ける。コンパイラーや対応するプラグインで、読出し・書込みに使う各言語のコードを生成するんだ。
バイナリだけを見れば、フィールドの意味が分かる?
元のフィールド名やメッセージ全体の定義が、そのまま含まれるわけではないよ。型や意味を正しく解釈するには対応するスキーマが必要になる。人が確認するときは、対応するツールやテキスト表現も使えるんだ。
フィールドを自由に追加・変更できる?
JSONより必ず何倍も小さく、速くなる?
コンパクトな保存や高速な解析を目指した仕組みだけど、差はデータや実装によるよ。通信や保存の目的、対応するツール、スキーマ管理の負担も考えて選ぶ。固定の倍率だけで優劣を決めないんだ。
もっと詳しく知りたい人へ
Protocol Buffersを使うと通信も暗号化される?
Protocol Buffersはデータを表す仕組みで、暗号化や相手の認証そのものを提供する通信方式ではありません。たとえばgRPCで使う場合も、接続先や認証、TLSなど通信の保護は別に設定します。バイナリで人が読みづらいことは、秘密を守る保証にはなりません。
まとめ:ざっくりこれだけ覚えればOK!
「Protocol Buffers」って出てきたら「データの構造を定義して、バイナリで保存・交換する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Protocol Buffers / Protobuf」 = 構造化データの保存・交換に使う仕組みの名称
💬 Protocol Buffersは、定義言語、生成コード、ライブラリー、データ形式などを含む名称だよ。データを送る通信の仕組みそのものとは分けて考えるんだ。