履歴

プロトコルバッファ作成の簡単な歴史。

Protobufが作成された理由と、時間の経過とともにそれを変更した決定を理解することで、このツールの機能をより効果的に利用できるようになります。

Protocol Buffers をリリースした理由は何ですか?

Protocol Buffersをリリースした理由はいくつかあります。

プロトコルバッファは、Google内部の多くのプロジェクトで利用されています。プロトコルバッファを使用する他のプロジェクトをオープンソースとしてリリースしたかったため、まずプロトコルバッファをリリースする必要がありました。実際、この技術の一部はすでに公開されており、Google AppEngineのコードを掘り下げてみると、その一部が見つかるかもしれません。

プロトコルバッファとXMLの両方を受け入れる公開APIを提供したかったのです。これは効率的であることに加え、いずれにせよ、弊社の側でXMLをプロトコルバッファに変換しているためです。

Google以外の人々もプロトコルバッファを役立つと感じるかもしれないと考えました。私たちが喜んでリリースできる形にプロトコルバッファを整えるのは、楽しい副業でした。

最初のリリースがバージョン2なのはなぜですか?バージョン1はどうなりましたか?

プロトコルバッファの初期バージョン(「Proto1」)は2001年初頭に開発が始まり、誰かが機能を必要とし、それを作成する意思があるたびに新しい機能が追加され、長年にわたって進化しました。このようにして作成されたものは何でもそうですが、少し乱雑な状態でした。私たちは、このままの形でコードをリリースすることは不可能であるという結論に達しました。

バージョン2(「Proto2」)は完全な書き直しでしたが、Proto1の設計のほとんどを維持し、多くの実装アイデアを利用しました。一部の機能が追加され、一部が削除されました。しかし、最も重要なのは、コードがクリーンアップされ、まだオープンソース化されていないGoogleライブラリへの依存関係がなくなったことです。

「Protocol Buffers」という名前の由来は何ですか?

この名前は、プロトコルバッファコンパイラがクラスを生成してくれるようになる前の、このフォーマットの初期に由来しています。当時、個々のメソッドのバッファとして実際に機能する ProtocolBuffer というクラスがありました。ユーザーは AddValue(tag, value) のようなメソッドを呼び出すことで、このバッファにタグ/値ペアを個別に追加していました。生データはバッファに格納され、メッセージが構築された後に書き出すことができました。

それ以来、名前の「buffers」の部分はその意味を失いましたが、依然として私たちが使用している名前です。今日では、抽象的な意味でのメッセージを指す場合は「プロトコルメッセージ」、メッセージのシリアル化されたコピーを指す場合は「プロトコルバッファ」、パースされたメッセージを表すメモリ内のオブジェクトを指す場合は「プロトコルメッセージオブジェクト」という用語が通常使われています。

GoogleはProtocol Buffersに関する特許を保有していますか?

Googleは現在、プロトコルバッファに関する発行済み特許を保有しておらず、プロトコルバッファと特許に関して皆さんが抱く可能性のある懸念については喜んで対応いたします。

Protocol Buffersは、ASN.1、COM、CORBA、Thriftとどう異なりますか?

これらのシステムはすべて長所と短所があると考えています。Googleは内部でプロトコルバッファに依存しており、私たちの成功に不可欠な要素ですが、だからといってそれがすべての問題に対する理想的な解決策であるという意味ではありません。ご自身のプロジェクトの状況において、それぞれの代替案を評価するべきです。

ただし、これらの技術のいくつかは、交換フォーマットとRPC(リモートプロシージャコール)プロトコルの両方を定義していることに注意してください。プロトコルバッファは単なる交換フォーマットです。これらはRPCに簡単に使用でき、実際、RPCサービスを定義するための限定的なサポートも提供していますが、特定のRPC実装やプロトコルに縛られているわけではありません。