エンコーディングとシリアライゼーション
データを転送・保存可能な形式に変換する手法の総称
エンコーディングとシリアライゼーションとは
エンコーディングはデータを特定の形式に変換する処理、シリアライゼーションはメモリ上のオブジェクトをバイト列に変換して転送・保存可能にする処理である。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 が適している。
エンコーディングとシリアライゼーションを扱う関連書籍も多い。
この記事は役に立ちましたか?
関連用語
JSON
JavaScript 由来の軽量なデータ交換フォーマットで、Web API のデファクトスタンダード
Protocol Buffers
Google が開発した効率的なバイナリシリアライゼーションフォーマットで gRPC の標準データ形式
Base64
バイナリデータを ASCII テキストに変換するエンコーディング方式で、メールや JSON でのバイナリ転送に使われる
Unicode
世界中の文字を統一的に表現するための文字コード規格
SAML
企業の ID プロバイダーとサービスプロバイダー間でシングルサインオンを実現する XML ベースの認証プロトコル
エンティティと値オブジェクト
DDD における 2 つの基本的なドメインモデル要素 - 同一性で区別するエンティティと、値で区別する値オブジェクト
関連する記事
年収を上げた 1 冊 - エンジニア 50 人に聞いたキャリアを変えた本
エンジニアのキャリアに転機をもたらした本にはどんな共通点があるのか。50 人の回答から見えてきた、キャリアを変える本の 3 つの特徴を分析します。
技術書がキャリアを変えた話 - 読書とキャリアの関係
技術書の読書習慣がエンジニアのキャリアに影響する 3 つの経路と、キャリア段階に応じた読書戦略を具体的に解説します。
技術書 1 冊分の知識で年収が 50 万円変わる計算
技術書への投資リターンを具体的な数字で試算します。1 冊 3000 円の本が、スキルアップを通じてどれだけの年収増につながりうるのか。投資対効果の観点から技術書の価値を考えます。