Grailsのススメ(仮)

61
のススメ(仮) def speaker = new Cast(name:"T.Yamamoto",version:"G*-2010-07-24") 1 「天は人の上に人を造らず、人の下に人を造らず」

Transcript of Grailsのススメ(仮)

Page 1: Grailsのススメ(仮)

Grailsのススメ(仮)@JGGUG 2010年7月24日

def speaker = new Cast(name:"T.Yamamoto",version:"G*-2010-07-24")

1

「天は人の上に人を造らず、人の下に人を造らず」

Page 2: Grailsのススメ(仮)

自己紹介山本 剛仕事:テクニカルDTPアーキテクトtwitter: @tyamaはてな id: mottsniteブログ↑JGGUG名古屋支部長Grails Acegiプラグインのコミッター「Grails徹底入門」共著 9~11を執筆

2

Page 3: Grailsのススメ(仮)

最近マイコミ記事。書かせて頂きました。http://bit.ly/a40O4G

3

Page 4: Grailsのススメ(仮)

実は以前にも。uehajさんと一緒にこっそり記事書いてました

4

Page 5: Grailsのススメ(仮)

・・・のすゝめ

5

Page 6: Grailsのススメ(仮)

Groovy!?

6

Page 7: Grailsのススメ(仮)

Groovyハ言語ノ上ニ言語ヲ造ラズ、

言語ノ下ニ言語ヲ造ラズ。

7

※いろいろな解釈ができる・・・・。

Page 8: Grailsのススメ(仮)

Java自体をリプレースする物

では無く、Javaでの開発を

柔軟に手助けする言語。

8

Groovy is JavaJava is Groovy

Page 9: Grailsのススメ(仮)

Grails!?

9

Page 10: Grailsのススメ(仮)

Grailsはフレームワークの上に

フレームワークを造らず、

フレームワークの下に

フレームワークを造らず。

10

ん??・・・・。???

???

Page 11: Grailsのススメ(仮)

Grails!?

11

Page 12: Grailsのススメ(仮)

簡単に。

Springフレームワークを、

Groovyでダイナミックに柔軟にして、

Webアプリケーション開発をする

フルスタックフレームワーク。

12

Page 13: Grailsのススメ(仮)

Grailsのみで、

Webアプリケーションが、

サクサク開発できます。

既存の技術を活用して。

13

Page 14: Grailsのススメ(仮)

信頼性!

Java。

Spring フレームワーク。

Hibernate。

Sitemesh。

Tomcat。

14

Page 15: Grailsのススメ(仮)

そしてそれらで、

15

Page 16: Grailsのススメ(仮)

CoCな開発。TDD。

ドメインドリブン開発。

DSLで読みやすく、わかりやすく、

必要な部分記述する。

Groovyで記述。

Javaっぽく書ける。

16

Page 17: Grailsのススメ(仮)

Plugins - 再利用&組換え可能にモジュール化。

しくみ。

領域のルールを定義する。実装する。

=> Artefact。 DSL。

17

Artefact

ルールを動作させる仕組み。

DSL実装

ドメイン固有言語の動作実装。

機能的に使う

DSL

ドメイン固有言語。規約Groovy プログラム

Page 18: Grailsのススメ(仮)

18

Plugins - 再利用&組換え可能にモジュール化。

Artefact

ルールを動作させる仕組み。

DSL実装

ドメイン固有言語の動作実装。

フレームワーク内でフレームワークを柔軟に使ったり。

フレームワークからフレームワークが派生したり。

他のフレームワーク

他のフレームワークをDSLで、

動作できるように実装する。

その領域のフレームワークを開発する。

DSLの実装をフレームワーク化する。

モジュール化する。

Page 19: Grailsのススメ(仮)

Grailsはフレームワークの上に

フレームワークを造らず、

フレームワークの下に

フレームワークを造らず。

19

※強引!?・・・・。

フレームワークでありながら、他のフレームワークと共存し、

さらにフレームワークを開発して派生できる。

Page 20: Grailsのススメ(仮)

20

Grails聖書から、

大事な言葉。

柔軟さを犠牲にせず

シンプルさをアーカイブ

Page 21: Grailsのススメ(仮)

Grailsの概略図基本部分はJavaで実装されている。中身は、おおよそ、Java(50%)-Grooy(50%)で実装

DIコンテナにSpringO/RマッパーにHibernate

Grails Groovy DSLSpring Hibernate SiteMeshGroovy DSL

基礎部分はJava & Groovy基礎部分はJava & Groovy基礎部分はJava & Groovy基礎部分はJava & Groovy

JVMJVM21

Page 22: Grailsのススメ(仮)

GrailsはSpring!Grailsは、形を変えたSpring-MVC

Spring + Hibernateを抽象化したものである

プラグインの仕組みで

Springフレームワークの定義を自動化

Spring Beanビルダー

22 参考資料: “Grails for Spring Developers” by Graeme Rocher

Page 23: Grailsのススメ(仮)

Out of the BoxHibernate上に構築された、簡単に利用できるO/Rマッピングレイヤ

表現豊かなビューテクノロジーGroovy Server Pages (GSP)

コントローラレイヤは Spring MVCを利用

コマンドラインスクリプト環境にはGroovy版のAnt Gant

リロード可能に設定された組込 Tomcat

組込 Spring DSLによる依存注入SpringのMessageSourceで実装されたi18n対応

Springフレームワークのトランザクション実装によるサービスレイヤのトランザクション

データベースView

ビルドシステム

MVC2

コンテナ

DI 国際化

トランザクション23

Page 24: Grailsのススメ(仮)

Grails

クイックスタート!

24

Page 25: Grailsのススメ(仮)

Quick Start !!

25

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

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

Page 26: Grailsのススメ(仮)

Quick Start !!

26

grails create-app myappcd myappgrails create-domain-class workドメインクラス編集grails create-controller workコントローラに “static scaffold = true” 追記起動: grails run-app

内容がまとまったらgrails generate-all chatそして調整

Page 27: Grailsのススメ(仮)

どうして動いた?コマンドターゲットプロジェクト作成、各種コード生成、アプリケーション起動等をコマンドターゲットで行う。

メモリ上で動くデータベースHSQLDBがバンドルされている。

ファイル動作も可能。もちろん運用時はHibernate対応のDBが利用可能

サーブレットコンテナ組込Tomcatがバンドルされている。リロードできる。但し一部不安定 (ry

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

% grails run-app% grails test-app

27

Page 28: Grailsのススメ(仮)

Grailsの機能GORM (Grails O/R Mapping)簡単なタグライブラリ URLマッピングDSLREST対応コンテントネゴシエーションWebフローFilterAJAXIvyベースの依存性管理テスト環境クラウドへのデプロイ

28

Page 29: Grailsのススメ(仮)

Grails

プラグイン29

Page 30: Grailsのススメ(仮)

Grails

他のプラグイン

Grailsの仕組み

Quartz

QuartzCore

Codec

Controlleri18n

Domain

Service UrlMapping

Filters

JMS

Taggin

Security

MyPlugin

Flex

Web

Flow

30

Page 31: Grailsのススメ(仮)

GrailsプラグインGrailsコアもプラグイン!簡単インストールgrails install-plugin acegi

活発なプラグインコミュニティ430種類以上!

簡単開発Grailsでの開発経験があればできます。grails create-plugin myplugingrails package-plugin

31

Page 32: Grailsのススメ(仮)

Grailsプラグインチーム開発 - 公式プラグインのみではない!自分のプラグインリポジトリSVNMaven

モジュラ開発インラインプラグインBuildConfigにプラグインプロジェクトパスを指定。

将来OSGi化されたプラグイン?

32

Page 33: Grailsのススメ(仮)

最近のGrails事情

33

Page 34: Grailsのススメ(仮)

マメな更新リリース早っ!2010-05-11 1.3.0 リリース! ~6日後2010-05-17 1.3.1 リリース ~1ヶ月後2010-06-17 1.3.2 リリース ~21日後2010-07-08 1.3.3 リリース ~21日後2010-07-29 1.3.4 (予定)

34

Page 35: Grailsのススメ(仮)

Grails 1.3.x

35

Page 36: Grailsのススメ(仮)

Grails1.3.x詳しくは公式リリースノートを参照。http://www.grails.org/1.3+Release+Notes

ブログに、まとめてあります。http://d.hatena.ne.jp/mottsnite

36

Page 37: Grailsのススメ(仮)

Grails1.3.xGroovy1.7系に更新!JUnit4対応Mavenリポジトリ対応 maven-publisherプラグイン依存性宣言プラグインモジュラ開発の向上Grails docのPDF書きだし(英語のみ)GORM派生プロパティ対応GORMでのダーティーチェックネームドクエリに、追加クライテリア、ネスト、チェインクエリーキャッシュの向上GSP joinタグ、unlessタググローバルアプリケーションレイアウトフィルタオーダリングTagLibテスト向上

37

Page 38: Grailsのススメ(仮)

Grails1.3.1フィルタオーダリング

dependsOnプロパティを定義することで、フィルタの実行順番を定義できる。

GSP タグ "unless"

名前つきクエリーのネストTagLib テスト

38

<g:unless test="${cacheEnabled}"> Tag Body Goes Here</g:unless>

class MyFilters { def dependsOn = [MyOtherFilters] def filters = { … } }

Page 39: Grailsのススメ(仮)

Grails1.3.2Groovy 1.7.3、Spring 3.0.3 更新スクリプトのもしかして機能

findメソッドのクエリーキャッシュサポート

39

~/workspace/testapp $ grails create-doman-class testapp.AuthorWelcome to Grails 1.3.2 - http://grails.org/Licensed under Apache Standard License 2.0…Script 'CreateDomanClass' not found, did you mean: 1) CreateDomainClass 2) CreateApp_ 3) CreateScript 4) CreateFilters 5) CreateUnitTestPlease make a selection or enter Q to quit:

Book.findAll( "from Book as b where b.author=:author", [author:'Dan Brown'], [cache: true])

Page 40: Grailsのススメ(仮)

Grails1.3.3バグフィックスDatabase Mappingに、insertable、updateable

40

class Book { String title static belongsTo = [author: Author] … static mapping = { author insertable: false author updateable: false }}

Page 41: Grailsのススメ(仮)

Grails1.3.4 予想。Groovy 1.7.4 に更新?バグフィックスMaven Publisher プラグイン更新

未対応の内容は1.3.5へ引き継がれます。

41

Page 42: Grailsのススメ(仮)

最近リリースされた

個人的注目の

プラグイン

42

Page 43: Grailsのススメ(仮)

プラグインカタログ

43

Application Infohttp://grails.org/plugin/app-infoGrailsアプリケーションのあらゆる情報を閲覧できる。参考資料 http://burtbeckwith.com/blog/?p=344

Sharding Pluginhttp://grails.org/plugin/shardingデータベースシャーディング参考資料 http://jeffrick.com/2010/07/13/a-grails-plugin-for-sharding/

Page 44: Grailsのススメ(仮)

プラグインカタログ-認証プラグインの八岐大蛇?- Spring Security 8つのプラグイン

http://burtbeckwith.github.com/ 1. Spring Security Core plugin S2のコアプラグイン。 Acegiをベースに開発。

リリースされてる 2. Spring Security OpenID plugin - OpenID実装 3. Spring Security ACL plugin - ドメインオブジェクトセキュリティ (ACL)

4. Spring Security CAS plugin - CAS対応 5. Spring Security LDAP plugin - LDAP対応

まだリリースされていないがリポジトリ確認 6. Spring Security OAuth Consumer - OAuth対応 7. Spring Security OAuth Provider - OAuthプロバイダー 8. Spring Security UI - ユーザ管理UI提供 44

Page 45: Grailsのススメ(仮)

プラグインカタログ

SmartGWTSmartClientのJavaScriptコンポーネントを使ってGWTアプリケーションを構築するためのAPIを実装したプラグイン。http://grails.org/plugin/smartgwthttp://code.google.com/p/smartgwt/

Storieshttp://grails.org/plugin/grails-stories他のテストフレームワークに依存しないBDDプラグイン

45

Page 46: Grailsのススメ(仮)

プラグインカタログ

Geolocationhttp://grails.org/plugin/geolocationブラウザの位置情報通知機能(Geolocation API)を扱うプラグイン

ダイナミックコントローラhttp://grails.org/plugin/dynamic-controllerコントローラを別管理して、定義により複数のコントローラをミックスして使えるようにする。

46

Page 47: Grailsのススメ(仮)

その他。

47

Page 48: Grailsのススメ(仮)

Grails Plugin Collective

48

http://grails.org/Grails+Plugin+CollectiveGrailsプラグインをメンテナンスする、ボランティア団体主な活動は、バグFix、テスト、新しいGrailsのリリースで動作確認。grails-fixturesgrails-joda-timegrails-renderinggrails-selenium-rcgrails-springcache

Page 49: Grailsのススメ(仮)

GrailsとNoSQLプラグインがあります。CouchDBhttp://grails.org/plugin/gorm-couchdbHBasehttp://grails.org/plugin/gorm-hbaseMongoDBhttp://grails.org/plugin/gorm-mongodbNeo4jhttp://grails.org/plugin/neo4jCassandrahttp://grails.org/plugin/cassandra

49

Page 50: Grailsのススメ(仮)

inconsequential

50

Page 51: Grailsのススメ(仮)

inconsequential

51

GrailsでのNoSQL実装。

iNconSeQuentiaL意味 = 筋の通らない。論理的でない。inconsequentialなデータベースに対応するという意味であろうと、勝手に解釈。

現状、詳細な説明が無いのでソースコードを読むしかない。

Page 52: Grailsのススメ(仮)

inconsequentialソースコードによると。コアがあり。各NoSQLの実装。appengine、cassandra、redis、JCR

Grails アダプターGrailsApplicationMappingContextorg.springframework.datastore.mapping.MappingContext

AdaptedDomainClass、AdaptedDomainClassPropertyそして、runtime-dynamic。ソースコードを読むと、PersistentEntityにメソッドを追加してダイナミック動作させている。

52

Page 54: Grailsのススメ(仮)

inconsequential

54

Redisとは?オープンソースとして開発されているKVS利用実績Github,Craigslist,The Gardian,Engine Yard等。key-value型、リスト型、集合型、順序付き集合型などのデータ構造が扱える。1対Nのマスター・スレーブ構成に対応。

http://code.google.com/p/redis/

そういえば、Redisは、VMwareですね。Springが持って無くてもVMwareが持ってるって事か・・。

参考資料 http://www.atmarkit.co.jp/news/201003/16/redis.html

Page 55: Grailsのススメ(仮)

inconsequential

55

リリース時期は?

Page 56: Grailsのススメ(仮)

過去の自分の資料も、

参考になるらしい。

56

スライドは、

http://www.slideshare.net/tyama

Page 57: Grailsのススメ(仮)

見出しだけ日本語

Grailsドキュメント公開

公式サイトhttp://grails.org/doc/latest

日本語 Japanese doc.http://grails.jp/doc/latest

Page 58: Grailsのススメ(仮)

Q&A

58

Page 59: Grailsのススメ(仮)

予告

59

Grailsプラグイン攻略

発表日未定

Page 60: Grailsのススメ(仮)

告知

60

JGGUG 名古屋支部 主催

「もくもくGroovy」できる限り、毎週木曜日 19:00から 開催。

あなたも、2時間集中してGアスタな、

もくもくをしてみませんか?

Page 61: Grailsのススメ(仮)

Thank you.

日本Grails/Groovyユーザーグループ

http://www.jggug.org/61