データバインディングの強化

入力パラメータのバインディング時に一部のパラメータのみのバインドが以下のように簡単に記述できるようになった。ドメインクラスにも同じ構文で一部のプロパティのみにアクセスすることができる。

// firstNameとlastNameのみをバインド
person.properties["firstName","lastName"] = params

// ドメインクラスのプロパティの一部にアクセス
person.properties["firstName","lastName"].each { println it }

また、Grails 1.1ではリスト・セット・マップといったコレクション型のバインディングもサポートされている。

Testing Pluginの統合

Grails 1.0系ではプラグインとして提供されていたTesting PluginがGrails本体に統合された。GrailsにはもともとJUnitが統合されているが、Testing Pluginの統合によってコントローラ、ドメインクラス、タグライブラリなどの共通的なクラスの振る舞いを簡単にエミュレートすることができるようになり、テストケースの記述が容易になった。

Scaffolding

grails install-templatesコマンドで生成したテンプレートを修正することで動的なScaffoldingの外観をカスタマイズできるようになった。また、MANY-TO-MANYや、単方向のONE-TO-MANYもサポートされた。

Scaffolding(単方向のONE-TO-MANY)

DSLの強化

GroovyはDSL(Domain Specific Language:特定のドメイン・用途に特化した言語)を定義するのに適した言語だ。GrailsでもSpringの設定ファイルをGroovyで記述するためのBeanBuilderや、AntのビルドファイルをGroovyで記述するためのGantといったDSLが利用されている。

Grails 1.1では新たにLog4jの設定を記述するためのDSL(LOG4J DSL)が追加されたほか、BeanBuilderがSpringの名前空間に対応した。

プラグイン機構の改善

Grailsはフレームワークの機能を拡張するためのプラグイン機構を備えている。Grails 1.1ではgrails install-pluginコマンドでプラグインをインストールする際に-globalオプションを付与することで全てのGrailsアプリケーションからプラグインを利用することができるようになった。

また、複数のプラグインリポジトリのサポートや、プラグインを特定のスコープ(テスト時のみ使用するなど)だけに限定することができるようになったなど、Grailsアプリケーションのプロジェクトを運用していく上で利便性を向上するための改善が行われている。

*  *  *

Grailsは登場した当初はRuby on Railsのコピーフレームワークといった取り上げ方をされることが多かったが、Javaならではのメリットを活かしたフレームワークとして進化を続けている。Grails 1.1では本稿で紹介したもの以外にも多くの新機能が追加されているが、大きな新機能よりも開発者の利便性を向上させるためのものが中心だ。これはGrailsがすでに成熟したフレームワークである証ともいえるだろう。

JavaEEアプリケーションはJavaVMやアプリケーションサーバといった安定したインフラが整備されていることが大きな魅力だが、反面仕様は複雑でその開発は重厚長大なものだ。スクリプト言語の軽快さを活かしつつ、JavaEEプラットフォームで稼動させることのできるGrailsはまさにJavaとスクリプト言語のいいとこどりをしたフレームワークといえるのではないだろうか。Grailsの今後に注目したい。