II-15-2. Ruby on Rails (RoR)の仕組み

RoRを用いたWebアプリケーション開発を行う際に基本となるMVCアーキテクチャについて触れ、RoRではMVCアーキテクチャがどのように実現されるか、その構成要素を解説する。

【学習の要点】

* RoRではMVCアーキテクチャが採用されている。

* RoRにおけるControllerは、ApplicationControllerクラス継承したRubyクラスとして記述する。

* RoRにおけるViewはテンプレートと呼ばれる。テンプレートを記述する際に、各種テンプレートエンジンを利用することで、動的に画面を生成できる。

* RoRにおけるModelは、ActiveRecord::Baseクラスを継承したRubyクラスとして記述する。Active RecordはO/Rマッピング機能を提供し、開発者がデータベースを直接操作する必要はない。

図II-15-2. RoRにおけるMVC

【解説】

1) RoRにおけるMVCの配置

RoRではMVCアーキテクチャを採用している。

* app/controllers/

* app/models/

* app/views/

に対応するモジュールが置かれる。

2) RoRにおけるMVCの役割

* Model

- 通常のMVCでは、Modelはデータとビジネスロジックをカプセル化したものである。データベースとの関連は実装に任せられている。

- RoRではModelをActiveRecord::Baseクラスを継承したRubyクラスとして記述する。ModelはActiveRecordの機能ににより自動的にデータベーステーブルと関連付けられる。

- RoRにおいても、ビジネスロジックは通常のMVCと同様にModelに記述することが一般的である。異なる意見として、RoRではControllerが3層アーキテクチャにおけるビジネスロジック層、Modelがデータアクセス層にあたる、という考え方があり、この場合、ビジネスロジックはControllerに記述する。

* View

- Viewはユーザインタフェースを提供する。RoRでもViewの役割は通常のMVCと同様である。

- RoRにおけるViewはテンプレートと呼ばれる。テンプレートに対し、builder、ERb、rjs、hamlといったテンプレートエンジンを適用することで、クライアントへのレスポンスを動的に生成することができる。

- RoRではViewとControllerの結びつきが強い。そのため、RoRにおけるViewとControllerはAction Packという単一のコンポーネントにまとめられている。

- RoRでは、Viewにプログラム要素が入り過ぎるのを防ぐために、ヘルパーを利用することができる。ヘルパーとは、表示の整形など、View用のプログラム要素を、Viewから簡単に呼び出せるRubyメソッドとして記述したものである。

* Controller

- 通常のMVCでは、Controllerはリクエストの内容を解析し、適したModel、Viewへ処理を委譲する。

- RoRにおけるControllerはApplicationControllerクラス継承したRubyクラスとして記述する。

- 一つのアプリケーション内に複数のControllerが存在することが一般的である。

- リクエストはまずRoR内蔵のルータによって受け付けられる。ルータは、開発者が記述したControllerクラスのオブジェクトの内、リクエストに対応するオブジェクトのメソッドを呼び出す。

- RoRのルータとControllerの役割を合わせたものが、通常のMVCにおけるControllerであると言える。

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