Download - 第4回 g* ワークショップ はじめてみよう! Grailsプラグイン
はじめてみよう! Grailsプラグイン
初級編
2009/07/22 @Yokohama
def speaker = new Cast(name:”T.Yamamoto”,version:”G*4-2009-07-22”)
自己紹介名前:山本 剛 (やまもとつよし)
所属:株式会社ニューキャスト組版屋、印刷系Webアプリ開発など。案件は90%Grailsを使ってます。
JGGUG(じぇいがぐ) 名古屋支部 担当です。「Grails徹底入門」9-11章を書きました。 Grails Acegi Plugin作った人。
ブログhttp://d.hatena.ne.jp/mottsnite/
Grailsって?Grails, the Platform (DGG2引用)
Groovy,Java,Spring,Hibernate等を使ってアジャイルに開発!
GrailsGrailsGrails GroovySpring Hibernate SiteMesh
Groovy
基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)基礎部分はJava(+Groovy)JVMJVMJVMJVM
•ダウンロードして 解凍!
•http://grails.org/Download
•環境変数設定•export GRAILS_HOME=/opt/grails-1.1.1•export PATH=$PATH:$GRAILS_HOME/bin
Grailsプラグイン概要・基礎Grailsにあらゆる機能を実装する仕組み。簡単インストール grails install-plugin acegi
Grails本体もプラグインで構成されている。例えば、サービス実装、コントローラー実装、ドメイン実装、hibernate実装なども。
Grailsアプリケーションを、そのままプラグイン化可能※一部の機能を除く。
活発な公式プラグインコミュニティーチーム専用のプラグイン管理もできる
プラグインの作り方
プラグイン開発・難易度難易度[低] 通常のGrailsアプリケーション開発ができれば簡単に開発できる内容 JavaScriptファイル、CSSファイルなどを提供する 基本アーティファクトなどを提供する
難易度[中] Springフレームワークの知識、サーブレットなどの知識が必要 Springフレームワークを用いた機能拡張 web.xml操作
難易度[高] ダイナミックメソッド追加→GroovyのExpandoの知識が必要 Gantスクリプトを追加→GantおよびAntの知識が必要 独自アーティファクトの追加
どんな時に作るの?思いたった時こそが!よく使う機能をみつけた時!パッケージされたコピーもと!?ザックリ直せるコピーもと!?管理できるコピーもと!?
完成したサイト全体をプラグイン化完成した機能全体をプラグイン化
単純なプラグインを作ってみようDEMOGrailsプラグインプロジェクト作成 grails create-plugin jggugercd jggugerプラグインをパッケージgrails package-plugin
GrailsプラグインプロジェクトGrailsプラグインプロジェクトの内容は通常のGrailsアプリとほぼ同じプラグイン定義用ファイルプラグイン名GrailsPlugin.groovy
インストール時などに動作するスクリプトファイルも付属してる。
デモ既存Grailsアプリの一部をプラグイン化!ザックリ!とりあえずザックリ!Jggugerプラグインロゴ画像&スタイル(CSS)をプラグイン化MiniWikiEngineプラグインWikiEngineタグリブをプラグイン化
プラグイン専用の変数pluginContextPathJS,CSS等がプラグインのパスになるため、パスを自動解決するための変数例えば grails-some-0.1の場合 パスは plugins/some-0.1/<g:resource dir="${pluginContextPath}" file="css/myplugin.css"/> ↓ ↓ ↓ ↓ ↓ ↓ ↓<g:resource dir="plugins/myplugin-1.0/css" file="myplugin.css"/>
おまけ Grailsアプリからプラグイン側のテンプレートを参照<g:render template="header" plugin="yuiCss" />
プラグイン管理・リポジトリGrails-1.1から管理が容易になった。
プラグイン開発者BuildConfig.groovyで直に参照も可能。チーム専用プラグインリポジトリ。[デモ] grails release-plugin -repository=local
配信専用プラグインリポジトリ。プラグイン利用者
基本は、application.propertiesに記述される。Grailsアプリ起動時に自動解決。
ちょっとした、web.xml追加doWithWebDescriptor
def doWithWebDescriptor = { webXml -> def servletElement = webXml.'servlet' def lastServlet = servletElement[servletElement.size()-1] lastServlet + { 'servlet' { 'servlet-name'("simpleResource") 'servlet-class'("SimpleResource") 'load-on-startup'("1") } } def mappingElement = webXml.'servlet-mapping' def lastMapping = mappingElement[mappingElement.size()-1] lastMapping + { 'servlet-mapping' { 'servlet-name'("simpleResource") 'url-pattern'("/resources/*") } }}
ちょっとした、Bean追加doWithSpring
def doWithSpring = { javascriptService(net.xmldo.grails.plugins.rhino.services.RhinoService){bean-> bean.autowire = true }}
心がけること汎用性依存を気にするdef dependsOn = [:]
優しさドキュメントdef documentation = "サイトURL"
使いやすさなるべく簡単に使えるように簡単なコマンドで動くと便利!
プラグイン活用予想図Grails公式プラグイン
チーム用プラグインリポジトリ
メインプロジェクト
使用するプラグインの情報を
定義 プラグインA (プロジェクトの一部の機能)
グラフ機能プラグイン (今後も再利用できそうな機能)
ユーザ認証プラグイン (公式のプラグイン+カスタマイズ)
プラグインB (プロジェクトの一部の機能)
チーム用リポジトリ
独自プラグインリポジトリで管理
チームメンバー
チェックアウト
プラグイン自動解決
プラグイン自動解決
プラグイン
メタ情報で自動管理
プラグイン
サイトGroovy公式http://groovy.codehaus.org/Grails公式http://grails.org/JGGUG公式http://www.jggug.org
Grails.jphttp://grails.jp/wiki/Grails関連のAPIリンク集http://grails.jp/links.html