#概要
web開発を初めて1ヵ月が経過した頃、サーバーとデータのやり取りを行う処理にてserializeという処理が求められた。
検索しても、文中の1単語として用いられたり、VB.Netや、Javaなどの特定の言語内での説明ばかりがHitし、言葉の意味、目的、実際の動きなどがイマイチ把握できなかった。
この記事は、検索の最中で断片的に拾った知識を組み合わせて理解した備忘録です。
#シリアライズの語意味① 逐次化
逐の漢字の意味が頭に馴染んでいないせいか、イマイチすっと入ってこないので対義語から推察したい。
逐次化 ⇔ 並列化(parallelize)
パラレルなら、SFとか遊戯王とかスキーとかで聞いたことがありますけど、
平行して複数の状態が進行する的な意味だったはず。
「複数の物事が、同時に進行する」 ⇔ 「一度には一個ずつ処理する」ってことっぽい。
この用法は「サーバーとデータのやり取りを行う処理」の中で用いられてるものではないと判断したので横に置いておくとする。
#シリアライズの語意味② 直列化
小学校の理科で聞いた言葉だけど電池とは関係ない・・・はず。
とりあえず対義語から見ても・・・
直列化 ⇔ 直列化復元(deserialize)
手がかりなし。
ということでWikipediaさんに聞く。
直列化(ちょくれつか)は、オブジェクト指向プログラミングにおいて使われる用語で、ある環境において存在しているオブジェクトを、バイト列やXMLフォーマットに変換することをいう。
(中略)
これにより、オブジェクトの表すデータを、ファイルとしてセーブしたり、ネットワークで送信したりすることができるようになる。このようにして得られたバイト列やXMLフォーマットは、直列化復元ないしデシリアライズによって、元のオブジェクトに復元される。
また、オブジェクトを直列化してファイルなどの永続記憶に保存することを永続化という。
https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BA
つまり、細い回線を通じてデータをやりとりする上で、オブジェクトは大きすぎるので、いったん単純な構造に解いてから通信を行うよってことでよさそう。
使い方としては、クライアント・サーバー共に、送信前にシリアライズ、受信後にデシリアライズを行う感じ、
つまりイメージ的に、回線を流れるデータは常にシリアライズされている状態となる・・・ってこと
#javascriptでシリアライズした記憶が・・・
本当にシリアライズしないと送信できないの?
でもシリアライズなんてした覚えないのに、サーバーにデータ送信できてるけど・・・
と思って調べました。
多くのjavascriptフレームワークには、自動でjson形式にシリアライズしてから送信する機能が搭載されており、私はそれに甘やかされてきただけなようです。
生のjavasncriptを用いる開発では、JSON.stringify()
などを用いて手動でシリアライズする必要があるということでした。
#注意点
シリアライズ自体には、送信データを暗号化したりなどの機能はないため、情報漏洩対策上では特に意味なし!