Skip to content
Latchkey

Protobuf vs JSON: バイナリか人間可読か?

Protobufはコンパクトでschema駆動のバイナリシリアライゼーションフォーマット、JSONはschemaを必要としない、普及した人間可読テキストフォーマットです。

Protobufは.protoファイルでメッセージを定義し、型付きコードを生成し、小さく高速なバイナリペイロードにシリアライズします。内部サービスやgRPCに最適です。JSONはテキストベースで自己記述的、目視でデバッグでき、どこでもサポートされていますが、より大きくパースも遅くなります。Protobufは性能と強いコントラクトを重視し、JSONは可読性、柔軟性、普遍的なサポートを重視します。

ProtobufJSON
エンコーディングバイナリテキスト
schema必須(.proto)任意
サイズ / 速度小さく高速より大きく低速
可読性人間可読ではない人間可読
最適な用途内部サービス、gRPCWeb API、config、デバッグ

ユースケースと性能

Protobufは、ペイロードサイズ、速度、強いschemaが重要となる大量の内部RPC、特にgRPCで真価を発揮します。JSONは公開API、設定、ログ、そして人間がデータを読む場所やクライアントが多様な場面で真価を発揮します。多くのシステムは内部でProtobufを、エッジでJSONを使います。

CIでは

Protobufのpipelineはprotocやbufでcodegenを実行し、生成コードと後方互換性を検証します。JSONのpipelineは使用箇所でJSON Schemaに対して検証します。どちらもmanaged runner上で動作し、より高速なrunnerはcodegenと検証のステップを短縮します。

結論

小さく高速で強く型付けされたペイロードを必要とする大量の内部RPC: Protobuf。公開API、config、人間可読データ: JSON。よくある分担は、内部サービストラフィックにProtobuf、外部・ブラウザ向け・config用途にJSONです。

関連ガイド