SlideShare a Scribd company logo
1 of 47
Download to read offline
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

What's hot

第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会Mugen Fujii
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
GradleどうでしょうTakuma Watabiki
 
Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueDjangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueShinya Okano
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid uniqueAtsushi Odagiri
 
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介Yuki Fujisawa
 
PyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure CodingPyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure CodingGouji Ochiai
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたKoichi Sakata
 
Pylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイドPylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイドNozomu Kaneko
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Takashi EGAWA
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 
株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料leverages_event
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performancehirokiky
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例sohta
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020Rui Hirokawa
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIWataru MIYAGUNI
 
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017hirokiky
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Shinya Okano
 

What's hot (20)

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

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

G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxNobuhiro Sue
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会Shinya Kinoshita
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
ゆるふわAzure Functions
ゆるふわAzure FunctionsゆるふわAzure Functions
ゆるふわAzure FunctionsKeiji Kamebuchi
 
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころsbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころKazuhiro Hara
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門晃 遠山
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」Tsuyoshi Yamamoto
 
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...Sadao Tokuyama
 
Mongo db使ってみよう
Mongo db使ってみようMongo db使ってみよう
Mongo db使ってみようOda Shinsuke
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!Minoru Naito
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruikRui Kimura
 
Spring native について
Spring native についてSpring native について
Spring native についてTakamasa Mitsuji
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoTsuyoshi Yamamoto
 

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

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

More from Tsuyoshi Yamamoto

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

More from Tsuyoshi Yamamoto (20)

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

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

GrailsでSpringをGroovyにしよう!