MessagePack パーサー
MessagePackはJSONのようですが、より小さく高速な効率的バイナリシリアライゼーションフォーマットです。Redis、Fluentd、および多くのRPCシステムで使用されています。このツールはMessagePackファイルを解析し、型とサイズに関するメタデータ付きでコンテンツをJSONとして表示します。
仕様
よくあるユースケース
- MessagePackエンコードされたAPIレスポンスのデバッグ
- MessagePackでシリアライズされたRedisキャッシュデータの検査
- Fluentdログメッセージの分析
- ロギングやデバッグのためにMessagePackをJSONに変換
- MessagePackフォーマットのRPCペイロードの理解
機能
- ドラッグ&ドロップまたはファイル選択でMessagePackバイナリファイルを解析
- 16進数エンコードされたMessagePackデータをデコード
- 拡張型を含むすべてのMessagePack型をサポート
- 可読性のためにJSONに変換
- ドキュメントメタデータの表示(サイズ、型の数、最大深度)
- 拡張型情報の表示
- バイナリデータとタイムスタンプの処理
- 生バイナリ検査用Hexビューアー
例
シンプルなMessagePack
試してみる →2つのフィールドを持つMessagePackマップ: {"hello":"world","count":42}
82 a5 68 65 6c 6c 6f a5 77 6f 72 6c 64 a5 63 6f 75 6e 74 2a16進数エンコードされたMessagePack
試してみる →文字列、数値、ブール値を含むMessagePackマップ: {"name":"Alice","age":30,"active":true}
83 a4 6e 61 6d 65 a5 41 6c 69 63 65 a3 61 67 65 1e a6 61 63 74 69 76 65 c3ヒント
- 16進数エンコードされたMessagePackデータを直接貼り付けて解析できます。
- MessagePackは通常、同等のJSONの50〜80%のサイズです。
- 拡張型(負の型コード)はアプリケーション定義です。
- タイムスタンプは様々な精度フォーマットで拡張型-1を使用します。
- 一部の実装はタイムスタンプに拡張型1を使用します。
解説 MessagePack パーサー
MessagePackはJSON互換のデータモデルを維持しながら可能な限りコンパクトなバイナリシリアライゼーションフォーマットです。Sadayuki Furuhashiによって作成され、MessagePackは型情報とデータが交互に配置される自己記述的なバイナリフォーマットでデータをエンコードし、外部スキーマなしで効率的な解析を可能にします。
このフォーマットは可変長エンコーディング方式を使用します。小さな整数(0-127)は1バイトに収まります。短い文字列は型バイト自体に長さを含みます。マップと配列はコンパクトな長さプレフィックスを使用します。この設計により、通常同等のJSONの50〜80%のサイズのペイロードが生成され、テキスト解析のオーバーヘッドがないため、シリアライゼーションとデシリアライゼーションが大幅に高速化されます。
MessagePackはnil、ブール値、整数(符号付きおよび符号なし最大64ビット)、浮動小数点(32および64ビット)、文字列、バイナリ、配列、マップ、拡張型をサポートします。拡張型によりアプリケーションはカスタム型を定義でき、タイムスタンプ拡張(型-1)が唯一の標準化された拡張です。ほぼすべてのプログラミング言語にライブラリが存在し、一貫した言語間互換性を提供します。
MessagePackはRedis(オプションのシリアライゼーションフォーマットとして)、Fluentd(ログ転送)、SignalR(リアルタイムWeb)、および帯域幅と解析速度が重要な多くのRPCシステムやゲームネットワークプロトコルで使用されています。JSON互換性が望ましいがテキストシリアライゼーションのオーバーヘッドが大きすぎる場合に良い選択肢です。
MessagePackは帯域幅や解析速度が重要なシナリオに最適です: リアルタイム通信、高スループットAPI、ゲームネットワーク、IoTデバイス、キャッシュレイヤー。人間の可読性が重要な場合、設定ファイル、またはテキストベースのフォーマットを期待するシステムとの相互運用の場合、JSONがより良い選択肢として残ります。
Protocol Buffersと比較して、MessagePackはJSONと同様にスキーマレスです。データは自己記述的でありスキーマの事前定義なしにシリアライズできます。Protocol Buffersは言語固有のコードにコンパイルされる.protoスキーマファイルを要求しますが、より小さなペイロードを生成しより強い型安全性を提供します。MessagePackはスキーマのない動的データに適しており、Protobufは最大効率が必要な明確に定義されたAPIコントラクトに優れています。
拡張型により、アプリケーションは組み込みセット以外のカスタムデータ型を定義できます。各拡張には型コード(-128〜127)と任意のバイナリデータがあります。タイムスタンプ拡張(型-1)は唯一の標準化された拡張であり、ナノ秒精度のタイムスタンプを表現します。アプリケーションはUUID、BigDecimal、ドメイン固有のオブジェクトなどの型に独自の拡張を定義できます。