Protocol Buffers【protobuf】
概要

Protocol Buffersでは、送受信するデータの構造をあらかじめ定義ファイルに記述する。この定義ファイルには、各フィールドの名前、型、識別番号を記載する。
定義ファイルを専用のコンパイラ(protoc)で処理すると、指定したプログラミング言語向けのソースコードが自動生成される。対応言語としてJavaやPython、C++言語、Go言語などがある。開発者は生成されたコードを利用して、通常の変数やオブジェクトを扱う感覚でデータの読み書きを行える。バイナリ形式の内部構造を意識する必要はない。
データはバイナリ形式で表現されるため、人が内容を直接読み取ることはできない。同じ内容をJSONやXMLなどテキストベースの形式で表現した場合よりもデータ量が小さくなり、ネットワーク帯域や記憶領域の節約に繋がる。不要な文字情報を含まないため、解析や生成にかかる処理時間も短縮できる場合が多い。
フィールドに識別番号を付与する仕組みにより、互換性を保ちながらデータ構造を変更することができる。既存の番号を維持したまま新しいフィールドを追加すれば、古いプログラムは未知のフィールドを無視し、新しいプログラムは追加されたフィールドを利用できる。不要になったフィールドを削除する際には識別番号を再利用しない運用が一般的であり、将来の互換性も維持しやすくなっている。
定義ファイルはデータ形式の共通仕様として機能するため、異なるプログラミング言語や実行環境の間でも同じ構造のデータをやり取りできる。複数のサービスが頻繁に通信するマイクロサービスアーキテクチャとの親和性が高く、同社が開発したRPCフレームワークの「gRPC」はProtocol Buffersをデフォルトのデータ形式として採用している。もともと同社の社内システム向けに開発され、2008年にオープンソースとして公開された。