Protocol Buffers ツール
Protocol Buffers メッセージのエンコード、デコード、検証
Proto スキーマ
スキーマ情報
入力
スキーマを解析してメッセージタイプを選択し、フォームフィールドを生成します
出力
生フィールド
| フィールド番号 | ワイヤータイプ | 値 |
|---|
Protocol Buffers ドキュメント
Protocol Buffers とは?
Protocol Buffers(Protobuf)は、Google が開発した言語中立、プラットフォーム中立の拡張可能な構造化データシリアライゼーション機構です。データシリアライゼーションにおいて、XML や JSON よりも小さく、高速で、シンプルです。
主な特徴
- 言語中立・プラットフォーム中立
- XML/JSON より小さく高速
- スキーマ定義による強い型付け
- 前方互換性と後方互換性
- 自動コード生成
- 効率的なバイナリエンコーディング
このツールの使い方
- スキーマエディタに .proto スキーマ定義を入力
- 「スキーマを解析」をクリックしてスキーマを検証・解析
- 操作するメッセージタイプを選択
- エンコード時:JSON データを入力し、「エンコード」をクリック
- デコード時:バイナリデータを入力し、「デコード」をクリック
- 「生デコード」を使用してスキーマなしでバイナリデータを分析
ツール機能
エンコード
JSON データを Protocol Buffers バイナリ形式に変換。フォームベースの入力でデータ入力と型検証が簡単に。
デコード
Protocol Buffers バイナリデータを読み取り可能な JSON 形式に変換。Base64、16進数、C スタイル16進数入力形式をサポート。
生デコード
スキーマなしで protobuf バイナリデータを分析。デバッグ、リバースエンジニアリング、未知のメッセージ分析に便利。
フォーム入力
スキーマに基づいて入力フォームを生成するユーザーフレンドリーなインターフェース。ネストされたメッセージ、列挙型、繰り返しフィールドをサポート。
Proto 構文リファレンス
Protocol Buffers はメッセージタイプを定義するためのシンプルな構文を使用します:
syntax = "proto3";
message Person {
string name = 1;
int32 id = 2;
string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
repeated PhoneNumber phones = 4;
}
syntax: protobuf バージョン(proto2 または proto3)を指定message: フィールドを持つメッセージタイプを定義field: 各フィールドには型、名前、一意の番号があるenum: 列挙型を定義repeated: フィールドを繰り返し(配列/リスト)としてマークoptional: フィールドをオプションとしてマーク(proto3)
スカラー型
Protocol Buffers は様々なスカラー型をサポート:
| 型 | 説明 | デフォルト値 |
|---|---|---|
| int32, int64 | 符号付き整数(可変長エンコーディング) | 0 |
| uint32, uint64 | 符号なし整数 | 0 |
| sint32, sint64 | ZigZag エンコーディングの符号付き整数(負数に効率的) | 0 |
| fixed32, fixed64 | 固定幅符号なし整数(4 または 8 バイト) | 0 |
| sfixed32, sfixed64 | 固定幅符号付き整数(4 または 8 バイト) | 0 |
| float, double | 浮動小数点数(32 または 64 ビット) | 0.0 |
| bool | ブール値(true/false) | false |
| string | UTF-8 エンコードされたテキスト文字列 | "" |
| bytes | 任意のバイナリデータ | empty |
ワイヤータイプ
Protobuf はワイヤータイプを使用してバイナリデータから値を読み取る方法を決定します:
| ワイヤータイプ | 意味 | 用途 |
|---|---|---|
| 0 | Varint | int32, int64, uint32, uint64, sint32, sint64, bool, enum |
| 1 | 64-bit | fixed64, sfixed64, double |
| 2 | Length-delimited | string, bytes, embedded messages, packed repeated |
| 5 | 32-bit | fixed32, sfixed32, float |
ベストプラクティス
- 新しいプロジェクトには proto3 構文を使用 - よりシンプルで広くサポート
- フィールド番号を安定に保つ - 既存のフィールドの番号を再利用または変更しない
- データを明確に説明する意味のあるフィールド名を使用
- 頻繁に使用するフィールドには番号 1-15 を予約(1 バイトで済む)
- 配列/リストには 'repeated' キーワードを使用
- 可能な値の固定セットを持つフィールドには列挙型を定義
よくある質問
proto2 と proto3 の違いは?
Proto3 は必須フィールドを削除して構文を簡素化 - すべてのフィールドがデフォルトでオプション。デフォルト値も変更され、スカラー型のフィールド存在検出が削除されました。新しいプロジェクトには Proto3 が推奨されます。
スキーマなしで protobuf をデコードできますか?
はい!「生デコード」機能を使用してスキーマなしでバイナリデータを分析できます。フィールド名は番号(field_1、field_2 など)で表示され、一部の型情報は曖昧な場合があります。
エンコードされたデータが期待と異なるのはなぜ?
Protobuf エンコーディングは決定的ですが、デフォルト値(0、false、空文字列)は proto3 では通常スペース節約のためエンコードされません。また、JSON のフィールド順序はバイナリエンコーディングに影響しません。
ネストされたメッセージをどう処理する?
スキーマでネストされたメッセージを定義し、ネストされた JSON オブジェクトを使用します。フォームモードでは、ネストされたフィールドボタンをクリックしてダイアログでネストデータを編集できます。
一般的なユースケース
- マイクロサービス間通信(gRPC)
- データストレージとキャッシング
- 設定ファイル
- ネットワークプロトコルと API