grails紹介

Post on 13-Jan-2015

2.792 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

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

内容Grailsとは

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

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

とはとは

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

「Ruby on RailsのGroovy版」

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

Spring, Hibernateベース

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

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

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

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

テーゼ

Grailsの歴史

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

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

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

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

ビルド

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

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

重複・煩雑さ排除

開発者関心を限定集中

→結果として生産性向上

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

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

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

トリビューション

フレームワーク戦国時代

無数のフレームワーク

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

それぞれ得失あり

相性問題

解決策

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

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

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

Grailsは標準で以下を含む

プラグインで拡張可

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

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

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

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

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

2. CoC

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

さらばXML設定ファイル

さまざまな利点

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

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

class HogeTaglib {HogeService hogeService

:hogeSrivice.sayHello()

}

HogeController.groovyclass HogeService {

void sayHello() {}

}

HogeController.groovy HogeService.groovy

3. DRY原則

DRY原則

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

重複の例:

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

• 毎回似たようなコード

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回だけ手書き

自動生成

自動生成

自動生成

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

4. Groovy

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

C → C++Java → Groovy

JVM上で動作

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

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

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

Groovy = Java + ?

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

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

Groovyコード例(1)

println ”Hello World”

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

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

}

Hello.java

Hello.groovy

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}" }

につにつ

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

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

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

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

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

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

リとしての基本構造

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

情報

grails create-appでここ以

下の構造が生成される。

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

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

他にもいろいろ(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:多、多:多関連サポート

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

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

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

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

EJB3連携

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

まとめまとめ

Railsと比較

Railsは高機能で情報多し

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

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

Grailsの(今の)問題点

重め

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

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

時期尚早か

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

まとめ: Grailsの有用性

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

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

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

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

Spring, Hibernateの設定は難しい

やってられるかっ!!

デモデモ

Q&AQ&A

参考資料

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

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

top related