Grails
JavaによるWebアプリケーション作成では、開発開始時点や途中で環境やフレームワークの構成設定が必要である。そのコンフィギュレーションは XML ファイルとして切り出して設定しやすくし、構成設定をアプリケーションのコードに埋め込まないようにすることが多い。
XML によるコンフィギュレーションはアプリケーション間の一貫性を高めるということで当初は歓迎された。しかし最近では、有効性は認めるものの、実際にXMLファイルの設定を修正するのは面倒だという人が多くなっている。アプリケーションが成長するにつれて、開発者はフレームワークのコンフィギュレーションを理解し、維持することに時間を費やすことになり、生産性を低下させる要因になっている。アプリケーションに機能を追加したり修正したりする度にXMLコンフィギュレーションも修正していると、アプリケーションの改良が遅くなり、生産性が低下する。
Grails では、XMLコンフィギュレーションファイルの修正を不要にした。その代わり、フレームワークが規約を使ってアプリケーションのコードを調べる。例えば、grails-app/controllers フォルダ内の名前の最後が Controller となっているクラス(例えば BookController)は、MVCのコントローラと見なされる。対応するビューも無指定の場合は grails-app/views/コントローラ名/アクション名.gsp となる。
ただし、設定が全くないわけではなく、データベースやログの設定などは ConfigSlurper の形式で grails-app/conf フォルダ内に配置する。ここの設定は GrailsApplication.config から読み込める。
Grailsで扱うデータ(モデル)は、GORM (Grails Object Relational Mapping) と呼ばれるORマッピング機構を使ってデータベースに格納される。ドメインクラスは、以下のような grails コマンドを使って作成し、grails-app/domain ディレクトリ配下に配置する。
すると、ドメインクラス名を聞かれるので入力すると、適当なファイルが作成される。以下に Book クラスのコードを示す。
上のドメインクラスは、書籍名をString型の title、著者を Person型の author として持つデータモデルを定義している。
GORMの機能によって、Grailsアプリケーション実行時にこのドメインクラスに対応するテーブル book がDB上に作成され、このテーブルは数値型の id、数値型のversion、 文字列型の title、 personテーブルのidへの外部キーである author_id の4つのカラムを持つ。Grailsアプリケーション開発者は、SQLをほとんど意識せず、ドメインクラスのメソッドとしてこれらのデータへのアクセスを記述することができる(もちろん、必要に応じてGORMのバックエンドであるHibernateが処理可能なHQLの形式でクエリを発行することもできる)。
このように、ドメインクラスを作成するだけで、Grails によって永続化されたデータを管理できる。ドメインクラスに主キーのためのidとバージョン管理のためのversionが明示的に宣言されていない場合にもそれらを付加する機能は、Grails 0.3 以降の GORM で提供されている。