Jggug 2010 330 Grails 1.3 観察

45
Grails 1.3 観察 JGGUG japan grails/groovy user group def speaker = new Cast(name:”T.Yamamoto”,version:”G*-2010-03-30”)

Transcript of Jggug 2010 330 Grails 1.3 観察

Page 1: Jggug 2010 330 Grails 1.3 観察

Grails 1.3 観察-もう更新!?-

JGGUGjapan grails/groovy user group

def speaker = new Cast(name:”T.Yamamoto”,version:”G*-2010-03-30”)

Page 2: Jggug 2010 330 Grails 1.3 観察

自 己 紹 介山本 剛仕事:テクニカルDTPアーキテクト

twitter: @tyamaはてな id: mottsniteブログも↑

JGGUG名古屋支部長「Grails徹底入門」共著 9~11を執筆

Page 3: Jggug 2010 330 Grails 1.3 観察

リリース履歴1.3 M1 - 3/11 1.3 RC1 - 3/24 → 3/末に変更。   1.3 リリースはいつ?

1.2.x系の立場は!?

Page 4: Jggug 2010 330 Grails 1.3 観察

更新内容Groovy 1.7 SupportJUnit 4Maven Repository SupportDeclarative Plugin DependenciesDirty Checking in GORMGORM Support For Derived PropertiesNamed Queries Support Additional CriteriaNew GSP Tag - join

Page 5: Jggug 2010 330 Grails 1.3 観察

Groovy 1.7.x

Page 6: Jggug 2010 330 Grails 1.3 観察

Groovy 1.7Grails-1.2.2 では、Groovy-1.6.8に更新Groovy 1.7 リリースノート

翻訳 by ksky http://d.hatena.ne.jp/ksky/20100121/p1

http://groovy.codehaus.org/Japanese+Groovy+1.7+release+notes

Page 7: Jggug 2010 330 Grails 1.3 観察

Groovy 1.7更新内容おさらい匿名内部クラスとネストクラスimport、package、変数宣言へのアノテーションのサポートASTビューア、ASTビルダGroovy Truthがカスタマイズ可能にboolean asBoolen()メソッド書き直されたGroovyScriptEngineGroovyConsole

Page 8: Jggug 2010 330 Grails 1.3 観察

匿名内部クラスとネストクラスstaticなネストクラス

匿名内部クラス

class A { static class B {}}new A.B()

boolean called = false Timer timer = new Timer()timer.schedule(new TimerTask() { void run() { called = true }}, 0) sleep 100assert called

Page 9: Jggug 2010 330 Grails 1.3 観察

import、package、変数宣言へのアノテーションのサポート

importに@Grabを付ける@Grab(group='net.sf.json-lib', module='json-lib', version='2.3', classifier='jdk15') import net.sf.json.groovy.*

変数宣言に@Grabを付ける@Grab('net.sf.json-lib:json-lib:2.3:jdk15') def builder = new net.sf.json.groovy.JsonGroovyBuilder()

Page 10: Jggug 2010 330 Grails 1.3 観察

パワーアサートassert new File('foo.bar') == new File('example.txt')

Caught: Assertion failed:

assert new File('foo.bar') == new File('example.txt') | | | foo.bar | example.txt false

Page 11: Jggug 2010 330 Grails 1.3 観察

GroovyConsole設定記憶別窓で開く

Page 12: Jggug 2010 330 Grails 1.3 観察

JUnit 4

Page 13: Jggug 2010 330 Grails 1.3 観察

JUnit 4テスト実行にJUnit4が採用されています。Grails 1.3以前のテストに関しても互換は保たれています。

JUnit 4http://ja.wikipedia.org/wiki/JUnit いろいろできます。

Page 14: Jggug 2010 330 Grails 1.3 観察

JUnit 4テストがこんな感じにかける。

import grails.test.*import org.junit.* //インポートしてね。// テストクラス名の最後はTestでもOK 。//以前はXxxxxTestsしか認識しなかった。class ItemTest extends GrailsUnitTestCase { @Before void initialize() { super.setUp() //これは必ず付けてね

println "initialize()" } @After void goodby() { super.tearDown() //これは必ず付けてね

println "goodby()" }

Page 15: Jggug 2010 330 Grails 1.3 観察

JUnit 4以前のJUnit3の状態も併用できる。

@Test //メソッドの前に testって書かなくて良い void プリフィックスいらないぉ() {

assertEquals 0,0 } //@Test無しでも、testで始まっていれば実行。 void test昔の書き方もOKでっせ() {

shouldFail{ asdsdagdrgasf } }

Page 16: Jggug 2010 330 Grails 1.3 観察

JUnit 4こんなのもできる。

@Ignore // JUnit4なので・・。 void スッキプするよ() {

assertEquals 0,0 } @Test(timeout=2000L) // JUnit4なので・・。 void タイムアウトさせる() {

Thread.sleep(3000) assertEquals 0,0 }}

Page 17: Jggug 2010 330 Grails 1.3 観察

JUnit 4GrailsUnitTestCaseが必要なければextendsしなくてもOK。その場合はちゃんとorg.junit.Assertをインポート。

import org.junit.*import static org.junit.Assert.*class SomeTest {

! //...省略...

}

Page 18: Jggug 2010 330 Grails 1.3 観察

Mavenリポジトリサポート

Page 19: Jggug 2010 330 Grails 1.3 観察

MavenリポジトリサポートMavenリポジトリへのプラグインの発行と読込に対応しました。

この実装は、 Mavenパブリッシャープラグインで対応しています。

Page 20: Jggug 2010 330 Grails 1.3 観察

GrailsとMavenの関係http://grails.org/doc/latest/guide/3.%20Configuration.html#3.7.7%20Maven%20Integration

実は以前からpom対応は存在しました。

たぶん使ってる人少ない?http://grails.org/Maven+Integration↑どうなったのやら。

grails.project.dependency.resolution = { ! pom true! ..}

Page 21: Jggug 2010 330 Grails 1.3 観察

Maven Publisherhttp://grails.org/plugin/maven-publisherGrailsプラグインをMavenリポジトリにデプロイすることができます。※通常のGrailsプロジェクトも可能。pom.xml も自動で生成してくれます。

%grails maven-install ! ローカルキャッシュにインストール%grails maven-deploy! リモートリポジトリにデプロイ

Page 22: Jggug 2010 330 Grails 1.3 観察

バージョン・グループ・アーティファクトの指定

*GrailsPlugin.groovy に記述する。(プラグインディスクリプタファイル)

ドキュメントでは、groupIdになっているが現状だとgroupが認識する。String group = 'jp.xmldo.grails'

グループ指定を省略すると、"org.grails.plugins"が代わりに使用される。バージョン指定は従来通りdef version = '0.1'

アーティファクト名はプラグインの名称が使用される

この場合は jp.xmldo.grails:example-wiki:0.1 となる。

Page 23: Jggug 2010 330 Grails 1.3 観察

grails maven-deployリポジトリを指定して実行

BuildConfig.groovy にリポジトリを設定

% grails maven-deploy --repository=myRepo

grails.project.dependency.distribution = { remoteRepository(id:"myRepo", url:"file://127.0.0.1/Users/tyama/myrepos/maven2/")}

または、grails.project.dependency.distribution = { remoteRepository(id:"myRepoScp", url:"scp://10.211.55.6/var/www/html/myrepo"){ authentication username:"tyama", privateKey:"${userHome}/.ssh/id_dsa" }}

Page 24: Jggug 2010 330 Grails 1.3 観察

プラグインの依存性管理BuildConfig.groovyにIvy DSLで記述することで、install-pluginを使用せずにプラグインを管理。

http://grails.org/doc/latest/guide/3.%20Configuration.html#3.7.9%20Plugin%20Dependencies

grails.project.dependency.resolution = { plugins { runtime 'jp.xmldo.grails:example-wiki:0.1' }}

Page 25: Jggug 2010 330 Grails 1.3 観察

依存プラグインの除外例)weceemプラグインが依存しているプラグインdef dependsOn = [ searchable:'0.5.4 > *', quartz:'0.4.1 > *', ]

例)excludesで除外して、バージョンを決め打ちで指定するplugins {! runtime( ':weceem:0.8' ) {! ! excludes "searchable"! }! runtime ':searchable:0.5.4'}

Page 26: Jggug 2010 330 Grails 1.3 観察

トランジティブを無効にするトランジティブ 解決すべき他の依存関係を持っているかどうか全ての依存解決を無効にする場合は、transitiveにfalseを指定。

plugins { runtime( ':weceem:0.8' ) { transitive = false } runtime ':searchable:0.5.4' }

Page 27: Jggug 2010 330 Grails 1.3 観察

ぷち、まとめチーム用GrailsプラグインリポジトリにMavenリポジトリを使用できる。Mavenリポジトリに対応した事によって公開しやすい。公式プラグインリポジトリの負荷軽減!?

ローカルivy2キャッシュに保持されるので、インストトールが早い。プラグインにグループ指定が可能なので、公式にアップされたプラグインの自分実装も管理しやすくなる。例 ’org.jggug:calendar:1.1.1‘

Page 28: Jggug 2010 330 Grails 1.3 観察

GORM関連

Page 29: Jggug 2010 330 Grails 1.3 観察

GORM関連GORMでのダーティーチェックGORM派生プロパティ対応ネームドクエリー対応に追加クライテリア

Page 30: Jggug 2010 330 Grails 1.3 観察

GORMでのダーティーチェックオブジェクトが変更されたかを確認するメソッド

フィールド毎の確認も可能

def item = Item.get(1)assert !item.isDirty() // ここではfalse

item.properties = paramsif (item.isDirty()) { //処理}

def item = Item.get(1)assert !item.isDirty() // ここではfalse

item.properties = paramsif (item.isDirty('name')) { //フィールドnameが変更されたときの処理}

Page 31: Jggug 2010 330 Grails 1.3 観察

GORM派生プロパティ対応GORM派生プロパティ対応

class Item { static mapping = { priceWithTax formula: 'price * 1.05' // 税込み価格 } String name Float price Float priceWithTax //...省略...

}

Page 32: Jggug 2010 330 Grails 1.3 観察

ネームドクエリー対応に追加クライテリアネームドクエリーを呼び出したときにクライテリアを追加できる

Grails-1.2での実装:よく使うクエリーに名前を付けて定義可能に。 static namedQueries = { shippedInThree { def now = new Date() lt 'shipped', now + 3 } }

呼び出し時に、ダイナミックファインダを使用可能。def list = Item.shippedInThree.list(max: 10, offset: 5)def list = Item.shippedInThree.count()def list = Item.shippedInThree.findAllByNameLike(’%自転車‘)

Page 33: Jggug 2010 330 Grails 1.3 観察

ネームドクエリー対応に追加クライテリア1.3での追加機能!クライテリアを記述可能

def list = Item.shippedInThree { and { lt 'price',20000F } }

Page 34: Jggug 2010 330 Grails 1.3 観察

その他

Page 35: Jggug 2010 330 Grails 1.3 観察

その他。joinタグ

本体のビルドをGradleに変更

GANTの更新 - 1.9.2へ更新インラインプラグインの処理

<g:join in="['Grails', 'Groovy', 'Gradle']" delimiter="_"/>

出力結果 Grails_Groovy_Gradle

% ./gradlew clean assemble

Page 36: Jggug 2010 330 Grails 1.3 観察

インライン・プラグインの処理インライン(インプレース)プラグイン1.2.xまでの実装では、package-pluginで生成されるplugin.xmlを参照してプラグインを認識する仕組み。

1.3からは、plugin.xmlが存在しなくても、インライン・プラグインを認識できるようになる。

|-- application.properties|-- grails-app|-- plugins| |-- exampleHongo ←プラグイン| | |--plugin.xml ← 1.2.x以前では、これが無いと注意される| |-- exampleShibuya ←プラグイン% grails run-app Welcome to Grails 1.2.1 - http://grails.org/ ..省略..

The inplace plugin at [/works/experiment/20100330/tokyo/plugins/exampleHongo] does not have a plugin.xml. Please run the package-plugin command inside the plugin directory.

Page 37: Jggug 2010 330 Grails 1.3 観察

まとめ主に1.2.x系の更新に対しての強化。 ・もっと依存性管理 ・GORMを強化Groovy-1.7.xに更新。 ・速度向上!JUnit 4 ・テスト能力向上!

Page 38: Jggug 2010 330 Grails 1.3 観察

もしも、動作がおかしくなったら

~/.ivy2を消す。 

 % rm -rf ~/.ivy2

Page 39: Jggug 2010 330 Grails 1.3 観察

告 知

Page 40: Jggug 2010 330 Grails 1.3 観察

見出しだけ日本語Grailsドキュメント公開

公式サイトhttp://grails.org/doc/latest

日本語 Japanese doc.http://grails.jp/doc/latest

Page 41: Jggug 2010 330 Grails 1.3 観察

ポール氏、来日

Page 42: Jggug 2010 330 Grails 1.3 観察

in 仙台

2010年4月24日(土) 14:00~17:30G*ワークショップ in 仙台

開催協力:東北デベ ロッパーズコミュニティ(TDC)

詳しくは http://www.jggug.org 参照

Page 43: Jggug 2010 330 Grails 1.3 観察

QCon Tokyo 20102010年4月19日(月)20日(火)

JGGUG代表 山田さんのセッション、GroovyコミッターのPaul Kingさんのセッション!

詳しくは http://qcontokyo.com

Page 44: Jggug 2010 330 Grails 1.3 観察

   

球根で

植えて花咲く

ぐれいるず

ここで一句

Page 45: Jggug 2010 330 Grails 1.3 観察

Thank you.

日本 Grails/Groovy ユーザーグループhttp://www.jggug.org/