FORMAT COMPARISON
CBOR vs MessagePack
CBORとMessagePackはどちらもJSONに似た値をバイナリへ直列化します。CBORはプロトコル用のタグや決定的エンコード規則を標準化し、MessagePackは汎用オブジェクトのコンパクトな符号化を提供します。
CBORとMessagePack、どちらを選ぶ?
IETF仕様、拡張タグ、決定的エンコード要件をプロトコルで使うならCBORを検討し、既存アプリやMessagePackライブラリとの互換性が優先ならMessagePackを選びます。数値範囲、拡張値、正規化、実装間の互換性をテストしてください。
CBOR向き
制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現
- JSONに似たデータを小さなバイナリ表現で扱う
- 標準タグやアプリケーション定義タグで値の意味を示す
MessagePack向き
JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換
- JSONの配列・マップ・基本型をバイナリで扱う
- 拡張型やタイムスタンプを対応ライブラリ間で交換する
基本情報を比較
CBORとMessagePackの主な違いを確認できます。
| 項目 | CBOR | MessagePack |
|---|---|---|
| 拡張子 | .cbor | .msgpack、.mpk |
| MIME Type | application/cbor | application/octet-stream |
| 主な用途 | 制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現 | JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換 |
| 圧縮 | none | none |
| 開く方法 | CBORライブラリやデコーダーで読み込み、診断表記またはJSON相当の表示へ変換して確認します。タグやバイト列など、JSONに直接対応しない値は変換時の表現を確認してください。 | MessagePack対応ライブラリやデコーダーで読み込みます。内容確認には診断表示やJSON相当の表示へ変換しますが、バイナリ値や拡張型がどう表示されるかも確認してください。 |
| 書き出し・変換 | JSONへ変換すると、バイト列やタグ付き値などはJSONに直接対応しないため、ツール固有の表記になることがあります。署名・ハッシュ・キャッシュキーに使う場合はRFC 8949の決定的符号化など、プロトコルで合意した符号化規則を適用します。 | JSONへ変換すると、バイナリ値や拡張型は標準JSONに直接対応しないため、配列・文字列・独自タグなどの表現に置き換わることがあります。往復変換では型と数値の範囲、タイムスタンプ、マップキー、拡張型を実データで照合します。 |
用途別の選び方
作りたいものや使う場面から選べます。
JSONに似たデータを小さなバイナリ表現で扱う
制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現
CBOR向き標準タグやアプリケーション定義タグで値の意味を示す
制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現
CBOR向きJSONの配列・マップ・基本型をバイナリで扱う
JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換
MessagePack向き拡張型やタイムスタンプを対応ライブラリ間で交換する
JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換
MessagePack向き確認ポイント 1
CBORは整数、バイト列、配列、マップ、タグなどをRFC 8949で定義し、値の意味をタグで拡張できます。MessagePackは整数、文字列、バイナリ、配列、マップに加えてアプリ定義のextension型を持ちます。
使い分け確認ポイント 2
CBOR仕様は決定的エンコードの要件を定め、署名やハッシュで同じ値を一貫して表す設計に使えます。MessagePackではアプリケーション側でキー順序やextension値の規則を定める必要があります。
使い分け選ぶ理由を詳しく
- 同じデータモデルでもエンコード、タグや拡張型、数値境界の扱いが異なり、直接のバイト互換性はありません。交換するフィールドと拡張の対応表を決め、実データで相互運用試験をします。