II-15-3. Railsにおけるデータベース連携

RoRを用いたWebアプリケーション開発ではどのようにデータベースとの連携が行われるかを解説する。RoRにおけるデータベース連携のコンポーネントであるActiveRecordの概要と構成について説明し、データベース操作に必要な各種の設定について述べる。

【学習の要点】

* Active RecordはRoRに用意されたO/Rマッピング層である。

* Active Recordを利用した場合、データベーススキーマの情報は動的に取得されるため、Rubyソースコード中にデータベーススキーマの情報を記述する必要はない。

* RoRではアプリケーションのデータベーススキーマの変更を管理するために、マイグレーション機能を利用することができる。

* データベースの接続に関する設定はconfig/database.ymlで行う。

図II-15-3. ActiveRecordによるO/Rマッピング
【解説】

1) ActiveRecord

Active RecordはRoRに用意されたO/Rマッピングの層である。通常のRubyプログラム内で利用することも可能である。

2) ActiveRecordによるO/Rマッピング

* ActiveRecored::Baseクラスを継承したクラスは、クラス名を元にデータベーステーブルと結び付けられる。

* データベースの行は、Modelクラスのオブジェクトにマッピングされる。

* データベースの列は、Modelクラスのオブジェクトの属性にマッピングされる。このとき、SQLの型はRubyのクラスに変換される。

* データベーステーブルの列に関する情報は、ActiveRecordによって動的に取得されるため、ソースコードや設定ファイル内に記述する必要はない。

* ActiveRecordはModelオブジェクトに対し、値の検証を行う機能を提供する。定型的な検証については、あらかじめ用意されているヘルパーメソッドを利用することができる。

* ActiveRecordは、1対1、1対多、多対多のテーブル間の関連をサポートする。

3) データベースへの接続

* ActiveRecordでは、データベース操作は共通のインタフェースによって抽象化されている。

* データベース接続処理の詳細は、データベース毎の固有のアダプタによって行われる。

* 各種データベースへの接続に用いるアダプタの多くは、RubyGemsによりインストールすることができる。

* RoR内でActiveRecordを利用する場合は、config/database.ymlにデータベース接続情報を指定する。

* ActiveRecordを単体で用いる場合、データベース接続はActiveRecord::Base.establish_connectionクラスメソッドによって行う。データベース接続情報はメソッドの引数として渡す。

4) マイグレーション

Webアプリケーションをインクリメンタルに開発する場合、開発が進むにつれてデータベーススキーマが変化していく場合が考えられる。RoRでは、このようなデータベーススキーマの変更を管理する仕組みとして、マイグレーションを利用することができる。

* マイグレーションはdb/migrateディレクトリに配置されるRubyコードである。

* マイグレーションにはバージョン番号が割り当てられる。

* マイグレーションはActiveRecord::Migrationのサブクラスであり、データベーススキーマの変更を行うクラスメソッドupと、データベーススキーマの変更を取り消すクラスメソッドdownを含む必要がある。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。