Protobuf vs JSON: バイナリか人間可読か?
Protobufはコンパクトでschema駆動のバイナリシリアライゼーションフォーマット、JSONはschemaを必要としない、普及した人間可読テキストフォーマットです。
Protobufは.protoファイルでメッセージを定義し、型付きコードを生成し、小さく高速なバイナリペイロードにシリアライズします。内部サービスやgRPCに最適です。JSONはテキストベースで自己記述的、目視でデバッグでき、どこでもサポートされていますが、より大きくパースも遅くなります。Protobufは性能と強いコントラクトを重視し、JSONは可読性、柔軟性、普遍的なサポートを重視します。
| Protobuf | JSON | |
|---|---|---|
| エンコーディング | バイナリ | テキスト |
| schema | 必須(.proto) | 任意 |
| サイズ / 速度 | 小さく高速 | より大きく低速 |
| 可読性 | 人間可読ではない | 人間可読 |
| 最適な用途 | 内部サービス、gRPC | Web 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です。
関連ガイド
Protobuf vs Avro: Which Binary Schema Format?Protocol Buffers vs Apache Avro: codegen-based binary serialization vs schema-with-data formats for streaming…
gRPC vs REST: Which API Style?gRPC vs REST: a contract-first binary RPC over HTTP/2 vs resource-oriented JSON over HTTP. Performance, tooli…
YAML vs JSON: Which Config Format?YAML vs JSON: a human-friendly config format with comments vs a strict, ubiquitous data-interchange format. R…