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

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

データ形式基礎

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

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

用語の整理

用語の整理を以下に示す。

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

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

シリアライゼーション形式の比較を以下に示す。

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

TypeScript での操作

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 のマーシャリング

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 が適している。

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

この記事は役に立ちましたか?

関連用語

関連する記事