grails紹介

38
紹介 紹介 2008/1/17 2008/1/17 上原潤二 上原潤二

Upload: junji-uehara

Post on 13-Jan-2015

2.792 views

Category:

Technology


5 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Grails紹介

紹介紹介2008/1/172008/1/17上原潤二上原潤二

Page 2: Grails紹介

内容Grailsとは

特徴1. フレームワークのディストリ

ビューション2. CoC3. DRY原則4. GroovyまとめデモQ&A

Page 3: Grails紹介

とはとは

Page 4: Grails紹介

Grailsとは?(1 of 2)誤解を恐れずに一言で

「Ruby on RailsのGroovy版」

Webアプリフレームワーク(OSS)実績あるJavaインフラ上

Spring, Hibernateベース

Page 5: Grails紹介

Grailsとは?(2 of 2)もっと誤解を恐れずにいうと

「マトモなPHP」Webアプリ・単純なDB機能向け

ワンストップソリューション

複雑化するJava開発へのアンチ

テーゼ

Page 6: Grails紹介

Grailsの歴史

2006年3/20に0.1版リリース

当初名称は「Groovy on Rails」だっ

英仏など欧州で開発・利用が盛ん

2008/1/15現在1.0RC3が最新安定

ビルド

1ヶ月以内に1.0正式版が出る予定

Page 7: Grails紹介

Grailsで何ができるの?「Webアプリフレームワーク」の利点に加え

重複・煩雑さ排除

開発者関心を限定集中

→結果として生産性向上

Page 8: Grails紹介

特徴特徴 つつ1. フレームワークのディストリビュー

ション2. CoC3. DRY原則4. Groovy

Page 9: Grails紹介

1. フレームワークのディス

トリビューション

Page 10: Grails紹介

フレームワーク戦国時代

無数のフレームワーク

際限ないバージョンアップ

それぞれ得失あり

相性問題

Page 11: Grails紹介

解決策

Grails= フレームワークのディストリビューション

検証され実績のある組み合わせ

Page 12: Grails紹介

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

Grailsは標準で以下を含む

プラグインで拡張可

インストーラ一発でインストール

Jetty試験用組み込みServletコンテナ:Quartzバッチ処理フレームワーク:

HSQLDB試験用組み込みDBSiteMeshHTMLレイアウト:

Log4jロギング:Spring MVC, WebflowMVCフレームワーク: JUnit, canoo WebTestテスティングフレームワーク:

SpringDIxAOPコンテナ:HibernateORMフレームワーク:

Page 13: Grails紹介

2. CoC

Page 14: Grails紹介

CoCConvention over Configuration“規約に従っていれば設定が省略できる”

さらばXML設定ファイル

さまざまな利点

Page 15: Grails紹介

CoCの例(1)grails-app/taglib配下に“HogeTaglib.groovy”という名前のクラス定義を置くとGSPカスタムタグとして動作

class HogeTaglib {def mytag = {

out << “HELLO”}

}

taglib/

GrailsHogeTaglib.groovy

views/

<g:mytag />

test.gsp

HELLO

※GSP=Groovy Server Pages. Groovy版JSP

Page 16: Grails紹介

CoCの例(2)クラス名が“Service”で終わるクラスは自動的にインスタンス化されて依存性注入

class HogeTaglib {HogeService hogeService

:hogeSrivice.sayHello()

}

HogeController.groovyclass HogeService {

void sayHello() {}

}

HogeController.groovy HogeService.groovy

Page 17: Grails紹介

3. DRY原則

Page 18: Grails紹介

DRY原則

Don’t Repeat Yourself“重複を避けよ”

重複の例:

• 設定ファイル内容と、ソースコードの情報

• 毎回似たようなコード

Page 19: Grails紹介

Grails

DRY原則適用の例(1)唯一のモデルクラス定義がさまざまな処理の本ネタに

class Book {String titlePerson author

}

Spring

Hibernate

Spring bean

RDBMS

1

0

id

BOOK TABLE

3“hoge”

“fuge”

title

7

author_idScaffoldedViews

ScaffoldedControllers

自動生成

1回だけ手書き

自動生成

自動生成

自動生成

Page 20: Grails紹介

DRY原則適用の例(2)定型処理コマンド群と雛形の自動生成grails <command>bootstrap bug-report cleancompile console create-appcreate-controller create-domain-class create-integration-testcreate-plugin create-script create-servicecreate-tag-lib create-unit-test docgenerate-all generate-controller generate-viewshelp install-plugin install-templateslist-plugins package-plugin packageplugin-info release-plugin run-app-httpsrun-app set-proxy set-versionshell stats test-appupgrade war

Page 21: Grails紹介

4. Groovy

Page 22: Grails紹介

Groovyとは何か(1)「GroovyはJava言語の拡張である」

C → C++Java → Groovy

JVM上で動作

動作原理やセキュリティモデル同じ

Javaプログラマにとって親和性が高く容易に習得可

Page 23: Grails紹介

Groovyとは何か(2)何が拡張されたか?C++ = C + オブジェクト指向

Groovy = Java + ?

動的な動作高抽象・簡潔記述

+ とても書ききれないほどの他の機能

Page 24: Grails紹介

Groovyコード例(1)

println ”Hello World”

public class Hello {public static void main(String[] args) {

System.out.println(”Hello World”);}

}

Hello.java

Hello.groovy

Page 25: Grails紹介

Groovyコード例(2)

import java.util.*;public class HashMapTest {

public static void main(String[] arg) {Map<String,Integer> map = new HashMap<String,Integer>();map.put("太郎", 35);map.put("次郎", 30);map.put("三郎", 20);for (Map.Entry<String,Integer> entry : map.entrySet()) {

System.out.println(entry.getKey()+":"+entry.getValue());}

}}

Java

Groovymap = [太郎:35, 次郎:30, 三郎:20]

map.each { println "${it.key}:${it.value}" }

Page 26: Grails紹介

につにつ

いて他にもいて他にもいろいろいろいろ

Page 27: Grails紹介

Groovyランタイム

Grailsの構成

Grailsプラグイン基盤

SpringPlugin

HibernatePlugin

非標準Plugin

非標準Plugin

DomainGroovy Class

ViewGSP

ControllerGroovy Class

ServiceGroovy Class

TaglibGroovy Test Cases

JUnit CanooWebtest

filtersPlugin

LoggingPlugin

scaffoldPlugin ・・・

Log4JSpring Hibernate HSQLDBSitemeshJetty下位層

コア層

ユーザ記述コード

ユーザ記述

Plugin

JDKJava VM

Page 28: Grails紹介

Grails on Java EEコマンドラインから> grails war

と叩くと.warが生成されるのでTomcatやWebsphareにでもデプロイすればよいここで生成されるwarは「production releaseバージョン」であり、動的性質が除去されている(設定ファイルをいじっても反映されない)

Page 29: Grails紹介

プロジェクト構成の標準化Javaコードも

ここに置けば再起動無しで自動コンパイル・更新可能Grailsアプ

リとしての基本構造

grails warで生成されるJarのための

情報

grails create-appでここ以

下の構造が生成される。

メッセージバンドルとか。

テストコードとテストレポートはここに。

Page 30: Grails紹介

他にもいろいろ(1 of 2)DSL

ORM-DSL、悲観的ロック、キャッシュ制御Spring DSL

テスティング関係テスト用RDBMS(HSQLDB)サーブレットエンジン(Jetty)シナリオベースのWebテスティングフレームワークCanoo WebtestHTTPベースのHTMLレイアウトエンジンSitemeshDB連携テスト用の自動テスティング(integration test)テスティングフレームワーク連携(JUnit)

GORM: Grails ORMHibernateを動的かつ簡易に扱うためのラッパーダイナミックファインダー: 実行時に生成されるfinderメソッド群(findBy, findWhere, )DAO不要継承、1:多、多:多関連サポート

Page 31: Grails紹介

他にもいろいろ(2 of 2)Webインターフェース

レイアウトエンジンSiteMeshカスタムURLマッピングWebflow、カンバセーション、フラッシュスコープライブラリ独立AJAX(GWT、YUI、DoJoプラグイン..)GSPタグリブ: JSPカスタムタグと同等だがはるかに簡単で便利

PluginシステムGrails = プラグインの集合体

依存性情報を伴う拡張モジュール一発オンラインインストール多種多様なプラグインSpring Security(Acegi plugin)オンラインアップデート、更新反映アプリ再起動を不要にするための更新検出/伝播制御、 リロードなどの枠組み

EJB3連携

スキャフォルディングCRUDビューの動的(もしくは静的)生成

Page 32: Grails紹介

まとめまとめ

Page 33: Grails紹介

Railsと比較

Railsは高機能で情報多し

GrailsのメリットJava資産• 既存ライブラリ/システム、 技術者のスキル、教育投資、開発者・協力会社とのコネクション、 ハードウェア・ミドルウェア資産、安定性、実績、性能

JRuby on Railsと比べても意義がある

Page 34: Grails紹介

Grailsの(今の)問題点

重め

1.0前(RC3)日本語情報ない(執筆中)。

現時点(2008/1)では実業務適用には

時期尚早か

試作や社内システム開発に是非

Page 35: Grails紹介

まとめ: Grailsの有用性

アジャイル開発「動的性質」の活用・Javaの限界突破

モデル駆動本質的作業に努力・関心を集中投下

“PHP”がわりの簡易さ、Javaとの継続性

限られた開発者資源で売り上げ向上

Spring, Hibernateの設定は難しい

やってられるかっ!!

Page 36: Grails紹介

デモデモ

Page 37: Grails紹介

Q&AQ&A

Page 38: Grails紹介

参考資料

http://grails.org/doc/1.0.x/http://grails.org/http://groovy.codehaus.org/Groovyホームページ

http://docs.codehaus.org/display/GRAILS/Success+StoriesGrailsを使用したサイト