grails紹介
Post on 13-Jan-2015
2.792 Views
Preview:
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