デシリアライズ【deserialize】デシリアライゼーション
概要

プログラムが実行中にメモリ上で扱うデータは、複数の変数やオブジェクトが相互に参照し合う複雑な構造を持つことが多い。こうした構造はそのままではファイルへの保存やネットワーク越しの送受信に適さないため、特定の規則に従って一つの連続したデータ列として表現する「シリアライズ」(serialize)が行われる。
デシリアライズはその逆操作にあたり、ストレージから読み込んだデータや別のコンピュータから受信したデータを解析し、元の構造を持つオブジェクトやデータ集合としてメモリ上に再構築する。例えば、Web APIから受信したJSONデータをプログラム内のオブジェクトへ展開する処理や、アプリケーションが起動時に設定ファイルを読み込んでプログラム上の変数群へ変換する処理がこれに当たる。
シリアライズとデシリアライズは対になる機能として提供され、特定の形式でシリアライズされたデータは、対応するデシリアライズ処理によってのみ正確に復元できる。ただし、変換時に一部の情報が省略されている場合や、保存時と復元時でデータ定義が異なる場合には、完全に元の状態へ戻せないこともある。元になるデータ形式としては、JSONやXML、YAMLといったテキスト形式のほか、Protocol Buffersのようなバイナリ形式もある。言語や処理系によっては、この復元処理を「パース」(parse)や「アンマーシャル」(unmarshal)と呼ぶこともある。
セキュリティ上の問題としては、信頼できない外部入力をそのままデシリアライズすることで任意のコードが実行される「安全でないデシリアライゼーション」と呼ばれる脆弱性が知られている。OWASP Top 10にも継続的に挙げられてきた攻撃経路であり、デシリアライズ前の入力検証やデータの改竄検知、復元可能な型の制限といった対策が求められる。