Your SlideShare is downloading. ×
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」

1,061
views

Published on

第0.9回 名古屋Grails/Groovy勉強会「もうやっこでいこみゃ~か!」 …

第0.9回 名古屋Grails/Groovy勉強会「もうやっこでいこみゃ~か!」
内容:「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」

Published in: Technology, Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,061
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Grails-1.1を斬る! ∼+Grails-1.1からのチーム開発∼ 第0.9回 名古屋Grails/Groovy勉強会「もうやっこでいこみゃ∼か!」def speaker = new Cast(name:”T.Yamamoto”,version:”GRN-0.9-2009-03-19”)
  • 2. 自己紹介名前:山本 剛 (やまもとつよし)所属:ニューキャスト「Grails徹底入門」9-11章、書きました。ブログ http://xmldo.blogspot.com/ http://d.hatena.ne.jp/mottsnite/
  • 3. おさらい
  • 4. Grailsとは?よく聞く説明では、「Groovyで実装されたRuby on Rails」!?  合ってるようで間違いJava+Groovyで実装された、CoC、DRYの概念を取り入れた( RoR にインスパイアされた)、Webアプリケーション開発環境。 基礎はJavaでの開発で信頼されたSpring,Hibernate等を 使用している。 そして、それらをシンプルに利用できる環境。Grails, 開発プラットフォーム (DGG2引用)
  • 5. Grailsの構成図 Grails Groovy Spring Hibernate SiteMesh 基礎部分はJava(+Groovy) JVMHibernate:ORマッピングSpring: DIコンテナ・多機能なラッパーフレームワークSiteMesh:レイアウトフレームワークJetty: サーブレットコンテナHSQLDB:ピュアJavaなデータベース
  • 6. デモgrails create-app democd demograils create-domain-class Bookgrails create-controller Bookgrails run-app--止める--grails install-plugin acegi--プラグインインストールは前より早くなった!!
  • 7. GRAILS-1.1
  • 8. Grails-1.1リリースAnt+IvyとMavenビルドのサポートスタンドアロンGORMプラグインの新機能:グローバルプラグイン、他動推移的なプラグイン解決、ローカルリポジトリー対応、他Springネームスペースサポート劇的に向上したパフォーマンステストフレームワークMVCレイヤーとGORM等のGrailsコアへの多くの新機能と改善Groovyは最新の1.6に更新
  • 9. 長くなるので、 一気に紹介!
  • 10. GORM スタンドアロンでGORMが使用可能!   Spring MVCでのサンプル、GRAILS_HOME/samples/petclinic-mvcを参照 ty E nti applicationContext.xmlにデータソースと、<gorm:sessionFactory/>の定義 nce. si ste<gorm:sessionFactory base-package="org.grails.samples" . per data-source-ref="dataSource" ils tgra y message-source-ref="messageSource"> im por y { gr oov it on . <property name="hibernateProperties"> t rs @En s Pe name son <util:map> s Per cla tring <entry key="hibernate.hbm2ddl.auto" S value="update"/> ... </util:map> } </property></gorm:sessionFactory> GORMイベント - イベントbeforeInsert,beforeUpdate,beforeDeleteに、さらにafterInsert, afterUpdate and afterDeleteが追加された。 :String] any = [name 他に、 基本型(String,Integer)、 Enum でのコレクション。 static hasM .read( 1) 読み取りのみのオブジェクト取得。ソートのデフォルト値の設定。 def b ook = Book バッチフェッチ。 static m apping = static mapping = { sort "na { ダイナミックファインダの向上。 batchSize 15 me" books so rt:"titl joinTable! } } e" generatorの指定 static mapping = { id generator:"org.hibernate.id.enhanced.SequenceStyleGenerator", params:[sequence_name:item_id_seq,initial_value:1000,increment_size:1] }
  • 11. GSP(Groovy Server Pages)GSPでのJSPタグライブラリのサポート <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> JSPタグを使う! <fmt:formatNumber value="${10}" pattern=".00"/> メソッドのように使う! ${fmt.formatNumber(value:10, pattern:".00")} _tableRow.gspの中身テンプレートネームスペース <tr> <td class="prop">${label}</td> <td class="value">${value}</td> </tr> ネームスペースtmpl+ _ を無くしたファイル名で呼び出す。 <tmpl:tableRow label="one" value="two" />Server Side Includes - <g:include>タグで別のコントローラ、アクションを呼び出せる。 <g:include controller="book" action="list"/> コントローラあるいはタグライブラリでは、メソッドとして呼出も可能! def content = include(controller:"book", action:"list")パフォーマンスの改善
  • 12. データバインディングサブセットプロパティ 今までは、以下の方法で全プロパティがバインドされました。 person.properties = params サブセットプロパティの対応で、指定した項目のみバインド! person.properties["firstName","lastName"] = params 同じ方法でアクセスも可能! person.properties["firstName","lastName"].each { println it }コレクション型への対応 <g:textField name="books[0].title" value="the Stand" /> <g:textField name="books[1].title" value="the Shining" /> <g:textField name="books[2].title" value="Red Madder" /> 自動的に収集してまとめてくれます。
  • 13. コントローラ関連RESTfulマッピングの指定方法の向上  "/books"(resource:"book") の指定で、  GET, PUT, POST, DELETEを自動的に、 アクション"show", "save", "update", "delete"に設定多重サブミット対策フォームに、<g:form useToken="true">を指定すると、コントローラ内で、withFormを使用してフォームの多重サブミットを判別できるようになった。 withForm { // 正常なリクエスト }.invalidToken { // ダブルクリックしたな?リクエストのフォワード } forward controller:"home", action:"index"エラーハンドルの宣言 UrlMappingsにエラーハンドルの宣言が可能に。 "500"(controller:"errors", exception:IllegalArgumentException)
  • 14. Scaffoldingダイナミックスカッフォルディングとテンプレートダイナミックスカッフォルディング時のテンプレートは、grails install-templates コマンドでインストールされたテンプレートを使用するようになった。ダイナミックなのに微調整できる!スカッフォルドでのM-to-M対応!
  • 15. その他Maven統合Ant + Ivy統合 - Grailsが生成するAntのbuild.xmlとivy.xmlで、Grailsがインストールされていない環境(CIサーバ等)でもビルド可能。Log4j DSLEnvironment(環境) 、Metadata(メタ情報) API MENT EL OP nme nt.DEV nv iro rrent ls. util.E tad ata.cu grai .u til.Me e ta = grails ationNam c de f metada data.appli eta pri ntln m非インタラクティブモードBeanBuilderでSpringネームスペースに対応テストフレームワーク - Testingプラグインは、本体に統合!Encrypted Data Sources - データソースパスワードの暗号化
  • 16. まだまだ有ります。 ここからは、チーム開発に便利!?な・・
  • 17. BuildConfig.groovyプロジェクトのビルドに関連する情報をカスタマイズできる定義ファイルGrails-1.0.x系では、Grailsのコンパイルされたクラスなどは、$USER_HOME/.grails/<バージョン>/以下に固定されていましたが、Grails-1.1からは指定変更可能になりました。ファイルの設置場所$PROJECT_HOME/grails-app/conf/BuildConfig.groovy中はこんな感じ↓ grails.project.plugins.dir="work_tmp/plugins" grails.project.work.dir="work_tmp/work" grails.plugin.location."feeds"="./plugins/feeds-1.4"
  • 18. BuildConfig定義できる内容※主な項目のみgrails.project.work.dir プロジェクトの作業ディレクトリ (このディレクトリ以下に classes,resources,plugins等が配置される) デフォルト:$USER_HOME/.grails/<バージョン>/projects/<プロジェクト名>/作業ディレクトリ以下を個別に指定も可能grails.project.plugins.dir プラグインのディレクトリ。 grails-1.0.xでの、$PROJECT_HOME/plugins デフォルト:$USER_HOME/.grails/<バージョン>/projects/<プロジェクト名>/pluginsgrails.project.test.reports.dir テストリポート書きだし先。grails.project.class.dir クラスの書きだし先。
  • 19. 何でBuildConfigで設定変える必要があるの?個人的な意見・・・。grails.project.class.dirのように、コンパイルクラスを置く場所はよいとして、Grails-1.1からプラグインの場所が変わってしまったので、Grails-1.0.xを使っていたユーザには、プラグインのディレクトリが近くにいないのは・・・・。で、 grails.project.plugins.dirで場所を変更すると、プラグインの場所が近くで管理できるのでわかりやすい。ビルドサーバなどでの事情もあるし! 変な所にファイル置かれても・・ じゃあ、変えられればOKでしょ! 管理できるのは良いこと!
  • 20. プラグイン個別のパス指定プラグインを個別に指定することもできます。grails.plugin.location."ext"="./plugins/ext-0.1"grails.plugin.location."form-maker"="./plugins/form-maker-0.1"grails.plugin.location."rhino"="./plugins/rhino-0.1.1"grails.plugin.location."waku-script"="./plugins/waku-script-0.2-SNAPSHOT"grails.plugin.location."yui"="./plugins/yui-2.6.0"grails.plugin.location."resources"="./plugins/resources-0.1"grails.plugin.location."taggin"="/works/experiment/grails-taggin/trunk"プラグイン開発に便利!
  • 21. どの辺がチーム開発? で、ここで強引に プラグインの話!
  • 22. Grailsプラグインとは?自分のプロジェクトに便利な拡張機能を追加できる 公式プラグインも有ります!ユーザ認証機能とか、メールとか、コマンド install-pluginで簡単に追加できるそもそもGrails自身がプラグインの集合体!通常のGrailsプロジェクトと構造が同じ! ∼GrailsPlugin.groovyファイルの有無詳しくは!
  • 23. ん?プラグインで機能分けすると、開発を分担できそうだ! プラグインA インストール (プロジェクトの一部の機能) プラグインB インストール (プロジェクトの一部の機能) メインプロジェクト グラフ機能プラグイン インストール (今後も再利用できそうな機能) ユーザ認証プラグイン インストール (公式のプラグイン+カスタマイズ)この辺がチーム開発!+再利用性!
  • 24. 前から有るのに、何故いまさら主張するの?Grails-1.0.xでは、プラグインはプロジェクトのディレクトリにインストールされて、チーム開発で使うと、結構それぞれがプラグインの内容をさわってしまって・・・・結局、後でまとめ直したりと・・・プロジェクトによってプラグインの派生ができてしまったりで、便利のようで実は管理しにくかったのです。
  • 25. そこで!
  • 26. Grails-1.1からの、プラグインの新機能グローバルプラグイン複数のプラグインリポジトリ他動的なプラグイン自動解決 (Automatic Transitive Plugin Resolution)プラグインでのモジュール式アプリケーション開発プラグインスコープと環境定義
  • 27. グローバルプラグイン"-global"オプションを指定することによって、プラグインはグローバルプラグインとして管理されます。インストールされたプラグインは、同じ場所に保管されて、一度インストールすれば、同じバージョンのGrailsで他のアプリケーション開発するときは再度インストールすることなく使用することができます。 grails install-plugin acegi -global
  • 28. グローバルは、 必ず毎回とりこまれる 有る意味便利だけど・・・・・物によっては不便!? orz
  • 29. そんなあなたにこんな新機能!プラグインでのモジュール式アプリケーション開発他動的なプラグイン自動解決(Automatic Transitive Plugin Resolution)複数のプラグインリポジトリ
  • 30. プラグインでのモジュール式アプリケーション開発Grails-1.1からプラグインは基本的にapplication.propertiesにメタ情報で管理されます。 app.version=0.1 plugins.acegi=0.5.1 app.servlet.version=2.4 ン app.grails.version=1.1-SNAPSHOT 名= バージョ plugins.hibernate=1.1-beta3 s.プ ラグイン app.name=relationsample pluginプラグインの追加削除、バージョン変更は、プロジェクトのapplication.propertiesの内容を変更するだけでよいのです。これで、他のチームメンバーへのプラグイン変更通知も楽々。
  • 31. しかも!
  • 32. 他動的なプラグイン自動解決他動的なプラグイン自動解決 (※仮翻訳)(Automatic Transitive Plugin Resolution)application.propertiesの情報を元に、自動的にバージョン確認して、インストール、アンインストールを行ってくれます。間違った操作を防げます!
  • 33. これって、 プラグインリポジトリのプラグインにしか対応していないぢゃん!
  • 34. 複数のプラグインリポジトリGrails-1.1から独自のプラグインリポジトリを設定することができるようになりました。設定方法 USER_HOME/.grails/settings.groovy 又は、grails- app/conf/BuildConfig.groovyに情報定義。 例えば、チームのプラグインリポジトリに使用するSvnの Urlが、"http://127.0.0.1/gp"だとしたらgrails.plugin.repos.discovery.local="http://127.0.0.1/gp"grails.plugin.repos.distribution.local="http://127.0.0.1/gp"grails.plugin.repos.discovery.リポジトリ名称="リポジトリへのHttpベースのURL"grails.plugin.repos.distribution.リポジトリ名称="リポジトリへのHttpベースのURL"
  • 35. 複数のプラグインリポジトリ独自のプラグインリポジトリ設定をすることによって、プラグイン関連のコマンドlist-plugins,install-pluginで設定したプラグインリポジトリも同時に参照してくれます。個別に参照する場合は、以下のように設定したリポジトリ名称を指定します。grails list-plugins -repository=リポジトリ名称
  • 36. 独自のプラグインリポジトリに プラグインをリリースプラグインプロジェクトディレクトリでrelease-pluginに-repository=対象リポジトリ名称を指定して実行。 grails release-plugin -repository=リポジトリ名称 以下の内容を行ってくれます。1. プラグインのパッケージング2. プラグインリポジトリへのプラグインの追加(grails-プラグ イン名の階層に、tags trunkを追加)3. プラグインのバージョンを自動でタグ切り4. プラグインリポジトリにある、プラグイン管理用 の.plugin-meta/plugins-list.xmlを更新
  • 37. チーム用のプラグインリポジトリ!
  • 38. いろいろGRAILS-1.1は便利です。
  • 39. 元々 プラグインA インストール (プロジェクトの一部の機能) プラグインB インストール (プロジェクトの一部の機能)メインプロジェクト グラフ機能プラグイン インストール (今後も再利用できそうな機能) ユーザ認証プラグイン インストール (公式のプラグイン+カスタマイズ)
  • 40. これから! チーム用プラグインリポジトリ Grails公式プラグイン チーム用リポジトリプラグイン自動解決 独自プラグインリポジトリで管理 メインプロジェクト プラグインB (プロジェクトの一部の機能) 使用する プラグインの情報を プラグインA 定義 (プロジェクトの一部の機能) チェックアウト グラフ機能プラグイン (今後も再利用できそうな機能) チームメンバー ユーザ認証プラグイン (公式のプラグイン+カスタマイズ) プラグイン自動解決
  • 41. まとめapplication.propertiesにプラグイン情報を保持するため、チームメンバー間でのプラグインバージョン管理が楽に!BuildConfig.groovyで、開発時のビルド場所や、プラグイン情報をまとめやすくなった。 見えないゴミ減る! プラグイン開発時のソース分けが以前より楽に!開発プロジェクト内容の切り分けをプラグイン別にし、チーム用プラグインリポジトリを活用することで、開発した内容をプラグインとしての再利用が期待できる!
  • 42. つづく.......

×