Protobuf デコーダー / エンコーダー
Base64 エンコードされた protobuf
デコードされたフィールド(2)
| フィールド # | ワイヤータイプ | 値 |
|---|---|---|
| 1 | Varint(0) | 150 |
| 2 | Length-delimited(2) | testing |
技術的な詳細
Protobuf デコーダの仕組み
このツールでできること
Protobuf デコーダは、.proto スキーマファイルを必要とせずに生の Protocol Buffer バイナリデータを解析し、ワイヤ形式のフィールド番号、型、値を表示します。また、.proto 定義を提供した場合は、JSON を protobuf バイナリへエンコードすることもサポートします。これにより、元のスキーマにアクセスできなくても、ネットワークトラフィックからキャプチャしたりデータベースに保存されたりしている不透明な protobuf ペイロードを検査できます。
開発者によくある利用シーン
バックエンド開発者は、スキーマなしの protobuf デコードを使って、ドキュメント化されていない gRPC API をリバースエンジニアリングしたり、Kafka トピック内のシリアライズされたメッセージをデバッグしたり、データベース列のバイナリペイロードを検査したりします。セキュリティ研究者は、ペネトレーションテスト中に protobuf でエンコードされたネットワークトラフィックを分析します。エンコードモードは、.proto 定義が期待どおりのバイナリ出力を生成することを、スキーマ変更を本番サービスへデプロイする前に検証するのに役立ちます。
データ形式、型、またはバリエーション
Protocol Buffers は、5 種類のワイヤ型を持つコンパクトなワイヤ形式を使用します:varint(int32、int64、bool、enum)、64-bit fixed(double、fixed64)、length-delimited(string、bytes、埋め込みメッセージ、packed repeated fields)、32-bit fixed(float、fixed32)、および非推奨の start/end group 型です。スキーマがない場合、デコーダは文字列と埋め込みメッセージ(どちらも length-delimited)を区別できないため、両方の解釈を試し、最も可能性の高い解析結果を表示します。
よくある落とし穴とエッジケース
スキーマなしのデコードは本質的に曖昧です。varint は符号付き int32(ジグザグ)、符号なし uint32、または boolean のいずれにもなり得て、長さ区切りのフィールドは文字列、bytes、またはネストされたメッセージになり得ます。フィールド名はバイナリエンコードでは失われ、数値のフィールドタグとしてのみ現れます。パックされた繰り返しフィールドは、スキーマの文脈がないと単一の bytes フィールドと同一に見えます。曖昧さを解消するため、デコード結果は入手可能なドキュメントと必ず突き合わせて確認してください。
コードではなくこのツールを使うべき場面
.proto ファイルがない場合や、ビルドツールチェーンを用意せずにエンコードを検証したい場合に、キャプチャした protobuf ペイロードを手早く確認するためにこのブラウザツールを使用してください。本番システムでは、適切なスキーマファイル、言語別に生成されたコード、そして完全な型安全性、前方互換性、アプリケーションのビルドシステムとの統合を提供する gRPC リフレクションサービスとともに protoc を使用してください。