TOPシステム開発> バリデーション
徹底比較!!Ruby on Rails vs Javaフレームワーク
徹底比較!!Ruby on Rails vs Javaフレームワーク

第7回:RailsとGrailsの比較(後編)

著者:アスタリクス  大西 正太   2006/10/25
前のページ  1  2  3  次のページ
バリデーション

   Railsではモデルクラスに宣言的にバリデーション情報を記述することができます。

   Grailsでは、モデルクラス内のconstraintsメソッドにバリデーション記述を書くことができます。リスト2ではnameとpass属性のバリデーションを記述しています。
リスト2:Grailsのバリデーション
class Person {
   Long id
   Long version

   String name
   String pass

   def constraints = {
      name(length:8..30, blank:false, unique:true)
      password(length:6..10,blank:false)
   }
}


ダイナミックファインダ

   Railsではメソッド定義なしでモデルの「find_by_*」(*は任意のカラム名)というメソッドを呼び出すことができ、自動的にカラム名をキーにした検索処理が実施されます(ダイナミックファインダ機能)。

   この機能はGrailsにも準備されており、メソッド定義なしでも「findBy*」というメソッドでRailsと同様の効果を得られます。また、Grailsのモデルで「listOrderBy*」というメソッドを利用すると、ソートされた検索結果一覧を得ることができます。

   未定義メソッドでこのような効果を得る機能はRailsには見当たりません(注2)。

※注2: Railsでも通常の方法で「order by」指定することはできます

リスト3:Grailsのダイナミックファインダ
Person.findByName('yamada') //<= "yamada"という名前のPersonを検索
Person.listOrderByAge() //<= "age"順にPersonの一覧を取得


対応RDB

   RailsとGrailsの対応RDBをまとめたものが表6です。両者ともメジャーな製品に対応しており、大差はありません。

Railsの対応RDB
DB2、Firebird、MySQL、OpenBase、Oracle、PostgreSQL、sqlite、SQL Server、Sybase
Grailsの対応RDB
DB2、HSQL DB、SQL Server、MySQL、Oracle、PostgreSQL、SAP DB、Sybase、Timesten

表4:RailsとGrailsの対応RDB


モデル比較の結論

   モデルにおける機能的な面で比べると、Railsにしかない機能もGrailsにしかない機能もあるといった状態で、大差はありません。

   スキーマ管理についてはRailsとGrailsの考え方は大きく異なっています。すべてGroovy上で完結するGrailsの考え方はシンプルですが、インデックスやカラムサイズを指定できない点を考慮すると、本格的なサイトの運用には耐えないかもしれません。

   現状ではRailsのモデルの方がGrailsよりも優れているといえるのではないでしょうか。

前のページ  1  2  3  次のページ


株式会社アスタリクス 大西 正太氏
著者プロフィール
株式会社アスタリクス  大西 正太
JavaEEフレームワークの設計構築や開発プロセス策定などの業務を経て、現在は新規ビジネス創生に携わる。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(http://rubricks.org/)のコミッタ。


INDEX
第7回:RailsとGrailsの比較(後編)
  はじめに
バリデーション
  その他の比較