エンコーディングとシリアライゼーション

データを転送・保存可能な形式に変換する手法の総称

データ形式基礎

エンコーディングとシリアライゼーションとは

エンコーディングはデータを特定の形式に変換する処理、シリアライゼーションはメモリ上のオブジェクトをバイト列に変換して転送・保存可能にする処理である。JSON.stringify はシリアライゼーション、Base64 はエンコーディングの例。

用語の整理

用語 方向
シリアライズ オブジェクト → バイト列 JSON.stringify()
デシリアライズ バイト列 → オブジェクト JSON.parse()
エンコード データ → 特定形式 Base64, URL エンコード
デコード 特定形式 → データ Base64 デコード
マーシャリング オブジェクト → 転送形式 DynamoDB の型情報付き JSON

シリアライゼーション形式の比較

形式 種類 サイズ 速度 スキーマ 用途
JSON テキスト 大きい 中程度 なし Web API
Protocol Buffers バイナリ 小さい 高速 必須 gRPC
MessagePack バイナリ 小さい 高速 なし キャッシュ
CBOR バイナリ 小さい 高速 なし IoT
Avro バイナリ 小さい 高速 必須 Kafka

TypeScript での操作

// JSON シリアライゼーション
const obj = { name: 'Alice', age: 30 };
const json = JSON.stringify(obj);  // '{"name":"Alice","age":30}'
const parsed = JSON.parse(json);   // { name: 'Alice', age: 30 }

// Base64 エンコーディング
const encoded = btoa('Hello');     // 'SGVsbG8='
const decoded = atob('SGVsbG8=');  // 'Hello'

// URL エンコーディング
const urlEncoded = encodeURIComponent('エンコーディングとシリアライゼーション'); // 'Hello%20World!'

DynamoDB のマーシャリング

import { marshall, unmarshall } from '@aws-sdk/util-dynamodb';

// マーシャリング: JS オブジェクト → DynamoDB 形式
marshall({ id: '1', name: 'Alice', age: 30 });
// { id: { S: '1' }, name: { S: 'Alice' }, age: { N: '30' } }

// アンマーシャリング: DynamoDB 形式 → JS オブジェクト
unmarshall({ id: { S: '1' }, name: { S: 'Alice' } });
// { id: '1', name: 'Alice' }

選択基準

Web API (ブラウザ ↔ サーバー) には JSON、マイクロサービス間の高スループット通信には Protocol Buffers、キャッシュ (Redis) には MessagePack か JSON、IoT の帯域制限環境には CBOR が適している。

エンコーディングとシリアライゼーションを扱う関連書籍も多い。

関連用語