Transcript
Page 1: 多治見IT勉強会 Groovy Grails

Groovy? Grails?2010.10.14 at Tajimi

def speaker = new Cast(name:”T.Yamamoto”,version:”TI-2010-10-14”)

Page 2: 多治見IT勉強会 Groovy Grails

Grails/Groovy ユーザ会

多治見設立と聞いて・・・?

Page 3: 多治見IT勉強会 Groovy Grails

Who??

• やまもとつよし(多治見出身・在住)

• twitter: @tyama• はてな id: mottsnite• ブログ↑• JGGUG名古屋支部長• 「Grails徹底入門」共著 9~11を執筆

Page 4: 多治見IT勉強会 Groovy Grails

Groovy

• GroovyはJavaVM用の動的プログラム言語。

• Javaとシームレスに統合

• JavaのAPIがそのまま使える!

• 言語仕様はJavaとほぼ同じ

• ちがいゎ: 動的な型付け。セミコロン等の省略。リス

ト、マップ、範囲、正規表現の特殊な構文。Javaクラ

スに便利な機能追加されてたり。など!

• クロージャ、メタプログラミング、DSL - ドメイン固有言語

Page 5: 多治見IT勉強会 Groovy Grails

インストール

• ダウンロード • http://groovy.codehaus.org/Download

• 解凍して環境変数設定• export GROOVY_HOME=/opt/groovy• export PATH=$GROOVY_HOME/bin:$PATH

Page 6: 多治見IT勉強会 Groovy Grails

Groovyのコードはこんな感じです。

def name='World'println "Hello $name!"

class Greet { def name Greet(who) { name = who[0].toUpperCase() +who[1..-1] } def salute() { println "Hello $name!" }}def g = new Greet('world') // create objectg.salute()

def list = ["Hello", "★", "World"]

list.each{ print it}

Page 7: 多治見IT勉強会 Groovy Grails

例えば、このようなJavaのコードimport java.util.Date;

public class Color { private Integer colorId; private String colorName; private String cyan; private String magenta; private String yellow; private String black; private String rgb; private String sysIpaddress; private Date sysLastmodified; private Integer sysUid; public Color(Integer colorId, String colorName, String cyan, String magenta, String yellow, String black, String rgb, String sysIpaddress, Date sysLastmodified, Integer sysUid) { this.colorId = colorId; this.colorName = colorName; this.cyan = cyan; this.magenta = magenta; this.yellow = yellow; this.black = black; this.rgb = rgb; this.sysIpaddress = sysIpaddress; this.sysLastmodified = sysLastmodified; this.sysUid = sysUid; } public Color() {} public Color(Integer colorId) { this.colorId = colorId;

} public Integer getColorId() { return this.colorId; } public void setColorId(Integer colorId) { this.colorId = colorId; } public String getColorName() { return this.colorName; } public void setColorName(String colorName) { this.colorName = colorName; } public String getCyan() { return this.cyan; } public void setCyan(String cyan) { this.cyan = cyan; } public String getMagenta() { return this.magenta; } public void setMagenta(String magenta) { this.magenta = magenta; } public String getYellow() { return this.yellow; } public void setYellow(String yellow) { this.yellow = yellow; } public String getBlack() {

return this.black; } public void setBlack(String black) { this.black = black; } public String getRgb() { return this.rgb; } public void setRgb(String rgb) { this.rgb = rgb; } public String getSysIpaddress() { return this.sysIpaddress; } public void setSysIpaddress(String sysIpaddress) { this.sysIpaddress = sysIpaddress; } public Date getSysLastmodified() { return this.sysLastmodified; } public void setSysLastmodified(Date sysLastmodified) { this.sysLastmodified = sysLastmodified; } public Integer getSysUid() { return this.sysUid; } public void setSysUid(Integer sysUid) { this.sysUid = sysUid; }}

Page 8: 多治見IT勉強会 Groovy Grails

Groovyだと、こんな感じにできる。省略!セミコロン

自動なので省略!ゲッタ・セッタコンストラクタ

自動 import!?

class Color { Integer colorId String colorName String cyan,magenta,yellow,black,rgb String sysIpaddress Date sysLastmodified Integer sysUid}

class Color { Integer colorId, sysUid String colorName,cyan,magenta,yellow,black,rgb,sysIpaddress Date sysLastmodified}

Page 9: 多治見IT勉強会 Groovy Grails

以前に使ったスライドから。

Page 10: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.java

public class HelloWorld { String name; public void setName(String name){ this.name = name; } public String getName(){ return name; } public String greet(){ return "Hello "+name; } public static void main(String[] args){ HelloWorld helloWorld = new HelloWorld(); helloWorld.setName("Groovy"); System.out.println(helloWorld.greet()); }}

拡張子変更

Page 11: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.groovy

public class HelloWorld { String name; public void setName(String name){ this.name = name; } public String getName(){ return name; } public String greet(){ return "Hello "+name; } public static void main(String[] args){ HelloWorld helloWorld = new HelloWorld(); helloWorld.setName("Groovy"); System.out.println(helloWorld.greet()); }}

セミコロントルツメ

Page 12: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.groovy

public class HelloWorld { String name public void setName(String name){ this.name = name } public String getName(){ return name } public String greet(){ return "Hello "+name } public static void main(String[] args){ HelloWorld helloWorld = new HelloWorld() helloWorld.setName("Groovy") System.out.println(helloWorld.greet()) }}

getterとsetterいなくなれ!

Page 13: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.groovy

public class HelloWorld { String name public String greet(){ return "Hello "+name } public static void main(String[] args){ HelloWorld helloWorld = new HelloWorld() helloWorld.setName("Groovy") System.out.println(helloWorld.greet()) }} メインなんて外にいっちゃえ!

Page 14: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.groovy

public class HelloWorld { String name public String greet(){ return "Hello "+name }}

HelloWorld helloWorld = new HelloWorld()helloWorld.setName("Groovy")System.out.println(helloWorld.greet())

publicとかもいぢるSystem.outもいらんよ

Page 15: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.groovy

class HelloWorld { String name def greet(){ return "Hello "+name }}

def helloWorld = new HelloWorld()helloWorld.setName("Groovy")println(helloWorld.greet()) わかりやすく!

setとか無くていいメソッドの()省略

Page 16: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.groovy

class HelloWorld { String name def greet(){ return "Hello "+name }}

def helloWorld = new HelloWorld()helloWorld.name = "Groovy"println helloWorld.greet()

returnもいらない!+nameも””の中に$nameにして!

Page 17: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.groovy

class HelloWorld { String name def greet(){ "Hello $name"}}

def helloWorld = new HelloWorld()helloWorld.name = "Groovy"println helloWorld.greet()

デフォルトコンストラクタも勝手にできるよ!

Page 18: 多治見IT勉強会 Groovy Grails

Java から Groovy えっ!?HelloWorld.groovy

class HelloWorld { String name def greet(){ "Hello $name"}}

def helloWorld = new HelloWorld(name: "Groovy")println helloWorld.greet()

Page 19: 多治見IT勉強会 Groovy Grails

GroovyではJavaコードの98%くらいは、そのまま動

くので、Javaプログラマに言語を覚えるコストがあま

りかからない。

Groovyな記述をすれば余分なものが無くなって見や

すくわかりやすい。

Java開発時に小道具として使える。

Page 20: 多治見IT勉強会 Groovy Grails

例えば、

• JavaのAPIを簡単に試す• @Grabでライブラリを取得して実行。

@Grab('com.google.code.jcouchdb:jcouchdb:1.0.1-1')import org.jcouchdb.db.DatabaseDatabase db = new Database(    "localhost", "example_xmldo"  )db.createDocument(    [name:'やまもと',comment:'こんにちわ!'])

Page 21: 多治見IT勉強会 Groovy Grails

Groovyに関連した技術。

G*(アスタリスク)

Page 22: 多治見IT勉強会 Groovy Grails

CIツールHudsonの中にも!

これこれ!

Page 23: 多治見IT勉強会 Groovy Grails

ビルド

Gantxmlを書かずにAntを使いこなせ!

Gradle Maven、Ivy、Ant等を統合したGroovyなビルドツール

Page 24: 多治見IT勉強会 Groovy Grails

デスクトップアプリ

Griffon GUIソフトをライトに開発するJavaフレームワーク!

Page 25: 多治見IT勉強会 Groovy Grails

Google AppEngine for Java

Gaelyk GroovyでGAE/Jを簡単に!GroovyのGAE/J用軽量開発ツールキットです。GAE/Jの各種サービスも簡単操作!

mailService.send to: '[email protected]', subject: 'Hello World', htmlBody: '<bold>Hello</bold>'

Page 26: 多治見IT勉強会 Groovy Grails

Gaelyk

データストアAPIimport com.google.appengine.api.datastore.Entity

def person = new Entity("person")person['name'] = "やまもとつよし"person.age = 18

println person.nameperson.save()

def q = new Query('person')def list = datastoreService.prepare(q).asList(

    Builder.withLimit(20).offset(0) )person.delete()

Page 27: 多治見IT勉強会 Groovy Grails

そして。

Page 28: 多治見IT勉強会 Groovy Grails

Webアプリケーションで、

Grails

Page 29: 多治見IT勉強会 Groovy Grails

Web開発

29

Page 30: 多治見IT勉強会 Groovy Grails

Web開発Web開発一年生:Web開発って簡単ですかぁ?

先生:簡単です。でも、学ぶ事がいっぱいです。HTML,CSSもちろんJavaも。HTTPとかCGIとかサーバの知識とか、様々なAPIとか、設計とか他にもいろいろ。

Web開発一年生:orz 挫折。30

Page 31: 多治見IT勉強会 Groovy Grails

Web開発

IDEBuild Tool

Servlet

Struts

Wicket

MySQL

PostgreSQL

SpringSeaser2

DI

AJAX

Javascript

XML

Maven

Apache

ORM

Hibernate

Ant

HTML

WS

JUnit

UML

REST

TDD

MDD

Flex

31

HTML5

CSS3

Page 32: 多治見IT勉強会 Groovy Grails

Grails

• 公式サイト http://grails.org• Web開発用のフルスタックフレームワーク• 開発プラットフォームGrails, the Platform (DGG2引用)

• Groovy,Java,Spring,Hibernate等を使ってアジャイルに開発!

Page 33: 多治見IT勉強会 Groovy Grails

Grails

• ライトに開発。• 従来のJavaEEと比較すると、気軽に開発ができる。

• しっかり動かす。• 最終的には、JavaEEとしてしっかり運用。• Javaアプリケーションサーバで動く。

Page 34: 多治見IT勉強会 Groovy Grails

Grails

• フルスタック。• 開発に必要な物が、揃っているので、Grailsを設定すれば直ぐ使える。

• 通常は、DB、開発環境、アプリケーションサーバ

等必要。

Page 35: 多治見IT勉強会 Groovy Grails

Grails

• オープンソース+信頼• Grails 自体はオープンソース• コミュニティが活発。(日本以外!?)

• Grails 開発・メンテナンスは、• VMware傘下のSpringSource社。

Page 36: 多治見IT勉強会 Groovy Grails

Grailsの構成図

GrailsGrailsGrails GroovySpring Hibernate SiteMesh

Groovy

基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)JVMJVMJVMJVM

Page 37: 多治見IT勉強会 Groovy Grails

Quick Start !!• ダウンロードして 解凍!• http://grails.org/Download

• 環境変数設定• export GRAILS_HOME=/opt/grails-1.3.5• export PATH=$PATH:$GRAILS_HOME/bin

Page 38: 多治見IT勉強会 Groovy Grails

直ぐに始められる開発各種開発用コマンドターゲットプロジェクト作成、各種コード生成、アプリケーション起動等をコマンドターゲットで行う。

メモリ上で動くデータベースHSQLDBがバンドルされている。ファイル動作も可能。

サーブレットコンテナ組込Tomcatがバンドルされている。リロードできる。

スカッフォルド ベースになるコードを生成 (動的 or 静的)簡単なCRUDのみで良いマスタはこれでも充分。

% grails run-app

38

Page 39: 多治見IT勉強会 Groovy Grails

Quick Start !!基本

grails create-app myapp

cd myapp

grails create-domain-class chat

ドメインクラス編集

grails create-controller chat

コントローラに “def scaffold = true” 追記

内容がまとまったら

grails generate-all chat

そして調整!

Page 40: 多治見IT勉強会 Groovy Grails

コードの内容class Chat { String message Date dateCreated Date lastUpdated static constraints = { message nullable:false dateCreated() lastUpdated() }}

class ChatController { static scaffold = true}

Page 41: 多治見IT勉強会 Groovy Grails

時間があれば。デモします。

Page 42: 多治見IT勉強会 Groovy Grails

Q&A


Recommended