Ruby on Railsでアプリケーションを作成していると、度々ActiveRecordという仕組みが出てきます。
Tweet.allやTweet.saveなど、モデルに対してメソッドを使ってテーブルを操作できるものという解釈で使用しており、あまり詳しく踏み込んでいなかったので少し学んでみました。
ActiveRecordとは
Railsガイドによると
ActiveRecordとは、MVCで言うところのM、つまりモデルの一部であり、データとビジネスロジックを表現するシステムの階層です。ActiveRecordは、データベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行えるようにします。
ちょっと難しいですが、モデルに搭載されていて、データベースとのやり取りを可能にしているシステムですということ。
本来、SQL文を書かないとデータベースのデータが扱えないところ、ActiveRecordというシステムによってTweet.allでtweetsテーブルのレコードが全て取得できる。
このActiveRecordのような仕組みをORM(オブジェクト/リレーショナルマッピング)と言う。
ORMの仕組みがない言語はSQL文でのデータベース操作が必要となる。
Tweet.saveやTweet.allなどイメージしやすく、Ruby on RailsはSQL文を知らなくても扱えるので初心者も学びやすいフレームワークである。
ActiveRecordでできること
テーブルデータのCRUDだけでなく、マイグレーションやテーブル間のアソシエーションが組めるのもActiveRecordの機能によるもの。
命名規則などもActiveRecordの規約となっている。
ActiveRecordを使うには
Railsアプリケーションを作成し、モデルファイルを生成した時点で利用できるようになっている。
モデルファイルを作成すると一番上に
class Tweet(モデル名) < ApplicationRecord
と書かれている。これはTweetクラスをApplicationRecordの機能を受け継いだ子クラスとしている。
ApplicationRecordとは、Railsアプリケーションを新規作成した際にapp/models/application_record.rbと言うファイルが生成されている。
これを見ると、一番上に
class ApplicationRecord < ActiveRecord::Base
と書かれて、ActiveRecord::Baseを継承している。
ActiveRecord::BaseはRailsが提供する基本機能を持ったクラスで、ActiveRecordが利用できるのも、このクラスがあるおかげである。
全ての機能をActiveRecord::Baseが持っている、そのクラスを継承したApplicationRecordが各モデルにActiveRecordの機能を提供している。
データの保存がない場合
FormオブジェクトパターンやActiveHashを使用する場合は、ファイル上部にApplicationRecordを継承する記述は書かない。
Railsガイドの説明にも、ActiveRecordは、データベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行えるようにします。 とあるように、ActiveRecordはデータベースを作成するものに対してのみ使用する。
まとめ
Railsアプリケーションはモデルが処理の根幹を担うため、ActiveRecordの機能の恩恵を受けているのだなと気付きました。
最終課題頑張ります!