Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】Object::Marshal定数の使い方

Marshal定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

Marshal定数は、Rubyオブジェクトをバイト列に変換したり、そのバイト列から元のRubyオブジェクトを復元したりするための機能を提供するモジュールを表す定数です。これは、主にRubyプログラム内で扱っているオブジェクトの現在の状態をファイルに保存したり、ネットワークを通じて別のプログラムへ送ったりする際に非常に重要な役割を果たします。

具体的には、Marshal.dumpメソッドを使うことで、指定したRubyオブジェクトの情報を、コンピュータが理解できる連続したデータ(バイト列)に変換します。このプロセスは「シリアライズ」または「直列化」と呼ばれます。一度バイト列に変換されたデータは、ファイルとして保存したり、通信回線に乗せて遠隔のサーバーへ送信したりすることが可能です。

逆に、Marshal.loadメソッドを使用すると、保存されていたバイト列から元のRubyオブジェクトをメモリ上に復元できます。このプロセスは「デシリアライズ」または「非直列化」と呼ばれ、オブジェクトが持っていたデータや構造をほぼ完全に再現することが可能です。

ただし、すべてのRubyオブジェクトがMarshalによってシリアライズできるわけではありません。例えば、開いているファイル(IOオブジェクト)や、プログラムの実行状態に密接に関連するオブジェクトなどは、適切にシリアライズ・デシリアライズできない場合があります。また、セキュリティ上の注意点として、信頼できないソースから受け取ったMarshalデータをloadすることは、意図しないコードの実行につながる可能性があるため、避けるべきです。Rubyオブジェクトの永続化やプロセス間通信を実現するための強力なツールとして活用されています。

構文(syntax)

1# オブジェクトをバイト列に変換する
2serialized_data = Marshal.dump(["hello", 123, { language: "Ruby" }])
3
4# バイト列を元のオブジェクトに復元する
5original_object = Marshal.load(serialized_data)

引数(parameters)

引数なし

引数はありません

戻り値(return)

Module

Marshalモジュールは、Rubyオブジェクトをバイト列にシリアライズ(直列化)したり、バイト列をRubyオブジェクトにデシリアライズ(非直列化)したりするための機能を提供します。この定数は、そのMarshalモジュールそのものを指します。

関連コンテンツ

関連プログラミング言語