多治見it勉強会 groovy grails

Post on 28-Jan-2015

116 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

地元、多治見市で、Groovy/grailsな話をしてきた。

TRANSCRIPT

Groovy? Grails?2010.10.14 at Tajimi

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

Grails/Groovy ユーザ会

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

Who??

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

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

Groovy

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

• Javaとシームレスに統合

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

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

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

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

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

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

インストール

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

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

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}

例えば、このような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; }}

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}

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

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()); }}

拡張子変更

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()); }}

セミコロントルツメ

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いなくなれ!

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()) }} メインなんて外にいっちゃえ!

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もいらんよ

Java から Groovy えっ!?HelloWorld.groovy

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

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

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

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にして!

Java から Groovy えっ!?HelloWorld.groovy

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

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

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

Java から Groovy えっ!?HelloWorld.groovy

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

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

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

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

りかからない。

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

すくわかりやすい。

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

例えば、

• 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:'こんにちわ!'])

Groovyに関連した技術。

G*(アスタリスク)

CIツールHudsonの中にも!

これこれ!

ビルド

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

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

デスクトップアプリ

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

Google AppEngine for Java

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

mailService.send to: 'foobar@gmail.com', subject: 'Hello World', htmlBody: '<bold>Hello</bold>'

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()

そして。

Webアプリケーションで、

Grails

Web開発

29

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

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

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

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

Grails

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

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

Grails

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

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

Grails

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

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

等必要。

Grails

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

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

Grailsの構成図

GrailsGrailsGrails GroovySpring Hibernate SiteMesh

Groovy

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

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

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

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

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

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

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

% grails run-app

38

Quick Start !!基本

grails create-app myapp

cd myapp

grails create-domain-class chat

ドメインクラス編集

grails create-controller chat

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

内容がまとまったら

grails generate-all chat

そして調整!

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

class ChatController { static scaffold = true}

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

Q&A

top related