MessagePack コーデック
MessagePack バイナリシリアライゼーション形式のエンコードとデコード
API レスポンス、ログファイル、ネットワークキャプチャから取得した MessagePack データを貼り付け
クリックしてサンプルデータを挿入
デコード結果
MessagePack データを入力してデコードをクリックすると結果が表示されます
バイトビューア
有効な JSON データを入力して MessagePack にエンコード
コンテナ長エンコード
- Compact: 最小バイトを使用(≤15要素時にfixarray/fixmap)
- Explicit 16-bit: 常に2バイト長を使用(array16/map16形式)
- Explicit 32-bit: 常に4バイト長を使用(array32/map32形式)
クリックして JSON サンプルを挿入
エンコード結果
JSON データを入力してエンコードをクリックすると MessagePack が生成されます
バイトビューア
エンコード統計
MessagePack データ型リファレンス
| 型名 | フォーマットバイト範囲 | 説明 |
|---|---|---|
| 正の固定整数 | 0x00-0x7F | 0から127の整数(1バイト) |
| 負の固定整数 | 0xE0-0xFF | -32から-1の整数(1バイト) |
| 固定マップ | 0x80-0x8F | 0-15個のキーバリューペアを持つマップ |
| 固定配列 | 0x90-0x9F | 0-15個の要素を持つ配列 |
| 固定文字列 | 0xA0-0xBF | 長さ0-31バイトの文字列 |
| Nil | 0xC0 | null/nil 値を表す |
| ブーリアン | 0xC2-0xC3 | True (0xc3) または False (0xc2) |
| バイナリ | 0xC4-0xC6 | 生のバイナリデータ(bin8/bin16/bin32) |
| 拡張型 | 0xC7-0xC9, 0xD4-0xD8 | 型コード付きのアプリケーション定義型 |
| 浮動小数点 | 0xCA-0xCB | 32ビットまたは64ビット浮動小数点数 |
| 符号なし整数 | 0xCC-0xCF | 8/16/32/64ビット符号なし整数 |
| 符号付き整数 | 0xD0-0xD3 | 8/16/32/64ビット符号付き整数 |
| 文字列 | 0xD9-0xDB | UTF-8文字列(str8/str16/str32) |
| 配列 | 0xDC-0xDD | 16ビットまたは32ビット長の配列 |
| マップ | 0xDE-0xDF | 16ビットまたは32ビット長のマップ |
MessagePack プロトコルドキュメント
MessagePack とは
MessagePack は効率的なバイナリシリアライゼーション形式です。2008年に古橋貞之氏によって作成され、JSONライクなデータ構造をコンパクトなバイナリ表現にパックします。通常JSONより50%小さく、解析も高速です。Redis、Fluentd、およびパフォーマンスが重要な多くのリアルタイム通信システムで広く採用されています。
バイナリエンコーディング構造
MessagePack は型-長さ-値(TLV)エンコーディングスキームを使用します。最初のバイト(フォーマットバイト)がデータ型を決定し、小さな整数や短い文字列の場合は値自体を含むこともあります。大きな値は長さとペイロードに追加バイトを使用します。この設計により、小さな値を極めて効率的にエンコードしながら、大規模なデータ構造もサポートできます。
| フォーマットバイト | 意味 |
|---|---|
| 0x00-0x7F | 正の固定整数(0-127、値はバイト内) |
| 0x80-0x8F | 固定マップ(0-15ペア、カウントは下位4ビット) |
| 0x90-0x9F | 固定配列(0-15要素、カウントは下位4ビット) |
| 0xA0-0xBF | 固定文字列(0-31バイト、長さは下位5ビット) |
| 0xC0-0xDF | Nil、ブーリアン、bin、ext、float、int型 |
| 0xE0-0xFF | 負の固定整数(-32から-1) |
MessagePack と JSON の比較
両方の形式は同じデータモデルを表しますが、異なるシナリオ向けに最適化されています。MessagePack はコンパクトなサイズと解析速度を優先し、高スループットシステムに最適です。JSON は人間の可読性とすべてのプラットフォーム間の汎用互換性を優先します。
- JSON より 30-50% 小さい
- ネイティブバイナリデータサポート
- シリアライゼーションと解析が高速
- 型安全で整数型を区別
- 人間が読み書き可能
- ブラウザと言語で普遍的にサポート
- デバッグとロギングが容易
一般的な用途
- Redis データシリアライゼーションとキャッシング
- リアルタイム通信プロトコル(ゲーム、チャット)
- Fluentd ログ集約と転送
- RPC フレームワーク(MessagePack-RPC)
- 帯域幅制限のあるモバイル・組み込みアプリ
拡張型
MessagePack はアプリケーション定義の拡張型をサポートします。各拡張には型コード(-128から127の整数)とバイナリペイロードがあります。一般的な標準拡張にはタイムスタンプ(型-1)があり、正確な時間表現のために秒とナノ秒を格納します。
| 型コード | 一般的な用途 |
|---|---|
| -1 | タイムスタンプ(公式) |
| 0-127 | アプリケーション定義型 |