RailsモデルとActive Record基礎|シリアライズ属性の使い分けを初心者向けに徹底解説
生徒
「Railsのモデルで、データベースに配列や設定みたいな情報を保存したいときはどうするんですか?」
先生
「Railsでは、シリアライズ属性という仕組みを使うことで、1つのカラムに複数の情報をまとめて保存できます。」
生徒
「serializeとかjsonbとか、いろいろあって混乱します……」
先生
「それぞれの特徴と使い分けを、日常の例えを使いながら順番に見ていきましょう。」
1. モデルとActive Recordにおけるシリアライズ属性とは?
Railsのモデルは、データベースとプログラムをつなぐ役割を持っています。 このとき使われるのがActive Recordです。Active Recordは、 データベースのテーブルをRubyのクラスとして扱える仕組みで、 「保存」「取得」「更新」「削除」といった操作をとても簡単にしてくれます。
通常、データベースのカラムには文字列や数字など、1つの値を保存します。 しかし実際のアプリ開発では、「設定の集まり」や「チェック項目の一覧」など、 複数の情報をまとめて保存したい場面がよくあります。
そこで登場するのがシリアライズ属性です。 これは、箱の中に小さな箱をたくさん入れてしまうようなイメージで、 1つのカラムに配列やハッシュ(名前と値の組み合わせ)を保存できる仕組みです。
2. serializeとは?一番シンプルな方法
serializeは、Railsで昔から使われている基本的なシリアライズ方法です。
中身を文字列に変換して保存し、取り出すときに元の形に戻してくれます。
たとえば「買い物メモ」を1枚の紙にまとめて書いて、 必要なときに読み返すようなイメージです。
class User < ApplicationRecord
serialize :preferences, Hash
end
この例では、preferencesというカラムに、
好みや設定をまとめて保存できます。
プログラミング未経験の方でも、「設定メモを1か所にまとめて保管する」
と考えると理解しやすいでしょう。
ただし、serializeは中身をデータベースが直接理解できないため、 検索や並び替えが苦手という弱点があります。
3. jsonbとは?データベースに優しい保存方法
jsonbは、主にPostgreSQLというデータベースで使われる仕組みです。
JSONという形式でデータを保存し、データベース側が中身を理解できるのが特徴です。
JSONとは、「名前」と「内容」をセットで管理する書き方で、 Webサービスでもよく使われています。 例えるなら、項目ごとにラベルが貼られた引き出しのようなものです。
class User < ApplicationRecord
end
jsonb型のカラムを使うと、特定の項目だけを検索したり、 条件に応じて取り出したりできます。 データ量が多くなっても扱いやすいため、 実際のWebアプリ開発でよく使われます。
4. store_accessorとは?箱の中身を直接使う感覚
store_accessorは、serializeやjsonbと組み合わせて使う便利な機能です。
中に入っている値を、まるで普通の属性のように扱えます。
これは、引き出しの中に入っている文房具を、 直接手に取って使うような感覚に近いです。
class User < ApplicationRecord
store_accessor :settings, :theme, :language
end
このように設定すると、themeやlanguageを
普通のカラムのように読み書きできます。
初心者の方でも、「特別な操作をしなくていい」点が大きなメリットです。
5. serialize・jsonb・store_accessorの使い分け
ここまでの内容を整理すると、使い分けの考え方が見えてきます。 少量の設定を手軽に保存したい場合はserialize、 検索や拡張性を重視するならjsonbがおすすめです。
そして、保存した中身を簡単に扱いたいときに、 store_accessorを組み合わせると、コードがとても読みやすくなります。
Railsのモデル設計では、「あとで困らない形」を意識することが大切です。 最初は小さなアプリでも、成長するとデータの扱い方が重要になってきます。