Rails は、MVCアーキテクチャを採用している。MVCアーキテクチャとは、プログラムをモデル(Model)、ビュー(View)、コントローラー(Controller)の3つに分けて設計する手法のこと。
モデル(M)の役割は、データベースとのやり取り。
命名ルール
モデル名は、Book
のように単数形が基本。Rails の規約に従っておけば、自動的に Book モデルに紐づくデータベースのテーブル名はモデル名を複数形にした books テーブルとなる。2単語以上の場合はキャメルケースで書く(モデル名:LineItem、テーブル名:line_items)。
Active Record
モデルは、ApplicationRecord クラスを継承している。ApplicationRecord は、ActiveRecord::Base を継承している。(注:Active Record を使わないモデルも作れるがこの記事では触れない)
Active Record はモデルの重要な役割を担う Railsコンポーネントの一つで、データベースのテーブルとモデルとの関連付けを行う。このような関連付けの仕組みを一般的に ORM という。ORM(Object-Relational Mapping)により、データベース内のレコードをオブジェクトのように扱うことができる。具体的には、モデルのメソッドを使うことで SQL 文が発行され、モデルを通してデータベースを操作することができる。
ORMフレームワークとしてのActive Record
- モデルおよびモデル内のデータを表現する
- モデル同士の関連付け(アソシエーション)を表現する
- 関連付けられているモデル間の継承階層を表現する
- データをデータベースで永続化する前にバリデーション(検証)を行なう
- データベースをオブジェクト指向スタイルで操作する
Book モデルを定義するコードの例
class Book < ApplicationRecord end
上のように、モデル定義でメソッドを何も書いていなくてもテーブルのカラム名と同じ名前のインスタンス変数やall
、find_by
、where
、destroy
などのメソッドを使えるのは Active Record のおかげだ。
CRUD
CRUD(クラッド)とは、ソフトウェアが持つべき機能の基本機能「Create」「Read」「Update」「Delete」の頭字語。Active Record が CRUD のメソッドを提供してくれるので、モデルを通してデータの読み書きができる。実際に使えるメソッドには以下のようなものがある。
Create(レコードを作る)
- create
- save
Read(レコードを参照する)
- find
- first
- last
- all
- where
- find_by
Update(レコードを更新する)
- update
- update_all
Delete(レコードを削除する)
- destroy
- destroy_by
- destroy_all
- delete
など。CRUD 関係以外のメソッドもあるので、いずれまとめたい。
マイグレーション
マイグレーションは Active Record の機能の一つで、DSL(ドメイン固有言語:特定のタスクのために設計されたコンピュータ言語)を使ってデータベースを統一的かつ簡単に管理するための仕組み。英単語の migration は「移行」という意味。
マイグレーションは特定の SQL 言語に依存しないので、以下のようなわかりやすいコードでデータベースを操作することができる。実際には、このコードをもとに Active Record が SQL 文を発行してデータベースが操作される。
class CreateBooks < ActiveRecord::Migration[6.0] def change create_table :books do |t| t.string :title t.text :memo t.timestamps end end end
(参考資料)独習Ruby on Rails
(前書いた記事)