85
G* JGGUG japan grails/groovy user group

G*なクラウド 雲のかなたに ショートバージョン

Embed Size (px)

DESCRIPTION

Groovy Grailsをクラウドで活用

Citation preview

Page 1: G*なクラウド 雲のかなたに ショートバージョン

G*なクラウド

 まわりを見渡せば、クラウドの話で持ちきりです。様々なフレームワークがクラウドに対応するなか、もちろんG*なクラウド活用法も! このスライドでは、Groovy・Grailsでのクラウドを紹介・解説します。

JGGUGjapan grails/groovy user group

Page 2: G*なクラウド 雲のかなたに ショートバージョン

G*なクラウド─ 雲のかなたに ─

アスタ

2009/11/19 @JSUG JGGUG 2009/11

def speaker = new Cast(name:”T.Yamamoto”,version:”Sp-2009-11-19”)

ショートバージョン

JGGUGjapan grails/groovy user group

Page 3: G*なクラウド 雲のかなたに ショートバージョン

名前:山本 剛 (やまもとつよし)所属:株式会社ニューキャストテクニカルDTP。DTP、組版、印刷系向けWebアプリ開発など。

Web案件の80%はGrailsを使用。JGGUG(じぇいがぐ) 名古屋支部長です。「Grails徹底入門」9-11章を書きました。 Grails Acegi Plugin の中の人だった。

http://d.hatena.ne.jp/mottsnite/twitter @tyama

自己紹介 JGGUGjapan grails/groovy user group

Page 4: G*なクラウド 雲のかなたに ショートバージョン

G*(アスタリスク)

JGGUGjapan grails/groovy user group

Page 5: G*なクラウド 雲のかなたに ショートバージョン

G*(アスタリスク)って何?JGGUGでは、Groovyに関連する技術、Groovyはもちろんのこと、Grails - JEEフレームワークGriffon - デスクトップアプリ用フレームワークGant、Gradle - ビルドツール等のことを、

G*(アスタリスク)とよびます。

JGGUGjapan grails/groovy user group

Page 6: G*なクラウド 雲のかなたに ショートバージョン

G* と クラウド

Page 7: G*なクラウド 雲のかなたに ショートバージョン

G*(アスタ)をクラウドへ基本的にJEEの動くクラウドであれば動作可能。注目のポイントは、大きく分けると3種類AWS(EC2,S3)ベースMorph AppSpaceStaxCloud Foundry Cloud Foundry (EC2)Google App Engine for JavaGrails+app-engineプラグインGAE/Jでライトに開発 Gaelyk

GrailsにやさしいPaaS。

本家運営!

Page 8: G*なクラウド 雲のかなたに ショートバージョン

GrailsにやさしいPaaS

デプロイツールが提供されている。Morph AppSpaceStax

Page 9: G*なクラウド 雲のかなたに ショートバージョン

Morph AppSpace概要 サイト http://www.mor.ph/PaaSです。キューブ(Cubes)という単位で管理。Cubes - (Webサーバとアプリケーションサーバを組み込んだ仮想マシン単位)インフラはAWS。(EC2,S3)料金:2 Cubes/ DB:10GB データ転送:30GB ストレージ:20GB $1/日 $31/月料金表 http://www.mor.ph/information_pricing2009年5月から有料契約をしていないと無料な開発版が使えない。

Page 10: G*なクラウド 雲のかなたに ショートバージョン

Morph AppSpaceツールなどWebベースのツールで管理がおこなえる。

Grailsをデプロイする公式サポートツールも存在する。現在 Grails-1.0.2 - v1.1.1に対応。

デプロイのサポートをするGrailsプラグイン。 http://grails.org/MorphDeploy+Plugin※たぶん古いのでメンテが必要。

Page 11: G*なクラウド 雲のかなたに ショートバージョン

Morph AppSpaceツールのダウンロード

Page 12: G*なクラウド 雲のかなたに ショートバージョン

ツールの使い方ツール設定ダウンロードしたツールを解凍grails-svn-morph-deployerファイルをGRAILS_HOME/binにコピーGRAILS_HOME/libにgrails-morph-deployer.jarをコピーGRAILS_HOME/scriptsにMorphDeploy.groovyをコピーデプロイ管理画面よりダウンロードしたmorph_deploy.propertiesをGrailsプロジェクトの直下にコピーコマンド grails morph-deploy を実行自動的にコンパイルしてwarを作りデプロイしてくれます。

Page 13: G*なクラウド 雲のかなたに ショートバージョン

Staxhttp://www.stax.net/EC2をインフラにJEEの実行環境を提供。現在はベータ提供中なので無料。デプロイ用のSDKを提供している。Grails用の解説もある。http://wiki.stax.net/w/DBはStax MySQLデータベースを使用する。※MySQL 5.0.x (ローカルからもアクセス可能)

Page 14: G*なクラウド 雲のかなたに ショートバージョン

Stax管理コンソール

Page 15: G*なクラウド 雲のかなたに ショートバージョン

StaxSDKセットアップ公式ドキュメントより。http://wiki.stax.net/w/index.php/SDK

環境変数設定

Stax SDKのツールはgroovyで実装されています。※ただし、groovy-1.6.0

# curl -L http://stax-downloads.s3.amazonaws.com/sdk/stax-sdk-0.3.6-dist.zip > stax_sdk.zip

# unzip stax_sdk.zip

# rm stax_sdk.zip

# cd stax-sdk-0.3.6

export STAX_HOME=/opt/stax-sdk-0.3.6export PATH=$PATH:$STAX_HOME

Page 16: G*なクラウド 雲のかなたに ショートバージョン

StaxでGrailshttp://wiki.stax.net/w/index.php/GrailsGrailsのプロジェクト作成grails create-app myapp DataSource.groovy編集

...省略...dataSource {dbCreate = "update"driverClassName = "com.staxnet.jdbc.Driver"url = "jdbc:stax://jggug"username = "tyama"password = "*****"

}

...省略...

Page 17: G*なクラウド 雲のかなたに ショートバージョン

StaxでGrailsConfig.groovyにstacktrace.logの無効指定追記

ライブラリをSTAX_HOME/libからコピーstax-appserver-[verson].jar,mysql-connector-java-5.1.6.jar, xstream-1.3.jarwarファイル書きだし # grails warstaxコマンドでデプロイ# stax app:deploy -a アプリID warファイル指定

... log4j = { appenders { null name:'stacktrace'...省略...

Page 18: G*なクラウド 雲のかなたに ショートバージョン

Stax動作確認!

Page 19: G*なクラウド 雲のかなたに ショートバージョン

やっぱ本家!Cloud Foundry

Grails + Cloud Foundry Plugin

Page 20: G*なクラウド 雲のかなたに ショートバージョン

Cloud FoundryとはURL http://www.cloudfoundry.comSpringSourceが提供。EC2をインフラに使用したJEE用のPaaS。WebコンテナにSS社のtcサーバが使用されている。数クリックで簡単デプロイ+管理。

Page 21: G*なクラウド 雲のかなたに ショートバージョン

Cloud FoundryとはAmazon Web Servicesのアカウント登録が必要テスト動作でもAWSの課金がされます。現在はベータなので、Cloud Foundry自体は無料正式サービスは有料化の予定らしいです。

Page 22: G*なクラウド 雲のかなたに ショートバージョン

Cloud Foundry 構成図構成図

Clould FoundryApache HTTP Server

tc Server

MySQL

HypericHQ&SIGAR

Amazon Web Services EC2

Page 23: G*なクラウド 雲のかなたに ショートバージョン

歴史

Page 24: G*なクラウド 雲のかなたに ショートバージョン

Cloud Foundry 歴史 ①作者Chris Richardson (POJOs in Actionの著者さん)2008/1 Cloud Tool の公開 EC2DeployフレームワークEC2にJEEアプリケーションを簡単にデプロイするためのGroovyベースのフレームワークTomcatが動作して、EC2Deployで作業が行われるように設定されたAMIEC2Deployを使用してデプロイを行うMavenプラグイン

Page 25: G*なクラウド 雲のかなたに ショートバージョン

Cloud Tool MavenプラグインMaven Goalscloudtools:deploy アプリケーションをEC2にデプロイする。 cloudtools:redeploy 再デプロイ。cloudtools:jmeter jmeterを起動してテストをロードする。cloudtools:stop インスタンスを停止する。 cloudtools:dbsave データベーススナップショットを cloudtools.s3.path に指定したS3に保存する。cloudtools:dbrestore cloudtools.s3.pathに保存したデータベースをリストアする。cloudtools:clone クラスタのコピーを作成する。cloudtools:describe クラスタの情報表示cloudtools:list 使用可能なクラスタのリストを出す。cloudtools:stop クラスタの停止。EBS(Elastic Block Store)も操作可能

Page 26: G*なクラウド 雲のかなたに ショートバージョン

Cloud Foundry 歴史 ②2008/4 - 8:Grails用のプラグイン発表→公開 Cloud Tools Grails Plugin v0.1 - v0.4Grails用のコマンドが実装されるcloud-tools-deploy - EC2インスタンスを起動してWebアプリケーションを起動 (MySQLマスタ&スレーブ、Tomcat、Apache)cloud-tools-describe - インスタンスの情報を表示cloud-tools-redeploy - 再デプロイcloud-tools-stop⦆ - EC2インスタンスを停止0.3、0.4で更にMySQLのバックアップ設定の実装やコマンドが追加

Page 27: G*なクラウド 雲のかなたに ショートバージョン

Cloud Tools Grails Pluginコマンド一覧

cloud-tools-deploy cloud-tools-describe cloud-tools-redeploy cloud-tools-stop cloud-tools-add-app-server cloud-tools-clone cloud-tools-create-snapshot cloud-tools-curl cloud-tools-db-recreate cloud-tools-db-restore cloud-tools-db-save cloud-tools-enable-brb cloud-tools-disable-brb

cloud-tools-enable-ebs cloud-tools-enable-master-backups cloud-tools-enable-slave-backups cloud-tools-init-lb-pool cloud-tools-jmeter cloud-tools-list cloud-tools-restart-apache cloud-tools-sql cloud-tools-stop-jmeter cloud-tools-stop-mysql-slave cloud-tools-update-war cloud-tools-verify

Page 28: G*なクラウド 雲のかなたに ショートバージョン

Cloud Foundry 歴史 ③2008/9:Elastic Block Store(EBS)対応2008/11:Clould Tools (Web版)のベータテスターをブログで募集2008/11 - 2009/1:Cloud Foundryベータ公開開始この辺りから、Dustin Whitney氏が参加して、多数のGrails用スクリプトを実装。v0.5-v0.72009/8/19:SpringSourceがSpring Source Cloud Foundryを発表

Page 29: G*なクラウド 雲のかなたに ショートバージョン

Cloud Toolのデモ動画作者のサイトにGrailsでの動画あります。http://tinyurl.com/y9hb2go

Cloud Tool手順grails create-app democd demograils install-plugin cloud-tool.zip

Config.groovy設定importの追加aws.propertiesの指定

デプロイgrails cloud-tools-deploy

インスタンス情報grails cloud-tools-describe

停止grails cloud-tools-stop

こんな手順でした。

Page 30: G*なクラウド 雲のかなたに ショートバージョン

GrailsでCloud FoundryCloud Foundry プラグインhttp://grails.org/plugin/cloud-foundry

Grailsのコマンドを使用してCloud Foundryのサービスにデプロイを行うツール。

簡単インストール!・簡単実行!・簡単デプロイ!

Page 31: G*なクラウド 雲のかなたに ショートバージョン

Cloud Foundry プラグイン操作手順。インストール grails install-plugin clould-foundry途中で質問:DBの設定 (標準であれば(y)で上書き)CloudFoundry.groovyを編集 (username/pass等)grails war でビルドしてwar書きだしgrails clould-foundry-deploygrails clould-foundry-infoアップロード・再デプロイgrails clould-foundry-uploadgrails clould-foundry-redaploy

Page 32: G*なクラウド 雲のかなたに ショートバージョン

コマンドcloud-foundry - アプリケーションとデプロイメントの概要を表示cloud-foundry-list-applications - アプリケーションリストを表示cloud-foundry-list-deployments - デプロイメントのリスト表示cloud-foundry-upload - warファイルをアップロードcloud-foundry-deploy - アプリケーションをデプロイする. warをアップロードして、デプロイメントにアプリケーションを起動。非同期で動作cloud-foundry-info - 現状のステータスや仮想マシンの状況を表示cloud-foundry-redeploy - 最終更新のアプリケーションを再デプロイcloud-foundry-stop - デプロイメントを停止cloud-foundry-delete-deployment - デプロイメントの削除. 停止状態で無い場合はエラーを返します $ grails cloud-foundry delete でも可能。cloud-foundry-delete-application - アプリケーションの削除. 引数にcloud-foundry-list-applicationsで表示されるアプリケーションIDが必要

$ grails cloud-foundry-xxxxx$ grails cloud-foundry xxxxx

Page 33: G*なクラウド 雲のかなたに ショートバージョン

Grailsで試す。公式サイトに、スクリーンキャストがあります。

https://www.cloudfoundry.com/screencasts.html

grails create-app sampleappcd sampleappgrails install-plugin clould-foundryvi grails-app/conf/CloudFoundry.groovy cp ../CloudFoundry.groovy !$grails wargrails cloud-foundry-deploygrails cloud-foundry-infograils wargrails cloud-foundry-uploadgrails cloud-foundry-redeploygrails cloud-foundry-stop

Grailsプロジェクト作成プラグイン

インストールと設定

ビルドデプロイして状況を監視

再ビルドアップロード再デプロイ

停止

Page 34: G*なクラウド 雲のかなたに ショートバージョン

試してみた感想。

簡単で良いね!コマンドのみでできるからCIとかにもやさしい。こんな簡単にEC2の課金されて良いのか!?

だが問題点・・・。

Page 35: G*なクラウド 雲のかなたに ショートバージョン

改善してほしぃ調整すればいいのですが、デフォルトだとDBの文字コードがね・・・。

Page 36: G*なクラウド 雲のかなたに ショートバージョン

Cloud Foundry まとめSpringSourceが提供しているので、Grailsを使うのに何かと安心感がある。個人的には、管理画面からも良いのだが、GrailsのコマンドからデプロイするCloud Toolも魅力を感じる。今はCloud Tool更新が止まってるので、今後の対応に期待。 Cloud Toolsの他の機能も追加期待。利用料金はどうなるのだろ? 安さに期待。調整なしでも日本語・・・・・。今後のVMwareとの絡みは?VMware vApp ?

Page 37: G*なクラウド 雲のかなたに ショートバージョン

Google AppEngine

GaelykGrails & AppEngine

Page 38: G*なクラウド 雲のかなたに ショートバージョン

GAE/JでGrailsを動かす

AppEngine プラグインGORM-JPA プラグインGAE/JでGrailsを動かす手順と対策(現状の) 問題点

Page 39: G*なクラウド 雲のかなたに ショートバージョン

AppEngine プラグインGrailsをGAE/Jに対応させるプラグインhttp://www.grails.org/plugin/app-engine機能インストール時にGAEに必要なファイル生成デプロイ用のコマンドスカッフォルドテンプレートJDOとJPAに対応ユーザ認証設定 Config.groovy

Page 40: G*なクラウド 雲のかなたに ショートバージョン

GORM-JPA プラグインhttp://grails.org/plugin/gorm-jpaできること

GORMと同じsave(),list()等のメソッドが利用できる。(※一部未対応、)

できないことドメインクラスと同じmapping定義ドメインの定義には、JPAアノテーションを利用Criteria (※JPA1.0で未対応なため)

Page 41: G*なクラウド 雲のかなたに ショートバージョン

GAE/JでGrailsを動かすGrailsプロジェクト作成。ディレクトリに移動。

app-engineプラグインをインストール

GAE/JのSDKを設定 ダウンロード → http://code.google.com/appengine/環境変数 APPENGINE_HOMEの設定BuildConfig.groovyにgoogle.appengine.sdkで指定

$ grails create-app mygaeapp ←この名称がappengineでのアプリケーション名になる。(Config.groovyにgoogle.appengine.application="mygaeapp"でもOK)

$ cd mygaeapp

$ grails install-plugin app-engine途中でjpa/jdoどちらを使うか質問されるので、今回は”jpa”と入力

export APPENGINE_HOME=/opt/appengine-java-sdk-1.2.6

google.appengine.sdk='/opt/appengine-java-sdk-1.2.6'

どちらかでOK

環境変数を推奨

Page 42: G*なクラウド 雲のかなたに ショートバージョン

GAE/JでGrailsを動かすGORM-JPAプラグインインストール

ドメインクラスを作成。コードを生成。

$ grails install-plugin gorm-jpa

$ grails create-domain-class jp.grails.Chat$ grails generate-all jp.grails.Chat

@Entityclass Chat implements Serializable {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id

@Column String message...省略...

JPAのアノテーション...通常はこんな感じ...class Chat { String message ...省略...

app-engineプラグインのテンプレートから生成される

Page 43: G*なクラウド 雲のかなたに ショートバージョン

GAE/JでGrailsを動かすローカル起動

デプロイ

問題があり以下のコマンドは使えない(GAE SDK側の問題っぽい)

$ grails app-engine run

バージョン設定をする。 = GAEでのバージョン管理grails set-version 1

GAE用のパッケージ生成grails app-engine package

GAE SDKのコマンドでデプロイ$APPENGINE_HOME/bin/appcfg.sh update ./target/war

grails app-engine deploy

Page 44: G*なクラウド 雲のかなたに ショートバージョン

(現状の) 問題点app engine 1.2.6からの問題

id:uehajさんのブログ(Grな日々)を参考にリンクを参照。http://tinyurl.com/yfzx94t

要約Grailsで最適化に使用されているStringCharArrayAccessor が問題なのでシステムプロパティを設定すればどうにかなるぉ。

s/Groovy/Grails/

stringchararrayaccessor.disabled=true

Page 45: G*なクラウド 雲のかなたに ショートバージョン

そっか、

appengine-web.xmlにこれ入れれば良いのか!

Page 46: G*なクラウド 雲のかなたに ショートバージョン

あ・・・

Page 47: G*なクラウド 雲のかなたに ショートバージョン

app-engineプラグインと、appengine-web.xmlと、アプリ。

結論から!appengine-web.xml にシステムプロパティを追加するには、どうやらプラグインを改造しなくてはならない。なぜかここはテンプレートになっていない

改造プラグイン好ましくない・・・。

http://jira.codehaus.org/browse/GRAILSPLUGINS-1392

早期対応に期待

Page 48: G*なクラウド 雲のかなたに ショートバージョン

app-engineプラグインと、appengine-web.xmlと、アプリ。

非公式改造方法。1. プラグインをプロジェクトディレクトリに移動BuildConfig.groovy

2. 対象のファイルを探して編集_Events.groovy

3. 改造されたプラグインと共に生きる覚悟。

grails.project.plugins.dir="plugins"

Page 49: G*なクラウド 雲のかなたに ショートバージョン

No!

Page 50: G*なクラウド 雲のかなたに ショートバージョン

スマートな方法!Grailsではコマンドスクリプトのイベントを拾えます。scripts/_Events.groovy詳しくはGrails徹底入門 第11章をみてね!

app-engineプラグインのスクリプトが終わった後のイベントでappengine-web.xmlを編集すればいい!(groovyなXMLの処理で!)

app-engineプラグインと、appengine-web.xmlと、アプリ。

11章を参考に!

Page 51: G*なクラウド 雲のかなたに ショートバージョン

_Events.groovyapp-engineプラグインと、appengine-web.xmlと、アプリ。

import groovy.xml.StreamingMarkupBuilderimport groovy.xml.MarkupBuilder

includeTargets << new File("${appEnginePluginDir}/scripts/_AppEngineCommon.groovy")

eventStatusFinal = { msg -> def appXmlFile = new File("$stagingDir/WEB-INF/appengine-web.xml") def xml = new XmlSlurper().parse(appXmlFile) xml."system-properties".appendNode { property(name:"stringchararrayaccessor.disabled",value:"true") } def smb = new StreamingMarkupBuilder() def result = smb.bind{ mkp.declareNamespace("":"http://appengine.google.com/ns/1.0") mkp.yield xml } new FileOutputStream(appXmlFile).withWriter('UTF8'){w-> w << result }}

<appengine-web-app xmlns='http://appengine.google.com/ns/1.0'><application>jggugv4</application><version>2</version><sessions-enabled>true</sessions-enabled><ssl-enabled>true</ssl-enabled><system-properties><property name='stringchararrayaccessor.disabled' value='true'/>

</appengine-web-app>

Page 52: G*なクラウド 雲のかなたに ショートバージョン

おさらいおさらい。

APPENGINE_HOMEの設定export APPENGINE_HOME=/opt/appengine-java-sdk-1.2.6

プラグインインストールgrails install-plugin app-enginegrails install-plugin gorm-jpa

ローカル起動grails app-engine run

バージョン設定とパッケージングgrails set-version 1grails app-engine package

GAE SDKのコマンドでアップデート(デプロイ)$APPENGINE_HOME/bin/appcfg.sh update ./target/war

後は繰り返しgrails app-engine package$APPENGINE_HOME/bin/appcfg.sh update ./target/war

Page 53: G*なクラウド 雲のかなたに ショートバージョン

Grails+GAE/J まとめいろいろと記述をGAE/J用に書き直す手間がありますが、プラグインを活用して開発ができる等の利点があります。

現状バグがあり正常に動作しませんが、近々Fixされると思います。※1.2のリリースには安定するはず。

Page 54: G*なクラウド 雲のかなたに ショートバージョン

次期バージョンに期待Grails-1.2 + app-engineプラグイン。

Page 55: G*なクラウド 雲のかなたに ショートバージョン

Gaelyk(ゲーリック)

GroovyでGAE/Jを簡単に。

Page 56: G*なクラウド 雲のかなたに ショートバージョン

Gaelyk(ゲーリック)Gaelykとは、GroovyのGAE/J用軽量開発ツールキットです。(GroovyテンプレートとGroovlet)+Groovyなアプローチで構成されています。公式サイトhttp://gaelyk.appspot.com/翻訳サイトhttp://dl.dropbox.com/u/132573/Gaelyk-Tutorial.htmlid:kskyさん、ありがとうございます!

Page 57: G*なクラウド 雲のかなたに ショートバージョン

ベルギーの某セミナに合わせてGaelyk 0.3がリリースされました!!

Page 58: G*なクラウド 雲のかなたに ショートバージョン

Gaelyk(ゲーリック)

クイックスタート & 概要

Page 59: G*なクラウド 雲のかなたに ショートバージョン

セットアップGaelykテンプレートプロジェクトをダウンロードhttp://gaelyk.appspot.com/download/

テンプレートプロジェクトです。そのまま解凍して仕様します。gaelyk-template-project-0.3.zipを解凍。

Page 60: G*なクラウド 雲のかなたに ショートバージョン

テンプレートプロジェクト内容 build.groovy & srcAntBuilderで実装されてる簡単なビルド用プログラム。srcフォルダに配置した、GroovyとJavaのソースのコンパイルに使用。

warこのディレクトリがデプロイされます。

Page 61: G*なクラウド 雲のかなたに ショートバージョン

warディレクトリこのディレクトリに、ビューの*.gtplと、css、images等のファイルを配置します。WEB-INFappengine-web.xml  GAEの定義ファイルweb.xml/groovy/ここに*.groovy配置

/includes/ - インクルードファイル//lib/ - *.jar/classes/

Page 62: G*なクラウド 雲のかなたに ショートバージョン

appengine-web.xml 設定<application>タグの中身を対象のアプリケーション名称に変更<version>を指定<static-files> リソース設定

Page 63: G*なクラウド 雲のかなたに ショートバージョン

web.xml 設定拡張子など変更したい場合や、色々追記したい場合は、そのまま追記でOK。

Page 64: G*なクラウド 雲のかなたに ショートバージョン

起動には、GAE/Jのツールを使う

Eclipseで起動もOK

http://localhost:8080/をブラウザで表示

ローカルで起動テンプレートプロジェクトのルートで、$ dev_appserver.sh ./war

※Windowsでは、.sh!.cmd

Page 65: G*なクラウド 雲のかなたに ショートバージョン

Easy Quick Startシェルスクリプトで、こんなの作ってみた

ダウンロードしたら。

エクリプスにインポートGAE/JのプラグインとGroovyのプラグインが必要。

wget http://grails.jp/sample/gaelyk-setup.sh

chmod +x gaelyk-setup.sh./gaelyk-setup.sh myapp1 ← 実行!

時間があればデモ

Page 66: G*なクラウド 雲のかなたに ショートバージョン

えぇ?シェルスクリプト!?

Groovyで書けよ!

Page 67: G*なクラウド 雲のかなたに ショートバージョン

Groovyで書いてもらった。id:kiy0takaさんが書いてくれたよ。http://d.hatena.ne.jp/kiy0taka/20091024/1256386692

ソースコードは↓↓↓↓http://gist.github.com/217486

Page 68: G*なクラウド 雲のかなたに ショートバージョン

Gaelyk(ゲーリック)

使い方!

Page 69: G*なクラウド 雲のかなたに ショートバージョン

大まかな使い方GaelykServlet (コントローラ)example.groovy

GaelykTemplateServlet (ビュー)example.gtpl

request['name'] = params.namerequest['list'] = [1, 2, 3, 4]request['date'] = new Date()forward 'example.gtpl'

<html>    <body> <h2>${request.name}</h2>    <% request.list.each { number -> %>        <p>${number}</p>    <% } %>        <p>${request.date}</p>    </body></html>

Page 70: G*なクラウド 雲のかなたに ショートバージョン

わかりやすく、簡単に、Groovyに!example.groovy//リクエストのパラメータは paramsで取り出す!request['name'] = params.name

//request.setAttribute('list', [1, 2, 3, 4])等はrequest['list'] = [1, 2, 3, 4]request.date = new Date()forward 'example.gtpl'

Page 71: G*なクラウド 雲のかなたに ショートバージョン

Eager変数request : HttpServletRequestresponse : HttpServletResponsecontext : ServletContextapplication : contextと同じsession : HttpSessionを返します。 request.getSession(false) と同じです。params : フォームパラメータのマップheaders : 全てのリクエストヘッダのマップ

Page 72: G*なクラウド 雲のかなたに ショートバージョン

Lazy変数out : PrintWriterを返す。   response.getWriter()への速記sout : ServletOutputStreamを返す。 response.getOutputStream() への速記html : MarkupBuilderを返す。   new MarkupBuilder(response.getWriter()) への速記

Page 73: G*なクラウド 雲のかなたに ショートバージョン

より便利にわかりやすく

洗練されたメソッドバインドされたGAEのサービス

Page 74: G*なクラウド 雲のかなたに ショートバージョン

バインドされたGAE/JのサービスdatastoreService : DatastoreサービスmemcacheService : MemcacheサービスurlFetchService : URLFetchサービスmailService : メールサービスimagesService : ImagesサービスuserService : ユーザサービスuser : ログイン中のユーザ (ログインしていない場合は null )

Page 75: G*なクラウド 雲のかなたに ショートバージョン

追加/拡張されたメソッドGAE/Jのサービスやクラスがより便利に使えるように、メソッドが追加されています。(一部を紹介)詳しくは http://gaelyk.appspot.com/tutorial/MailServiceのsend()を拡張

DatastoreServiceにwithTransactionを追加

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

datastoreService.withTransaction { // your code}

Page 76: G*なクラウド 雲のかなたに ショートバージョン

Groovyな、

low-level

データストアAPI

Page 77: G*なクラウド 雲のかなたに ショートバージョン

low-levelデータストアAPIグルービーにEntityクラスを使ってデータストアimport com.google.appengine.api.datastore.Entity

def person = new Entity("person")

person['name'] = "やまもとつよし"println person['name']

person.age = 27println person.age

//保存person.save()

//削除person.delete()

//リストdef q = new Query('person')def list = datastoreService.prepare(q).asList(

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

Page 78: G*なクラウド 雲のかなたに ショートバージョン

GaelykServletソースみるといいよ!GaelykBindingEnhancerやGaelykCategoryでサービスのバインドやメソッド最適化を実現。

Page 79: G*なクラウド 雲のかなたに ショートバージョン

Gaelyk素敵♥

Page 80: G*なクラウド 雲のかなたに ショートバージョン

注意点・ゲーリック*.gtplの文字化け回避

file.encodingのみではだめっぽい。groovy.source.encodingも指定してね。

<system-properties> <property name="file.encoding" value="UTF-8"/> <property name="groovy.source.encoding" value="UTF-8"/></system-properties>

Page 81: G*なクラウド 雲のかなたに ショートバージョン

まとめ

Page 82: G*なクラウド 雲のかなたに ショートバージョン

G*なクラウドのススメ。Gaelykで開発。AppEngineでの開発を柔軟に軽量に。

Grailsで開発。(AppEngine)Non-クラウドなサーバ運用に開発したアプリケーションを若干の変更でクラウドにデプロイできるように、プラグインで差分を吸収。きれいに設計すればプラグインの切替のみで運用。スペシャリストにまかせる!

Grails & Cloud FoundryGrailsをそのままデプロイ。(何でもできるね。)

Page 83: G*なクラウド 雲のかなたに ショートバージョン

まとめ小 Gaelyk中Grails + GAE/J大Grails + Cloud Foundry

Page 84: G*なクラウド 雲のかなたに ショートバージョン

   

クラウドに

グレイルズ活用

スプリング

ここで一句

Page 85: G*なクラウド 雲のかなたに ショートバージョン

Thank you.

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