コンテンツへスキップ
uencoder

効率的なバイナリシリアライズに MessagePack を使う

MessagePack は JSON ライクなデータをコンパクトなバイナリ形式にパックし、サイズとパース時間を削減します。高性能 API や IoT で人気です。

  1. 1

    MessagePack はバイナリシリアライズ形式で、JSON ライクなデータをより少ないバイト数で表現します。タイプ・長さ・値 (TLV) 方式のエンコードを使い、小さな整数は 1 バイト、短い文字列は 1-2 バイトに収まり、区切り文字や引用符もありません。テキストパースを回避するため、JSON よりエンコード/デコードが高速です。

  2. 2
    Base64 エンコーダー →

    MessagePack のバイナリ出力を base64 にエンコードして、テキストチャネル経由で転送できるようにします。MessagePack は生バイト列を出力するため、base64 にすると JSON フィールド、HTTP ヘッダー、ログに安全に格納できます。受信側は逆に、base64 デコード → MessagePack アンパックを行います。

  3. 3
    HEX エンコーダー →

    デバッグ用には hex エンコードも使えます。hex は人間が読める形式で、MessagePack のバイト構造を調べられます。各バイトがタイプと値のエンコードを示します。これはプロトコルのデバッグ用であり、本番の転送には使わないでください (hex は base64 の約 2 倍のサイズになります)。

  4. 4

    MessagePack の用途:マイクロサービス間の内部通信 (protobuf スキーマなしで gRPC 並みの効率)、IoT (小さなペイロード)、キャッシュ (より小さい Redis 値) です。公開 API では、コンテンツネゴシエーション付きの JSON を使い、application/json と application/x-msgpack の両方をサポートしてください。

よくある質問

MessagePack と Protobuf はどう違いますか?
Protobuf はスキーマ (.proto ファイル) を必須とし、コードを生成します。より小さく高速ですが、柔軟性は低くなります。MessagePack は JSON と同じくスキーマレスで、使いやすい一方ややサイズが大きくなります。安定した大流量の内部 API には Protobuf を、柔軟性が必要な場合やスキーマが頻繁に変わる場合は MessagePack を使ってください。
ブラウザーで MessagePack を使えますか?
はい。@msgpack/msgpack などのライブラリが高速なエンコード/デコードを提供しています。HTTP ではコンテンツネゴシエーションを使い、Accept: application/x-msgpack を送信してバイナリレスポンスをデコードします。WebSocket では ArrayBuffer を直接送受信します。

このタスクを解決するワークフロー

Ascii85 から Base64 へ変換
Ascii85 をデコードし、より広い互換性のために Base64 として再エンコードする。
パイプライン
Base2048 から Base64 へ変換
Base2048(絵文字)をデコードし、標準転送のために Base64 として再エンコードする。
パイプライン
Base32 から Base64 へ変換
Base32 エンコード文字列を生バイトにデコードし、よりコンパクトな表現のために Base64 として再エンコードする。
パイプライン
Base32 から Hex へ変換
Base32 をデコードし、デバッグのために Hex として再エンコードする。
パイプライン
Base58 から Base64 へ変換
Base58 をデコードし、標準互換性のために Base64 として再エンコードする。
パイプライン
Base64 エンコード後デコードのラウンドトリップ検証
テキストを Base64 にエンコードし、デコードしてラウンドトリップが元のデータを保持することを検証する。
パイプライン
Base64 から Hex へ変換
Base64 文字列を生バイトにデコードし、検査や相互運用のために Hex として再エンコードする。
パイプライン
Binary から Hex へ変換
Binary(base-2)文字列をバイト値にデコードし、Hex として再エンコードする。
パイプライン
Blowfish 暗号化後に Base64 エンコード
Blowfish で暗号化し、テキストセーフな転送のために Base64 エンコードする。
パイプライン
ChaCha20 暗号化後に Hex エンコード
ChaCha20 で暗号化し、暗号文を Hex エンコードする。
パイプライン
DES 暗号化後に Base64 エンコード
DES で暗号化し、レガシー互換性のために Base64 エンコードする。
パイプライン
URL 転送用の JSON ペイロードのエンコード
JSON ドキュメントを URL パラメータ用に準備する: 整形、Base64 エンコード、パーセントエンコード — ネストされたパラメータデコードチェーンの正確な逆順。
パイプライン
AES 暗号化後に Base64 エンコード
平文を AES で暗号化し、テキストセーフな転送のために暗号文を Base64 としてエンコードする。
パイプライン
コンテンツのハッシュと Base64 エンコード
入力のハッシュを計算し、コンパクトな転送のためにハッシュダイジェストを Base64 としてエンコードする。
パイプライン
Hex エンコード後デコードのラウンドトリップ検証
テキストを Hex にエンコードし、デコードしてラウンドトリップが元のデータを保持することを検証する。
パイプライン
テキストの Hex エンコードと分析
テキストを Hex 表現に変換し、その後 Hex 出力の文字統計を計算する。
パイプライン
Hex から Base64 へ変換
Hex 文字列を生バイトにデコードし、コンパクトな転送のために Base64 として再エンコードする。
パイプライン
HMAC 署名後に Base64 エンコード
HMAC 署名を生成し、API 認証ヘッダーのために Base64 エンコードする。
パイプライン
Morse エンコードと Base64 転送
テキストを Morse 符号としてエンコードし、デジタル転送のために Base64 エンコードする。
パイプライン
Multibase から Hex へ変換
Multibase をデコードし、プレーン Hex として再エンコードする。
パイプライン
Octal から Hex へ変換
Octal をデコードし、コンパクトな表現のために Hex として再エンコードする。
パイプライン
RC4 暗号化後に Base64 エンコード
RC4 で暗号化し、転送のために Base64 エンコードする。
パイプライン
テキスト反転と Hex エンコード表示
文字列を反転し、その後 Hex 表現を検査する — バイトオーダーの問題やエンコーディングパズルのデバッグに有用。
パイプライン
RIPEMD-160 ハッシュ後に Base64 エンコード
RIPEMD-160 ハッシュを計算し、転送のために Base64 エンコードする。
パイプライン
SHA-512 ハッシュ後に Hex エンコード
SHA-512 ハッシュを計算し、可読性のために Hex としてエンコードする。
パイプライン
テキストシャッフルと Base64 エンコード
テキスト文字をシャッフルし、その後結果を Base64 エンコードする。
パイプライン
Unicode エスケープと Base64 エンコード
テキストを Unicode エスケープし、ASCII セーフな転送のために Base64 エンコードする。
パイプライン
URL デコードと Hex バイト表示
URL エンコード文字列をパーセントデコードし、低レベル分析のために Hex バイト表現を表示する。
パイプライン
URL エンコード後 Base64 二重エンコード
URL エンコードし、API ペイロードの二重エンコードのために Base64 エンコードする。
パイプライン
URL 転送用テキストペイロードのエンコード
テキストをパーセントエンコードし、安全な URL パラメータ転送のために Hex 表現を表示する。
パイプライン
UUencode 後 Base64 エンコード
テキストを UUencode し、その後結果を Base64 エンコードして二重エンコードする。
パイプライン
UUID 生成と Base64 エンコード
UUID を生成し、コンパクトな保存のために Base64 エンコードする。
パイプライン
XXencode 後 Hex エンコード
テキストを XXencode し、その後結果を Hex エンコードする。
パイプライン

関連ツール