|
|
徹底比較!!Ruby on Rails vs Javaフレームワーク |
第7回:RailsとGrailsの比較(後編)
著者:アスタリクス 大西 正太 2006/10/25
|
|
|
1 2 3 次のページ
|
|
はじめに
|
前回より、Groovy上で動作するRailsライクなフレームワークである「Grails」と「Rails」について比較をしています。今回はモデルについて比較するとともに、その他にも気になる点をまとめました。
|
モデルの比較
|
では、さっそくモデルの比較を行います。
|
スキーマ管理
|
RailsでもGrailsでもテーブル名とモデル名およびカラム名とフィールド名について命名規約に従うことで、自動的にO/Rマッピングが実施されます(表1)。
|
Rails |
Grails |
モデル名/クラス名の規約 |
クラス名はテーブル名の単数形 |
モデル名とクラス名を一致 |
フィールド名/カラム名の規約 |
フィールド名とカラム名を一致 |
フィールド名はカラム名のキャメルケース |
表1:O/Rマッピングを自動化する規約
ただし、GrailsとRailsのモデルを比較すると、スキーマ情報をクラスで一元管理するのか、テーブルで一元管理するのか、という点がかなり異なります(表2)。
|
スキーマ管理位置 |
メリット |
デメリット |
Rails |
テーブル |
カラムの大きさ、インデックスなど、RDBの機能をフルに使うことができる |
モデルクラスとそのフィールドの情報が散り、かつ別言語で記述される |
Grails |
モデルクラス |
Groovy上ですべてのスキーマ記述が完結し、一括管理できる |
カラムの大きさ、インデックスなどの項目を指定できず性能が悪化する可能性がある |
表2:RailsとGrailsのスキーマ管理比較
Railsではスキーマ情報はmigrationなどの機能を用いて、テーブルで管理します。RailsのActiveRecordがテーブル構成を自動的に読み取り、クラスにデータへのアクセッサメソッドを動的追加しています。
Grailsでは逆にクラスでスキーマ情報を管理しています。クラスに宣言したフィールドが解析され、サーバ起動時に必要に応じてテーブルが生成・更新されます。
クラスでスキーマ情報を管理することのメリットとして、Groovy上ですべての記述が完結し、シンプルな構成になることがあげられます。
一方、今回調査した範囲では各カラムの大きさやインデックス付与の指定をする方法は見つかりませんでした(注1)。これは性能面に致命的な悪影響を与える可能性があるため、今後アノテーションなどで任意に指定できることが望まれます。
※注1:
Grailsではテーブルの自動生成をOFFにし、自前でテーブルを定義すれば上記の問題を解決できますが、その場合スキーマがSQLとクラス定義で2重管理されてしまいます。
|
リレーション
|
Grailsではテーブルとテーブルのリレーション指定をRailsに近い形式で記述できます。リスト1ではrelatesToManyという記述でCarとWheelの1:nのリレーションを記述しています。
リスト1:1:nリレーションの記述
class Car {
Long id
Long version
String name
def relatesToMany = [ wheels : Wheel ]
Set wheels = new HashSet()
}
記述できるリレーション指定をまとめたのが表5です。
Railsでできることの大半はGrailsでもできますが、唯一n:nのマッピングについては今のところ未対応のようです。Grailsは内部でHibernate(JavaのO/Rマッピングフレームワーク)を利用しており、Hibernateではn:nのマッピングが実現されているため、早晩対応されることが予想されます。
また、継承関係にある複数のクラスを1テーブルにマッピングする(Single table inheritanceと呼ばれる)ことはRailsでもGrailsでも実現されています。
|
Rails |
Grails |
1:1 |
has_one |
belongsTo |
1:n |
has_many |
relatesToMany |
n:1 |
belongs_to |
belongsTo |
n:n |
has_and_belongs_to_many |
未対応 |
テーブル継承 |
対応 |
対応 |
表3:Grailsのリレーション記述一覧
|
1 2 3 次のページ
|
|
|
|
著者プロフィール
株式会社アスタリクス 大西 正太
JavaEEフレームワークの設計構築や開発プロセス策定などの業務を経て、現在は新規ビジネス創生に携わる。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(http://rubricks.org/)のコミッタ。
|
|
|
|