GrailsでSpringを
Groovyにしよう!
JSUG+JGGUG合同勉強会
2009年6月24日
def speaker = new Cast(name:”T.Yamamoto”,version:”JSG2UG-2009-06-24”)
自己紹介
名前:山本 剛 (やまもとつよし)
所属:株式会社ニューキャスト
組版屋、印刷系Webアプリ開発など。
案件は90%Grailsを使ってます。
JGGUG(じぇいがぐ) 名古屋支部 担当です。
「Grails徹底入門」9-11章を書きました。
Grails Acegi Plugin作った人。
ブログ
http://d.hatena.ne.jp/mottsnite/
おさらい
Grailsとは?
よく聞く説明
「Groovyで実装されたRuby on Rails」!?
  
Java+Groovyで実装された、CoC、DRYの概念を取り
入れた(‘RoR’にインスパイアされた)、Webアプリケーション開発環境。
基礎はSpring,Hibernate等を使用している。
そして、それらをシンプルに活用できる環境。
Grails, the Platform(DGG2引用)
合ってるようで間違い
Grailsの構成図
GrailsGrailsGrails
Groovy
Spring Hibernate SiteMesh
Groovy
基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)
JVMJVMJVMJVM
Hibernate:ORマッピング
Spring: DIコンテナ・多機能なラッパーフレームワーク
SiteMesh:レイアウトフレームワーク
Jetty: サーブレットコンテナ
HSQLDB:ピュアJavaなデータベース
2.5.6
3.3.1
2.4
1.5+
1.6.3
デモ
grails create-app demo
cd demo
grails create-domain-class Book
grails create-controller Book
grails run-app
今日はこれやりません
本日のテーマ!
GrailsとSpringの関係
∼BeanBuilderへたどりつくまで。
BeanBuilder(ビーンビルダ)解説!←本日のメイン
GrailsでSpringをGroovyに使う!
GrailsにSpringビーンを追加してみる。
SpringでGrailsを使ってGroovyに!
applicationContext.groovy !?!? (サンプル解説)
GORMをSpringで使う!(サンプル解説)
「GrailsでSpringをGroovyにしよう!」
BeanBuilderって?
いろいろ話す前に、まずはザックリこんな感じ。
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="127.0.0.1"/>
</bean>
<bean id="mailMessageMe" class="org.springframework.mail.SimpleMailMessage">
<property name="from" value="tyam@xmldo.jp"/>
</bean>
<bean id="mailMessageYou" class="org.springframework.mail.SimpleMailMessage">
<property name="from" value="you@xmldo.jp"/>
</bean>
mailSender(org.springframework.mail.javamail.JavaMailSenderImpl) {
host = '127.0.0.1'
}
def map = ["Me":"tyam@xmldo.jp","You":"you@xmldo.jp"]
map.each{k,v->
"mailMessage${k}"(org.springframework.mail.SimpleMailMessage) {
from = v
}
}
ダイナミックにしてみたり!
何故,
BeanBuilder
!?
GrailsとSpringの関係
今さら言うまでもなく、
Grailsの中はSpringがいっぱい!
基礎をSpringフレームワークが支えています。
Grailsには、Springビーンを簡単に追加する仕組みがあり
ます。 → 「GrailsでSpringをGroovyに使う!」で話します。
先ずは関係を知るために簡単な所から見てみましょう。
PROJECT_HOME/src/templates/war/web.xml
PROJECT_HOME/web-app/WEB-INF/
applicationContext.xml 手 順
grails create-app demo
cd demo
grails install-template
src/templates/war/web.xml
<web-app version="2.4"
...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
...
<servlet>
<servlet-name>grails</servlet-name>
<servlet-class>
org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
...
applicationContext!
DispatcherServlet!
web-app/WEB-INF/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
...>
<bean id="grailsApplication"
class="org.codehaus.groovy.grails.commons.GrailsApplicationFactor
yBean">
<description>Grails application factory bean</description>
<property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
<property name="grailsResourceLoader"
ref="grailsResourceLoader" />
</bean>
...
</beans>
applicationContext.xmlの中身
grailsApplication - GrailsApplicationFactoryBean
pluginManager - GrailsPluginManagerFactoryBean
pluginMetaManager - DefaultPluginMetaManager
grailsConfigurator - GrailsRuntimeConfigurator
grailsResourceLoader -
GrailsResourceLoaderFactoryBean
grailsResourceHolder - GrailsResourceHolder
characterEncodingFilter - CharacterEncodingFilter
その中で、最も重要なのは、
grailsApplication
GrailsApplicationFactoryBean
GrailsApplicationFactoryBean
Grailsの最初のバージョンからあります。
GroovyファイルからGrailsアプリケーション用オブジェ
クトを生成するファクトリビーン。
リソースが読みこまれ、ここから様々なGrailsオブジェク
トが出荷されます。
grailsApplication
grails-app以下のgroovyファイル達
grails-app/domin/Book.groovy
Author.groovy
grails-app/service/SomeService.groovy
HogeService.groovy
リソースロード
ここから様々な情報を読みこんで、
Grailsで使うビーンの生成をしています。
grailsApplicationとビーン生成の関係
この関係を調べることでBeanBuilderって何か解るかも!
いろいろソースを探ってたら
BeanBuilder誕生の理由?が解った気がしたから・・・
但し、推測
Grailsの裏側解説(簡易版)
groovy
groovy
groovy
groovy
groovy
groovy
groovy
groovy
grails-appの中
grails起動
リソースロード
grailsApplicationに収集
ルールに基づいて情報を読みこむ
コンテキスト完成
ビーンが生成される
歴史をさかのぼると、v0.2時代はGrailsのGroovy(CoC)
な部分は複雑だった。
Grailsの裏側解説(簡易版)
GrailsPlugin
grailsApplication
grails-app以下のgroovyファイル達
grails-app/domin/Book.groovy
Author.groovy
grails-app/service/SomeService.groovy
HogeService.groovy
リソースロード
・ロードされたリソースをgrailsApplicationから用途別に収集
・クラス名とかプロパティ内容を元に
  ファクトリビーン(RootBeanDefinition)や、他のビーンとの関連等を生成
・生成されたビーン等をapplicationContextに登録する。
※"applicationContext.registerBeanDefinition()"する
少し歴史など。
applicationContext.xmlの内容ヒストリー
grailsApplication
grailsResourceHolder
characterEncodingFilter
0.1
pluginMetaManager
0.6 -> 現在
grailsResourceLoader
domainInjector
0.3
injectionOperation
pluginManager
0.4 0.4.2-0.5.6
grailsConfigurator
BeanBuilder実装
ユーザ拡張可能な、
Plugin実装
内部的な
Plugin実装
0.2
Grailsでのビーン生成と、BeanBuilder誕生まで
CoCを実現するために。
0.1時代。- SpringConfigクラスで全てを行っていた。
0.2-0.3.1時代。
プラグインの原型が登場。
この時代は、インターフェイスGrailsPluginを実装したクラスの
doWithGenericApplicationContext()の中で、
RootBeanDefinitionをGenericApplicationContextに
registerBeanDefinition()してた。(大変そう!)
0.4以降。
ユーザ拡張可能なプラグインの実装。
この時に、ビーンの追加も容易になるように
BeanBuilderってのが実装された。
簡単にまとめると
Grailsに柔軟な拡張性を実装
0.4からのGrailsプラグイン
深い所:ビーン生成などは、
0.2からの仕組みだと敷居が高くて大変だね!
ぢゃあ、ビーンも解りやすく
ぐるーびぃーに!DSLに!
BeanBuilder誕生!
BeanBuilder
実装クラス:grails.spring.BeanBuilder
ApplicationContextを構築するための
DSL(Domain Specific Language)です。
直感的でわかりやすくSpringビーンを定義できます。
Groovyプログラムを使用して、動的にビーンを定義で
きます。
Grailsアプリケーション以外でも使用できるように設計
されています。
BeanBuiler:単独での使い方
Grailsアプリケーション以外でも
使用できるように設計されているので。
import org.springframework.context.ApplicationContext
import grails.spring.BeanBuilder
// BeanBuilderの生成
def builder = new BeanBuilder()
builder.beans {
// ここに定義を書く!
}
// ApplicationContextの生成
ApplicationContext ctx = builder.createApplicationContext()
BeanBuiler基本書式
基本!
someBean(MySomeBean,"引数1",2 ,[3]){bean->
bean.singleton = false
bean.factoryMethod = "getInstance"
fieldOne = "JGGUG"
anotherBean = ref("anotherBean",true)
}
id
クラス名 引数達
ビーン構成用インスタンス
AbstractBeanDefinition
<bean . . . factoryMethod="getInstance"/>
などのアトリビュートが定義
プロパティ定義
ビーン参照
クロージャの最初の引数は AbstractBeanDefinition
org.springframework.beans.factory.support.
AbstractBeanDefinition
  → ビーン構成用インスタンス
    <bean>のdestroy-method等のアトリビュート
設定方法
“-”をCamelCaseにする。
Ex. destroy-method → destroyMethod
■Factoryメソッドの使用例
withFactoryMethod(BeanWithFactoryMethod){bean->
bean.factoryMethod = "getInstance"
bean.scope = "prototype"
person = "tyama"
}
■Bean定義の戻り値はビーン構成用インスタンスなので、
戻り値の変数に指定もできます。
def somebean = withFactoryMethod(BeanWithFactoryMethod){
person = "tyama"
}
somebean.factoryMethod = "getInstance"
somebean.scope = "prototype"
ビーン構成用インスタンス
AbstractBeanDefinition
ビーン構成用インスタンス
AbstractBeanDefinition
ファクトリビーン
ビーンスコープ
ビーンスコープ - 基本は全てシングルトンです。
prototype
flash
flow
conversation
session
singleton
withFactoryMethod(BeanWithFactoryMethod){bean->
bean.factoryMethod = "getInstance"
bean.scope = "prototype"
person = "tyama"
}
スコープ
ビーンの参照
ApplicationContextで管理されている他のビーンへの参照
xml定義での <ref bean="anotherBean"/>
ref("anotherBean") と書きます。
ref("anotherBean",true) と指定すると
親ApplicationContextのみを参照します。
■ビーンの参照
beanA(BeanA){
name="bean a"
}
■ref("...")で指定する
beanB(BeanB){
name="bean b"
parent=ref("beanA")
}
■ref("...")は、省略可能
beanBB(BeanB){
name="bean b"
parent=beanA
}
■ref("...",true)第2引数にtrueを指
定して親ApplicationContext内のみ
を参照
beanBParent(BeanB){
name="bean b"
parent=
ref("beanAParent",true)
}
Anonymous Inner Beans
匿名インナービーン
exampleInner(ExampleBean2){
bean = {ExampleBean b ->
name="My First Inner Bean"
num=24
}
}
■Factory Beanを使った例
exampleInnerBeanFactory(ExapleBeanFactory)
exampleInnerUntyped(ExampleBean2){
bean = {bean->
bean.factoryBean = "exampleInnerBeanFactory"
bean.factoryMethod = "newInstance"
name="example BeanFactory"
num=24
}
}
Beanの継承、抽象ビーン
<bean id="exampleAbstractBeanNoClass" abstract="true">
<property name="name" value="abstract bean"/>
<property name="num" value="20"/>
</bean>
<bean id="exampleNoCls" parent="exampleAbstractBeanNoClass"
class="ExampleBean">
<property name="name" value="My First Bean"/>
</bean>
<bean id="exampleAbstractBeanWiCn" abstract="true" class="ExampleBean">
<property name="name" value="abstract bean"/>
<property name="num" value="23"/>
</bean>
<bean id="exampleWiCn" parent="exampleAbstractBeanWiCn">
<property name="name" value="My First Bean"/>
</bean>
Beanの継承、抽象ビーン
exampleAbstractBeanNoClass {
name="abstract bean"
num = 20
}
(SomeClass)クラスの指定を無くす
exampleNoCls(ExampleBean){ bean ->
bean.parent = exampleAbstractBeanNoClass
name = "My First Bean"
} bean.parentに指定する。
exampleAbstractBeanWiCn(ExampleBean){ bean ->
bean.'abstract' = true
name="abstract bean"
num = 23
}
bean.‘abstract’=trueを指定
動かしてみる
Grails徹底入門10章を参考に!
Gantは1.6.1 Binary, standalone installationを使用
執筆時と一部仕様が変わっているので修正。
build.gantの中の Ant → ant に変更。
libの中身を変更
commons-logging-1.1.jar
grails-bootstrap-1.1.1.jar
grails-spring-1.1.1.jar
groovy-all-1.6.3.jar
spring-2.5.6.jar
デモ
BeanBuilderの
利用方法はおさえたので
Grailsで
Springビーンを
Groovyに使う!
GrailsでSpringビーンをGroovyに使う!
GrailsアプリケーションにSpringビーンを追加。
正しい方法は3つ
resources.xmlに記述。
resources.groovyにBeanBuilderで記述。
Grailsプラグインにしてしまう。
Grailsのプロジェクト内で定義されたビーンを使うには
def someBean と宣言するだけでOK.
resources.xml
grails-app/conf/spring/resources.xmlに
xmlでのビーン定義をそのまま書く。
デモ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

 <bean id="exampleBean" class="bean.ExampleBean">

 <constructor-arg value="hello exampleBean"/>

 <property name="name" value="My First Bean" />

 <property name="num" value="19" />

 </bean>
</beans>
package bean
class ExampleBean {
def name
def num
ExampleBean(){}
ExampleBean(String arg){println arg}
String toString(){
"ExamplBean: $name $num"
}
}
resources.groovy
grails-app/conf/spring/resources.groovyに
BeanBuilderで記述。
デモ
package bean
class ExampleBean {
def name
def num
ExampleBean(){}
ExampleBean(String arg){println arg}
String toString(){
"ExamplBean: $name $num"
}
}
beans = {
exampleBean(ExampleBean,"hello exampleBean"){
name = "My First Bean"
num = 19
}
}
実装変更に使える
grails-app/conf/spring/resources.groovy( or xml)で
同名称(id)のビーンが追加された場合は、
内容が上書きされます。
例えば、既に定義されている “dataSource”ビーンの
実装クラスを変えて定義し直したい場合。
dataSource(com.mchange.v2.c3p0.ComboPooledDataSource) { bean ->
bean.destroyMethod = "close"
driverClass = "org.hsqldb.jdbcDriver"
jdbcUrl="jdbc:hsqldb:hsql://localhost:9001"
user="sa"
password=""
}
定義したIDが同名のビーン内容が上書きされる
ここを変えてみた
GrailsプラグインでdoWithSpring
再利用しちゃいましょう!
class JggugBeanGrailsPlugin {
// the plugin version
def version = "0.1"
....
def doWithSpring = {
// TODO Implement runtime spring config (optional)
exampleBean3(bean.ExamplePluginBean,"hello plugin exampleBean3"){
name = "My 3rd Bean"
num = 100
}
}
....
}
プラグインの細かい話はJGGUGの勉強会「G*」で!
SpringでGrailsを
使ってGroovyに!
applicationContext.groovy!?
Grailsのソースリポジトリにコッソリ!?置いてある。
grails-sample/standalone-beanbuilder 若干古いです。
内容
<context-param>のcontextConfigLocationに
/WEB-INF/applicationContext.groovyを指定
<context-param>のcontextClassに
GrailsWebApplicationContextを指定
あとはビーンビルダで定義するだけ。
ソースの中を見てみましょう
GrailsのGORMを使う!
スタンドアロンでGORMが使用可能!
Spring MVCでのサンプル、
GRAILS_HOME/samples/petclinic-mvcを参照
applicationContext.xmlにデータソースと、
<gorm:sessionFactory/>の定義。
<gorm:sessionFactory base-package="org.grails.samples"
data-source-ref="dataSource"
message-source-ref="messageSource">
<property name="hibernateProperties">
<util:map>
<entry key="hibernate.hbm2ddl.auto"
value="update"/>
</util:map>
</property>
</gorm:sessionFactory>
import grails.persistence.Entity
@Entity
class Person {
String name
...
}
Person.groovy
まとめ
Annotationがあるぢゃないか!? (これは言わない!)
BeanBuilderを使うと
Grails → Springビーン利用は簡単ですよ。
そして柔軟(ダイナミックだし)なので、いろいろSpringビーン
の活用幅がひろがりそう。
単独で動作するので、単純なビーンのテストとかに使える?
Grailsから派生したGORM
Spring → Grailsのコンポーネント利用
Springの内部もぐるーびぃーになる。
みなさんの実運用でどうなのか解りませんが・・
Grailsでドメイン設計して、
ほぼ,そのままSpringで利用可能?
将来!?次期バージョンでどうなる?
現在のGrailsでは、Spring 2.5.6なので、3.0に更新したら
どうなっていくのか!?
Grails-1.2から、Spring-3になるそうです。
Graemeさんがtwitterで、いろいろつぶやいてました。
Q&A
お手柔らかに、お願いします。(T.T)
濃い話しはNGで・・・
参考資料
Grails徹底入門
The Definitive Guide to Grails 2nd
Grails-0.1∼1.2のソースコード
Thank You!
合同勉強会、またやりたいですね。
JSUGの勉強会も参加してみたいです!
みなさまの、
  JGGUGへの参加
    お待ちしています。

More Related Content

PPTX
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
PDF
What makes Geb groovy?
PDF
インフラ自動化とHashicorp tools
PDF
Djangoフレームワークの紹介
PDF
Use JWT access-token on Grails REST API
PPTX
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
PDF
concrete5デザインカスタマイズに必要なPHPの知識
PDF
バージョン管理
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
What makes Geb groovy?
インフラ自動化とHashicorp tools
Djangoフレームワークの紹介
Use JWT access-token on Grails REST API
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
concrete5デザインカスタマイズに必要なPHPの知識
バージョン管理

What's hot (20)

PPT
第5回勉強会
PDF
Gradleどうでしょう
PDF
Djangoエンジニアの観点から見たHue
PDF
What makes pyramid unique
PDF
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
PDF
PyCon APAC 2013 Web Secure Coding
PDF
Djangoフレームワークの紹介
PPTX
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
PDF
Pylons ユーザのための Pyramid 移行ガイド
PDF
Tokyo GTUG Bootcamp2010
PDF
Jjug 20140430 gradle_basic
PDF
株式会社インタースペース 清水様 登壇資料
PDF
Pycon2014 django performance
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
プログラミング言語Clojureのニャンパスでの活用事例
PPTX
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
PDF
PHPの今とこれから2020
PDF
あなたの安心を高速に守る Container-based CI
PDF
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
PDF
Djangoフレームワークのユーザーモデルと認証
第5回勉強会
Gradleどうでしょう
Djangoエンジニアの観点から見たHue
What makes pyramid unique
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
PyCon APAC 2013 Web Secure Coding
Djangoフレームワークの紹介
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Pylons ユーザのための Pyramid 移行ガイド
Tokyo GTUG Bootcamp2010
Jjug 20140430 gradle_basic
株式会社インタースペース 清水様 登壇資料
Pycon2014 django performance
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
プログラミング言語Clojureのニャンパスでの活用事例
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
PHPの今とこれから2020
あなたの安心を高速に守る Container-based CI
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
Djangoフレームワークのユーザーモデルと認証
Ad

Similar to GrailsでSpringをGroovyにしよう! (20)

PDF
G*workshop 2011/11/22 Geb+Betamax
PDF
第8回 福岡西区勉強会
PPTX
TDC20111031_Groovy_Geb
PDF
FxUG in Toyama - ASphalt2 container -
PDF
FxUG in Toyama - ASphalt2 container -
PDF
ゆるふわAzure Functions
PDF
Grailsのススメ(仮)
PDF
Jsug 20160422 slides
PDF
sbtマルチプロジェクトビルドの使いどころ
KEY
Behat+Symfony2ではじめるBDD超入門
PDF
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
PPT
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
PDF
G * magazine 0
PPTX
Mongo db使ってみよう
PDF
Ec cube開発合宿 プラグインセミナー
PDF
de:code 2019 Cloud トラック 総まとめ!
PPTX
130329 perl casual_ruik
PDF
Spring native について
PDF
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
PDF
Hudson using Groovy #jggug
G*workshop 2011/11/22 Geb+Betamax
第8回 福岡西区勉強会
TDC20111031_Groovy_Geb
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
ゆるふわAzure Functions
Grailsのススメ(仮)
Jsug 20160422 slides
sbtマルチプロジェクトビルドの使いどころ
Behat+Symfony2ではじめるBDD超入門
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
G * magazine 0
Mongo db使ってみよう
Ec cube開発合宿 プラグインセミナー
de:code 2019 Cloud トラック 総まとめ!
130329 perl casual_ruik
Spring native について
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Hudson using Groovy #jggug
Ad

More from Tsuyoshi Yamamoto (20)

PDF
JJUG CCC 20150411 grails3 Spring-boot
PDF
Groovy Grails eXchage 2014 報告
PDF
JGGUG grails-spring-boot
PDF
Grailsx@London 2011 報告
PDF
Grails 2.0.0.M1の話
PDF
Grails 1.4.0.M1 メモLT
PDF
G * magazine 1
PDF
JGGUG 2011-02 LT
PDF
Grailsx@ロンドンへ行ってきた報告。
PDF
多治見IT勉強会 Groovy Grails
PDF
G*ワークショップ in 仙台 Grails(とことん)入門
PDF
Jggug 2010 330 Grails 1.3 観察
PDF
groovyプラプラとか「はやい、はやいよ」
PDF
第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」
PDF
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
PDF
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
PDF
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
PDF
Groovy ネタ NGK 忘年会2009 ライトニングトーク
PDF
G*なクラウド 雲のかなたに ショートバージョン
PDF
JGGUG Camp 2009 いっぽう熱海では、
JJUG CCC 20150411 grails3 Spring-boot
Groovy Grails eXchage 2014 報告
JGGUG grails-spring-boot
Grailsx@London 2011 報告
Grails 2.0.0.M1の話
Grails 1.4.0.M1 メモLT
G * magazine 1
JGGUG 2011-02 LT
Grailsx@ロンドンへ行ってきた報告。
多治見IT勉強会 Groovy Grails
G*ワークショップ in 仙台 Grails(とことん)入門
Jggug 2010 330 Grails 1.3 観察
groovyプラプラとか「はやい、はやいよ」
第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Groovy ネタ NGK 忘年会2009 ライトニングトーク
G*なクラウド 雲のかなたに ショートバージョン
JGGUG Camp 2009 いっぽう熱海では、

GrailsでSpringをGroovyにしよう!