leftovers...

about grails groovy

Grails 1.2 RC1 リリースっ。

Grails 1.2 RC1リリースですね。

最近リリースラッシュのGroovy系のソフト達。
Grails 1.1.x系のバグフィックスGrails 1.1.2がリリースされたり。
http://www.grails.org/1.1.2+Release+Notes
Groovyは、1.6.6と1.7-RC-1そしてGrails1.2のバグFix用にGroovy-1.6.7

そして、Gaelyk 0.3.2のリリースと、

Gantは1.8.1、http://gant.codehaus.org/
Gradleも0.9がリリース(まだ?) http://www.gradle.org/
Griffonは0.3-SNAPSHOTがいたりとか・・・。http://griffon.codehaus.org/Download
と何気にGroovy関連を並べてみる!

Spring 3.0.0.RC3がリリースされて、http://www.springsource.org/node/2198 (ぇえ!正式リリースじゃなかったのん??)
そして、ここ最近ちゃんと短い期間で正式1.2へ向けてマイルストンリリースされているGrailsのRC1がリリースです。

はい!本題!
今回のGrails 1.2 RC1リリースに含まれる新機能のご紹介です。


詳しくは以下のエントリーも参考に!
Grails 1.2-M4 リリースだよ! - leftovers...
Grails 1.2-M3 に更新! - leftovers...
Grails 1.2-M2 リリースですよ! - leftovers...
Grails 1.2-M1 リリース & JSUG+JGGUG合同勉強会 お疲れ様でした。 - leftovers...

Grails-1.2-M3辺りでも紹介した、依存解決関連 (Apache Ivyで実装されてる)が、さらにパワーアップ!?
コマンドからもローカルキャッシュにレポからライブラリ引っ張れます。

grails install-dependency mysql:mysql-connector-java:5.1.5
  • Named Query Supportドメインクラスでの名前付き問い合わせ

ドメインクラスのnamedQueriesプロパティにDSLを記述します

class Publication {
  String title
  Date datePublished

 static namedQueries = { 
   recentPublications { 
     def now = new Date() 
     gt 'datePublished', now - 365
   }
   publicationsWithBookInTitle { 
     like 'title', '%Book%' 
   } 
 }
}

以下のように使用できます。

def recentPubs = Publication.recentPublications.list()
def recentPubs = Publication.recentPublications.list(max: 10, offset: 5)

Publication.recentPublications.count()
  • CriteriaビルダーでsqlRestriction実装
def c = Person.createCriteria()
def peopleWithShortFirstNames = c.list {
    sqlRestriction "char_length( first_name ) <= 4"
}

grails-app/domains内にあるドメインクラスにGORMシンタックスの代わりにアノテーションでも定義できます。(GAE/J対策になるかな!?)
こんな感じです。

import javax.persistence.*

@Entity
@Table(name = "animal")
class Animal {

  @Id 
  @GeneratedValue
  int id
  String name
  @ManyToOne
  @JoinColumn
  Owner owner

  static constraints = {
    name blank:false
  }
}
  • paramsとタグのattrsに便利なnullセーフコンバータが追加された。

コントローラとかで使うparamsとタグリブのattrsにnullセーフコンバータメソッドが追加されました。
例えばこんな感じ
int('パラメータ名')とかlong('パラメータ名')とかboolean('パラメータ名')と付ける

def total = params.int('total')

あと、同じ名称のパラメータをリスト型にまとめるlist('パラメータ名')
(これプチ便利ぢゃん)

def names = params.list('names')
  • プロジェクトドキュメントエンジン

プロジェクトのsrc/doc/ref、src/doc/guide以下にファイルを配置することで、Grailsのリファレンスと同じドキュメントエンジンがプロジェクトで利用可能。
これが、さらに、Grailsの外でも使えるようになりました。
ぉぉ!これ待ってた、他でも使いたいね!
Gradleのシンタックスでは、こんな感じ

compile group: 'org.grails', name: 'grails-docs', version:'1.2.0.RC1'

Antタスクだと、

ant.taskdef (name: 'docs', classname : 'grails.doc.ant.DocPublisherTask')
ant.docs(src:"src/docs", dest:"build/docs",
                properties:"src/docs/doc.properties")

※個人的に試していないのでリリースノートそのまま書いています(-.-);

  • Config.groovy(又は外部ファイル定義)でビーンのプロパティオーバライドで文字型以外の型に対応

// Config.groovy

beans {
     someService {
          someProperty = new SomeObject()
     }
}
  • テスト関連の改良
  • JUnitな実装でないテストツール

元々Grailsでのテスト実装では、JUnit以外で実装されたテストはGrailsの深い部分で使用する際、結構大変でしたが、(例えば easybとか)、今回オーバーホールされて、様々なテストに対応しやすくなりました。

  • テストフェーズとターゲット指定

テストフェーズの指定方法が向上しました。
※多分spockはspockプラグインが必要。まあ、以下は例としてなので。

grails test-app <phase>:<type>
grails test-app unit:spock    // ‘spock’ テストを ‘unit’ フェーズで実行

どちらもオプショナルなので、以下のようにどちらかの指定もできます。

grails test-app unit:    // ‘unit’フェーズで全てのタイプのテストを実行
grails test-app :spock    // 全てのフェーズで、‘spock’テストを実行

‘SomeController’の全てのテストを ‘unit’フェーズで実行

grails test-app unit: SomeController

‘unit’ と ‘integration’の全てのタイプのテストを実行

grails test-app unit: integration:

従来の指定方法でも動きます。

grails test-app --unit    // grails test-app unit: と同じです
  • テストの前にクリーン強制実行
grails test-app -clean
  • System.outとSystem.errをエコーさせる。

デフォルトでは、テスト時は何も表示されません。-echoOutや-echoErrを指定すると表示を許可します。

grails test-app -echoOut -echoErr

そして、このリリースラッシュの理由はGroovy Grails eXchange 2009だったりもするらしいです。そうです、自分もスピーカーで2年前に(もうそんなになるのか・・ xmlDo.net - Grails Web Development: Grails eXchange 2007)参加したことある、Groovy Grailsの祭典がロンドンで、 12/9、12/10に開催されます。
http://skillsmatter.com/event/java-jee/groovy-grails-exchange-2009
行くという方いたら、連絡ください!オイスターカード渡します! (本気です)