マッスル・メモリー

筋肉エンジニアのブログ

ActiveRecordってなんぞ?

ActiveRecordとは

ActiveRecordとは、ウェブアプリケーションフレームワークであるRuby on railsO/Rマッピングを担うライブラリ。

https://magazine.rubyist.net/articles/0004/0004-RLR.html

 

 

で、そのO/Rマッピング(Object-relational mapping、オブジェクト関係マッピング)とはデータベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法のこと。

https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E9%96%A2%E4%BF%82%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0

 

 

うんうん、なるほど。

簡単にいうと、ActiveRecordとは、DBとRuby(rails)の間でデータの変換を行ってくれる便利なライブラリって感じですかね!


ちなみに関係的にはこんな感じだそうです。
f:id:takuma521:20190707193046j:plain

汚なっ!

 

ActiveRecordのメリット

 

ActiveRecordを使うと、

 「どのDBに対してもRubyで直感的に記述することができる。」

そうです。

 

DBっていろいろ種類があります。
Oracle Database
MySQL
PostgreSQL
SQLite
Microsoft SQL Server
などなど、、、

 

しかし、どれも全く同じ書き方ではなく、微妙に違ったりします。
なので、文法を気にせず書けるっていうのは、大きなメリットですね。

 

あと、Rubyで直感的に書けます。例えば

User.where("age >= 25").delete_all

っていうのは、見たまんまでuserのageが25以上に合致するものを全件削除してくれます。
わかりやすいですね!

 

ActiveRecord のデメリット

 

ただ、ActiveRecordについて調べていくとデメリットも存在しました。
・複雑なデータベース設計とは相性が悪い
ActiveRecordから逸脱したことをやろうとすると面倒

 

まあ自分的にはこれらは今後、より難しいことをやる時に考えればいい話で、
まずはActiveRecordを使いこなせるようになってrailsのDB周りをできるようになりたいなと思いました。

 

命名ルール


Active Recordには、モデルとデータベースのテーブルとのマッピング作成時に従うべきルールがいくつかあります。

 

・データベースのテーブル - 複数形、語はアンダースコアで区切られる (例: book_clubs)

・モデルのクラス - 単数形、語頭を大文字にする (例: BookClub)

 

で、この命名ルールかなり厳格であり、例えば"Mouse"という単語、複数形にすると"mice"なのですが、このように書かないといけないらしいです。
単数形から複数形へ不規則な変換でも、探索してしまうなんてすごいですね。

 

ルールって厳しいと窮屈に感じられますが、rails初心者の自分からしたらむしろそれの通りにやればいいんだって寧ろありがたいです。

 

スキーマのルール


Active Recordでは、データベースのテーブルで使うカラム名についても利用目的に応じたルールがあります。

 

外部キーは、は"テーブル名の単数形_id"にする必要があります
例えば、1人のuserが複数のcommentを持つ時に、commentsテーブルにどのuserが持つcommentかを識別するキーとして、user_idを持ちます。

 

主キーは、デフォルトでidという名前のintegerカラムとして使われます。Active Recordマイグレーションでテーブルを作成すると、このカラムが自動的に作成されます。

 

他にも、いくつかルールがあります。
・created_at: レコード作成時に現在の日付時刻が自動的に設定されます。
・updated_at: レコード更新時に現在の日付時刻が自動的に設定されます。
・lock_version: モデルにoptimistic lockingを追加します。
・type: モデルでSingle Table Inheritanceを使う場合に指定します。
・関連付け名_type: ポリモーフィック関連付けの種類を保存します。

 

まとめ


ActiveRecordは、どのDBに対してもRubyで直感的に記述することができる便利なライブラリで、命名ルールやスキーマのルールが厳格に決められている。

 

うーん、ブログ書くって大変だなぁ笑

続けるためにももう少し適当にシンプルにやった方がいいかな笑