JavaOne2010 9/20 -- What's New in Grails 1.3?

GrailsのPJリーダのGraeme Rocher*1によるGrails1.3の機能紹介。


正直なところ、JGGUGのワークショップでさんざん山本さんが発表されてるのでほとんど新しい情報はないですが、一応メモをとったので書いておきます。

  • "2006年ごろからサイトのトラフィックが急増してる。プラグインのソースコード行数(なぜにそんな指標値?)も急激に増加してきてる。"
  • "有名どころで実績増えてきた(wired.com, Walmart, LinkedIn, etc)"

ってことで盛り上がってまっせアピール。

実際のところかなり良いです。Eclipse使いでGrails開発するなら普通にこのプラグインを使えばいいと思います。
Grailsコマンドの補完とかもできるし、GORMの動的メソッドも補完できるし、すごくいい感じ。

  • "Grails1.2でかなり性能向上した"
  • "ライブラリの依存性をDSLで記述できる。Grails Centralもデフォルトリポジトリに追加したので、プラグインも一元管理できる"
// inside BuildConfig.groovy
grails.project.dependency.resolution = {
    repositories {
        grailsHome()
        mavenCentral()
        grailsCentral()
    }
    plugins {
        runtime ":searchable:0.5.5"
    }
    dependencies {
        runtime "mysql:mysql-connector-java:5.1.5"
    }
}
  • "Pluggableなテストフレームワーク。従来のunit or integrationというphase指定だけではなく、どのテストフレームワークのテストかというtypeも指定できるようになった"
  $ grails test-app unit:
  $ grails test-app :spock
  $ grails test-app unit:spock
  • "ドメインクラスにデフォルト制約とORMマッピングを設定できるようになった。Config.groovyに書けばOk"
grails.gorm.default.constraints = {
    '*'(nullable:true, size:1..20)
}
grails.gorm.default.mapping = {
    generator:'sequence'
}
  • "Named URL Mappings対応。リンク生成時にタグライブラリ名としてURLマッピング名を指定できる"
// inside UrlMappings.groovy
name product: "/product/$name/$flavor?" {
    controller = "product"
    action = "show"
}

// inside GSPs
<link:product name="licorice" flavor="strawberry">Strawberry Licorice</link:product>
  • "GORMにbelongsToの反対の、hasOneを導入"
  • "Named Query対応。複数のNamed Queryを連結して指定した場合でも、全てのNamed Queryをマージした1つのSQLのみを発行する"
  • "新しいJSONBuilder"
// Build your JSON
render(contentType:"text/json") {    
    categories = [ { a = "A" }, { b = "B" } ]
}
// Produces output
{ "categories": [  {"a" : "A"} ,  {"b" : "B"} ] }
  • "将来的な予定"
    • Flex Support
    • Building NoSQL - GORM Abstraction
    • Grails in the cloud
    • Developer productivity
    • First class GemFire & RabbitMQ integration


という感じで。

*1:ブラッドピット似の超イケメン