Format Atlas

FORMAT COMPARISON

Protocol Buffers schema vs JSON

Protocol Buffersは`.proto`スキーマから型付きメッセージを定義し、field numberを使うバイナリwire形式と、別仕様のProtoJSONを提供します。JSONはRFC 8259の汎用テキスト形式で、特定のスキーマを前提にしません。

最終確認: 2026-09-27

Protocol Buffers schemaとJSON、どちらを選ぶ?

RPCやサービス間で型定義とバイナリwire互換性を管理するならProtobufを選びます。任意のデータ構造をテキストで扱い、汎用JSONツールと接続するならJSONが扱いやすい候補です。ProtobufメッセージのJSON表現を使う場合は通常のJSONではなくProtoJSONのマッピングと互換性制約を確認してください。

Protocol Buffers schema向き

Protocol Buffersメッセージの構造定義・複数言語間で共有するデータ契約

  • protocで各言語のコードを生成する
  • RPCやサービス間通信のメッセージを定義する

JSON向き

Web API・設定ファイル・データ交換

  • 構造化データの受け渡し

基本情報を比較

Protocol Buffers schemaとJSONの主な違いを確認できます。

項目Protocol Buffers schemaJSON
拡張子.proto.json
MIME Typetext/plainapplication/json
主な用途Protocol Buffersメッセージの構造定義・複数言語間で共有するデータ契約Web API・設定ファイル・データ交換
圧縮none該当なし
開く方法テキストエディタやProtocol Buffers対応IDEで開きます。構文やimportを検証するには、プロジェクトが使うprotocと同じ版・設定でコンパイルします。テキストエディタ、IDE、JSON対応ビューアで開けます。
書き出し・変換別スキーマ形式へ移す場合、型・フィールド番号・省略値・列挙値・互換性の意味を対応付けてからコード生成と実データのテストを行います。.protoをJSONやバイナリへ単純に拡張子変更しても変換されません。アプリケーションや変換ツールでCSVなどへ変換できます。

用途別の選び方

作りたいものや使う場面から選べます。

protocで各言語のコードを生成する

Protocol Buffersメッセージの構造定義・複数言語間で共有するデータ契約

Protocol Buffers schema向き

RPCやサービス間通信のメッセージを定義する

Protocol Buffersメッセージの構造定義・複数言語間で共有するデータ契約

Protocol Buffers schema向き

構造化データの受け渡し

Web API・設定ファイル・データ交換

JSON向き

確認ポイント 1

Protobufバイナリwire形式は`.proto`定義とfield numberを前提にします。JSONはテキストのobject/array等を表し、構文上データスキーマを要求しません。ProtoJSONはProtobuf型をJSON値へ写す別の規則です。

使い分け

確認ポイント 2

ProtoJSONはbytesをbase64文字列、int64を文字列、enumを名前等で表し、field nameをJSON keyへ変換します。これらは通常のProtobufバイナリ符号化や任意のJSON schemaと同一ではありません。

使い分け

選ぶ理由を詳しく

  • Protobuf wireデータとProtoJSONは未知フィールドの保持やスキーマ進化の性質が異なります。通常のJSONをProtobufへ変換する場合も、field presence、null、整数範囲、数値精度、unknown field、enum名、map key、oneofを検証してください。

詳しく見る

参考資料・仕様