注: このサイトは非推奨になりました。このサイトは 2023 年 1 月 31 日を過ぎると停止され、トラフィックは https://protobuf.dev の新しいサイトにリダイレクトされます。その間、更新は protobuf.dev のみに行われます。

よくある質問

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このドキュメントでは、プロトコル バッファ オープンソース プロジェクトに関するよくある質問を紹介します。ここに記載されていない質問がある場合は、ヘルプグループに参加してご質問ください。

一般

プロトコル バッファをリリースしたのはなぜですか?

これには、いくつかの理由があります。

  • プロトコル バッファは、Google 社内のほぼ全員が使用できます。プロトコル バッファを使用するオープンソースとしてリリースしたいプロジェクトが他にもたくさんあるため、まずプロトコル バッファをリリースする必要がありました。実際に、このテクノロジーの本格的な進歩は、すでに Google AppEngine のコードを詳しく調べたところ、すでに広く利用できるようになったようです。
  • Google では、プロトコル バッファと XML の両方を受け入れる公開 API を提供したいと考えています。この方が効率性が高く、XML をそのままプロトコル バッファに変換するだけであるためです。
  • Google は、プロトコル バッファが役立つと考えています。
  • プロトコル バッファをリリースできる 20% のプロジェクトは、楽しいものです。

最初のリリース バージョン 2 があるのはなぜですか?バージョン 1 はどうなったのですか?

プロトコル バッファの初期バージョン(別名「Proto1」)は、2001 年の初めに Google で開発され、長い年月をかけて進化し、自身で必要としているときや新しい機能を自分で開発したときに生まれました。この方法で作成されたものと同様に、少し混乱していました。そのままのリリースは可能ではないという結論に達しました。

バージョン 2(「Proto2」)は完全な書き換えですが、設計の大部分は保持されており、Proto1 の実装のアイデアの多くを使用しています。追加された対象物や削除された機能もあります。最も重要な点は、コードがクリーンアップされ、まだオープンソースになっていない Google ライブラリへの依存関係がないことです。

「プロトコル バッファ」という名前の理由

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

その名前の「buffers」部分の意味は失われていますが、まだその名前を使用しています。現在、人々は一般に「プロトコル メッセージ」という用語を使用して、意味的には抽象的なメッセージを指し、「プロトコル バッファ」という用語はメッセージのシリアル化されたコピーを指し、「プロトコル メッセージ オブジェクト」は解析されたメッセージを表すインメモリ オブジェクトを指します。

プロトコル バッファーの特許は Google にありますか?

現在、Google はプロトコル バッファに関する特許を発行していません。プロトコル バッファと、特許に関する懸念については対応させていただきます。

類似のテクノロジー

プロトコル バッファと XML の違い

概要ページの回答をご覧ください。

プロトコル バッファは ASN.1、COM、CORBA、Thrift とどう違うのですか?

これらすべてのシステムに長所と短所があると考えています。Google は社内でプロトコル バッファに依存しており、Google の成功に欠かせない要素となっていますが、すべての問題に適したソリューションというわけではありません。実際の代替コンテキストは、実際のプロジェクトの観点から評価してください。

ただし、これらのテクノロジーの中には、交換形式と RPC(リモート プロシージャ コール)プロトコルの両方を定義するものがあることに注意してください。プロトコル バッファは単なる交換形式です。これらは RPC に簡単に使用できますが、実際、RPC サービスの定義についてはサポートが制限されていますが、RPC の実装やプロトコルには関連付けられていません。

貢献

プロトコル バッファに新しい言語のサポートを追加できますか?

はい。実際、プロトコル バッファ コンパイラは、独自のコンパイラを簡単に記述できるように設計されています。CommandLineInterface クラスをご覧ください。このクラスは libprotoc ライブラリの一部として提供されています。

新しい言語用にコード生成ツールとランタイム ライブラリを作成することをおすすめします。そのためには、独立した独自のプロジェクトを開始する必要があります。そうすれば、自由にプロジェクトを管理でき、リリース プロセスに縛られることはありません。また、プロトコル バッファのディスカッション グループに参加してプロジェクトについてお知らせください。デザインのリンクを提供し、設計上の問題の解決をお手伝いします。

プロトコル バッファにパッチを提供できますか?

はい。プロトコル バッファのディスカッション グループに参加して、ご相談ください。

プロトコル バッファに新機能を追加できますか?

可能であるとは言いきれません。私たちはいつも提案を好んでいますが、情報の追加は慎重に行っています。長年の間に学んだことの 1 つは、多くの人が新しい機能に関する面白いアイデアを持っているということです。これらの機能の大部分は特定のケースで非常に有用ですが、すべてを受け入れると、プロトコル バッファが膨らみ、混乱してしまいます。厳選する必要があります。新機能を評価する際には、広範囲にわたって非常に役に立った、あるいは非常にシンプルな追加がないか探します。Google では、Google 社員からの機能の追加を定期的に廃止しています。Google では、各チームメンバーによる機能の追加を定期的に拒否しています。

その場合でも、ぜひご意見をお寄せください。プロトコル バッファのディスカッション グループに参加してお知らせください。基本的なライブラリを変更することなく、必要な作業を行うお手伝いができる場合があります。有用性やシンプルさを兼ね備えた機能を追加する必要があるかもしれません。