Grails -Groovyベースの高生産性Webアプリフレームワーク

Similar documents
利用者

Microsoft Word - tutorial3-dbreverse.docx

(Microsoft PowerPoint - ClickFramework.ppt [\214\335\212\267\203\202\201[\203h])

PowerPoint プレゼンテーション

Javaの作成の前に

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

ガイダンス

Java言語 第1回

メディプロ1 Javaプログラミング補足資料.ppt

プログラミング基礎I(再)

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

メソッドのまとめ

JavaプログラミングⅠ

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

2 Java 35 Java Java HTML/CSS/JavaScript Java Java JSP MySQL Java 9:00 17:30 12:00 13: 項目 日数 時間 習得目標スキル Java 2 15 Web Java Java J

Oracle SOA Suite 11gコンポジットに対するSOASchedulerの構成

S2DaoでもN:Nできます

Webシステム授業資料

intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書   第3版  

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

個人依存開発から組織的開発への移行事例 ~ 要求モデル定義と開発プロセスの形式化 による高生産性 / 高信頼性化 ~ 三菱電機メカトロニクスソフトウエア ( 株 ) 和歌山支所岩橋正実 1

メディプロ1 Javaサーブレット補足資料.ppt

Rmenuフレームワーク

java_servlet2_見本

10th Developer Camp - B5

intra-mart Accel Platform — IM-BloomMaker プログラミングガイド   初版  

文字列操作と正規表現

2

Microsoft PowerPoint - 09.pptx

PowerPoint Presentation

PowerPoint Presentation

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

rcp-add-01:アーキテクチャ設計書

Microsoft PowerPoint - chap10_OOP.ppt

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

grails web applications plug-ins grails groovy spring, hibernate,... jdk libraries JVM 2

QualysGuard(R) Release Notes

C#の基本

Java講座

スライド 1

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

Microsoft PowerPoint - IAF フォーラム2015講演資料_PLCopenJapan_A02.pptx

基本情報STEP UP演習Java対策

ETOS 画面の Web 化 / 帳票印刷のオープン化体験お試し変換サービスのご紹介 ACOS-4 システムの業務改善提案

JavaプログラミングⅠ

About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android)

Transcription:

Groovy ベースの高生産性 Web アプリフレームワーク 2008/9/6 NTT ソフトウェア株式会社上原潤二

発表者 上原潤二 NTT ソフトウェア株式会社 翔泳社 Grails 徹底入門 執筆 ( 共著 ) ブログ Gr な日々 Grails Code Reading メンバ

発表内容 Grails とは何か Grails と Groovy Grails の特徴 まとめ

1. Grails とは何か

簡単に言うと Java EE を基盤とする Web ア プリフレームワーク.war 生成 Spring Framework Hibernate SiteMesh,etc, をベース Groovy DSL で開発 プラグイン機構

Grails は, かつて何であったか 幼名 Groovy on Rails Ruby on RailsのGroovy 版大きな影響多数のアイデア継承

Grails は, 今や何であるか 2 つの意味でメタフレームワーク フレームワークの集合体 ( フルスタック ) フレームワークを作るためのフレームワーク DSL 指向フレームワーク作成キット Grailsは実現サンプルの一つ

Grails の構成 View コマンドライン Gant Spring Webflow SiteMesh Spring MVC Jetty Logging その他 Log4j Controller Quartz Groovy, Spring Framework Canoo Webtest Testing JUnit Model GORM Hibernate HSQLDB

コマンドライン Gant ユーザ定義コマンド Controller URLマッピングコントローラー Quartz バッチタスクサービス Grails の構成 Spring Webflow View Testing Spring MVC GSP SiteMesh ダイナミックタグリブ Jetty Grails Webflow Groovy, Spring Framework ユニットテスト Canoo 統合テスト JUnit Webtest Logging その他 Log4j 各種の設定 Groovy DSL で記述する開発コード群 Model ドメインクラス定義マッピング GORM 制約サービス Hibernate HSQLDB

Grails の歴史 2006 年 3 月 20 日に 0.1 版リリース 2008 年 2 月 4 日 1.0 版リリース 2008 年 8 月 25 現在 1.0.3 最新版 欧州で開発が活発

2. Grails とGroovy

Grails & Groovy 主な開発者は両方のコミッター Grails の成果も逐次 Groovy に フィードバック Groovy:Grails の最重要技術 Grails :Groovy のキラー応用

Groovy とは何か (1) Groovy は Java 言語の拡張である C C++ Java Groovy Java と共有 JVM 動作原理 / ライブラリ共通 開発スキル

Groovy とは何か (2) C++ = C + オブジェクト指向 Groovy = Java +? 動的高抽象 簡潔記述拡張可 ( 内部 DSL) クロージャ活躍

Groovy コード例 Java 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()); } } } Groovy map = [ 太郎 :35, 次郎 :30, 三郎 :20] map.each { println "${it.key}:${it.value}" } 簡潔記述 を強調する Groovy のコード例 動的性質 拡張性など 他の性質については表現できていない

3. Grails の特徴

Grails の特徴 1.Grails 流儀化されたフレームワークの集合体 2.Groovy ベースの DSL でロジックと設定を書く 3. 非グラフィカル統合環境 4.CoC, DRY+ 5.Scaffold 6. プラグイン

Grails の特徴 1.Grails 流儀化されたフレームワークの集合体 2.Groovy ベースの DSL でロジックと設定を書く 3. 非グラフィカル統合環境 4.CoC, DRY+ 5.Scaffold 6. プラグイン

Grails 流儀化 既存 Java フレーワークを 下記 が可能になるように Wrap 記述 設定を DSL で表現 適度な CoC より動的に プラグイン化

Grails 流儀化 (GORM) Grails 流儀化された Grails 流儀化された Grails 流儀化された Grails 流儀化された Grails Grails 流儀化された

Grails の特徴 1.Grails 流儀化されたフレームワークの集合体 2.Groovy ベースの DSL でロジックと設定を書く 3. 非グラフィカル統合環境 4.CoC, DRY+ 5.Scaffold 6. プラグイン

Groovy DSL で記述 (1) ドメインクラス class Person { int age = 18 String name static constraints = { age min:18, nullable:false name size:10..30 } static belongsto = Group } テーブル定義に該当 制約記述用 DSL 関連の表現 grails-app/domain 配下に置く

Groovy DSL で記述 (2) } ドメインクラス class Person { int age = 18 String name static constraints = { age min:18, nullable:false name size:10..30 } static belongsto = Group スキャフォルド生成されたビュー : <input type="text maxlength="30" id="name name="name" value=""/> テーブル定義 create table person ( id bigint generated by default as identity (start with 1), version bigint not null, age integer not null, name varchar(30), primary key (id) )

Groovy DSL で記述 (3) URL マッピング class UrlMappings { static mappings = { "/$blog/$year?/$month?/$day?/$id?" { controller = "blog" action = "show" constraints { year(matches:/d{4}/) } month(matches:/d{2}/) day(matches:/d{2}/) } } "500"(view:'/error') URL パターンにマッチングさせると同時に部分文字列を変数に代入 追加的マッチング条件

Groovy DSL で記述 (4) Quartz( プラグイン ) class MyJob { def cronexpression = 0 0 24 * *? def execute() { // 処理実行 } } grails-app/jobs 配下に書くだけでバッチ実行

Groovy DSL で記述 (5) ダイナミック Taglib class HogeTaglib { def mytag = { out << HELLO } } grails-app/taglib に置くだけ GSP 中の <g:mytag/> が HELLO に展開.tld XML コンパイル jar 単体試験しやすい 不要

その他 DSL 大活躍 設定ファイル一般 (ConfigSlurper) フィルタ記述 GSP(just like JSP, but not sucks!) Spring Bean 設定 (BeanBuilder) Webflow の画面遷移フロー定義 Hibernate マッピング定義 Hibernate のクエリ定義 Json 記述 (JSonBuilder) :

Groovy をとことん使うための Groovy は簡単 しかし以下は困難 DSL を作る 動的性質を最大限引き出す ( リロード 更新伝播 ) CoC DRY を駆使 既存 Java ライブラリ フレームワーク 類を 一定の流儀で統合 Grails: 上記の定式化された仕組み

Grails の特徴 1.Grails 流儀化されたフレームワークの集合体 2.Groovy ベースの DSL でロジックと設定を書く 3. 非グラフィカル統合環境 4.CoC, DRY 原則 5.Scaffold 6. プラグイン

grails コマンド群 定型処理コマンド群 grails <command> Command: bootstrap bug-report clean compile console create-app create-controller create-domain-class create-integration-test create-plugin create-script create-service create-tag-lib create-unit-test doc generate-all generate-controller generate-views help install-plugin install-templates list-plugins package-plugin package plugin-info release-plugin run-app-https run-app set-proxy set-version shell stats test-app upgrade scrip war それぞれの実体は Gant(Groovy 版 rake) スクリプト GRAILS-APP/scripts/XxxYyy.groovy

プロジェクトフォルダ構成 grails createapp でここ以下の構造が生成される Grails アプリとしての基本構造 メッセージバンドルとか Java コードもここに置けば再起動無しで自動コンパイル 更新可能 テストコードとテストレポートはここに grails war で生成される Jar のための情報

Grails の特徴 1.Grails 流儀化されたフレームワークの集合体 2.Groovy ベースの DSL でロジックと設定を書く 3. 非グラフィカル統合環境 4.CoC, DRY+ 5.Scaffold 6. プラグイン

CoC の例 クラス名が Service で終わるクラスは自動的にインスタンス化されて依存性注入 HogeController.groovy class HogeController { def hogeservice : hogeservice.sayhello() } HogeService.groovy class HogeService { void sayhello() { } } ちなみに Service クラスは ( 断らない限り ) トランザクション境界

CoC with DSL XML 設定ファイルは書かない 適度な CoC 規約の動作を変える場合 DSL で明示指定

DRY の先にあるもの リピートしないのは当然 記述を極小化 最適化 必要最低限の最適な記法 を考えるところから入る 最適な記述 >>> 実装都合 制約

Grails の開発手順 (11 回目 ) 1. 最適な DSL を考える 2. その DSL を実装する 3. その DSL で業務ロジックを書 きくだす 4. 実行する

Grails の開発手順 (2 回目以降 ) 1. 最適な DSL を考える SKIP 2. その DSL を実装する 1. そのDSLで業務ロジックを書きくだす 2. 実行する Web アプリ開発に関していまここ (Grails)

Grails の開発手順 (2 回目以降 ) 1. 最適な DSL を考える SKIP 2. その DSL を実装する 1. そのDSLで業務ロジックを書きくだす 2. 実行する Web アプリ開発に関していまここ (Grails) 1,2 は必要に応じプラグイン化

従来の開発手順 ( 例 ) 1. UML で論理モデルを書き下す簡潔に書き下すための特別な記法 業界慣例の記法を活かす などの希望はかなえられにくい 2. ( 必要に応じ )UML で実装モデルに書き直す 3. フレームワークなどの都合に合わせ Java や XML など既存言語で 実装都合に合わせ全面的に書き直す 最小記述とか抽象性とかの希望よりも 実装技術制約が優先される 4. 実行する 2 回目以降 も同様

Grails の特徴 1.Grails 流儀化されたフレームワークの集合体 2.Groovy ベースの DSL でロジックと設定を書く 3. 非グラフィカル統合環境 4.CoC, DRY 原則 5.Scaffold 6. プラグイン

Scaffold CRUD ビューの自動生成 静的スキャフォールド 動的スキャフォールド GSP ページやコントローラクラスは ファイルとしては存在しない テンプレートから動的に生成 マスター管理系は非常に楽

Scaffold 画面例

Grails の特徴 1.Grails 流儀化されたフレームワークの集合体 2.Groovy ベースの DSL でロジックと設定を書く 3. 非グラフィカル統合環境 4.CoC, DRY 原則 5.Scaffold 6. プラグイン

Grails プラグイン 拡張モジュール コマンド 1 発オンラインインストール 更新検出 / 伝播 リロードの枠組み 豊富なプラグイン ( 標準リポジトリで 92 個 ) Grails プラグインの集合 Codecs-plugin, Controllers-plugin, Hibernate-plugin, DomainClass-plugin, UrlMappings-plugin 再利用単位として秀逸

再利用単位としてのプラグイン プラグインはアプリケーションと相似形 MyApp MyPlugin

アプリケーションと相似形なので プラグインは ビューを含むことができる テストを含むことができる サポートスクリプトを含むことができる 配布単位として独立性が高い クラス コンポーネントより粗粒度 アプリ開発と同列のサポート

プラグインが再利用しやすい理由 DSL には 実装都合による依存 結合が ユーザコード上に現れない (or 少ない ) DSL 表現は 受身 の存在 データに近い

4. まとめ

Grails は Java プログラマー向けの アジャイル開発を容易にする 拡張を前提としたフレームワーク プラグインによる再利用 DSL 指向開発

Grails の問題点 Grails による隠蔽は十分? Spring は当面良く知らなくても OK Hibernate は会得必須 性能面 Java より遅いのは確実 Groovy1.6 で高速化期待 デバッガ欲しい

参考情報 その他

日本語書籍 Grails 徹底入門 ~Groovy+ Grails で実現するエンタープライズアジャイル開発 翔泳社 2008 年 8 月 25 発売 Groovy イン アクション 日本語版, 毎日コミュニケーションズ,2008 年秋

コミュニティ Grails Code Reading http://groups.google.com/group/grails-ja 第 2 回 07/08/24 groovy 第 3 回 07/09/19 grails 実行ひとめぐり第 4 回 07/10/31 プラグイン第 5 回 07/11/29 acegi プラグイン第 6 回 07/12/21 webflow 第 7 回 08/01/28 ビュー周り (GSP, taglib) 第 8 回 08/02/27 モデル周り第 9 回 08/03/27 Service 周りと Command Object 第 10 回 08/04/24 リッチ UI を見ました. 第 11 回 08/05/22 ビルダ第 12 回 08/07/4 アーティファクト (+ BeanBuilder, Spring?)

ご清聴ありがとうございました