マーシャリング【marshalling】marshaling
概要

プログラムはそれぞれ独自のデータ表現やメモリ構造、関数の呼び出し規約を持っている。このため、異なる技術基盤で開発されたプログラム同士は、そのままではデータを交換したり処理を依頼したりできない場合が多い。マーシャリングでは双方の間を仲介するソフトウェアや実行環境が、データ形式やデータ型の変換、呼び出し規約の統一などを行い、異種のプログラム間でも相互運用できるようにする。
整数や文字列のような基本的なデータ型に加え、構造体や配列、オブジェクトなど複雑なデータ構造を対象に含む場合がある。CPUアーキテクチャが異なる場合はバイトオーダー(エンディアン)やデータ型のサイズにも差異が生じるため、それらを吸収する変換も行う。こうした処理は主にRPC(遠隔手続き呼び出し)や分散オブジェクト技術などに伴って行われる。
また、オブジェクトやデータ構造を保存・転送のために共通の表現形式へ変換する操作をマーシャリングと呼ぶこともある。例えば、メモリ上に展開されたデータ集合をJSONやXML、Protocol Buffersなど一定の形式に変換して送信・保存し、受け取った側で元の形式に戻す処理がこれに当たる。逆方向の復元操作は「アンマーシャリング」(unmarshalling)と呼ばれる。
この意味でのマーシャリングとアンマーシャリングは、「シリアライズ」(serialize)および「デシリアライズ」(deserialize)とほぼ同義に扱われることが多い。Go言語やRustなどの言語では標準ライブラリの関数名に「marshal」「unmarshal」という語が採用されており、この用法が定着している。厳密には、単純なシリアライズがデータの表記法の変換を指すのに対し、マーシャリングはRPCのスタブが関与するような、より複雑な環境間でのデータ変換やメタデータの付与を伴う処理を指す場合もある。ただし、両者の境界は技術分野や文脈によって異なり、明確に区別されないことも多い。