Grailsのススメ(仮)
       「天は人の上に人を造らず、人の下に人を造らず」
                                  @JGGUG 2010年7月24日
def speaker = new Cast(name:"T.Yamamoto",version:"G*-2010-07-24")




                                                                1
自己紹介
山本 剛
仕事:
テクニカルDTPアーキテクト
twitter: @tyama
はてな id: mottsnite
ブログ↑
JGGUG名古屋支部長
Grails Acegiプラグインのコミッター
「Grails徹底入門」共著 9∼11を執筆
                    2
最近マイコミ記事。
書かせて頂きました。
http://bit.ly/a40O4G




                  3
実は以前にも。
uehajさんと一緒にこっそり記事書いてました




          4
・・・のすゝめ

   5
Groovy!?

   6
Groovyハ言語ノ上ニ言語ヲ造ラズ、

       言語ノ下ニ言語ヲ造ラズ。




       ※いろいろな解釈ができる・・・・。
           7
Java自体をリプレースする物

では無く、Javaでの開発を

 柔軟に手助けする言語。

           Groovy is Java
           Java is Groovy
       8
Grails!?

   9
?
                    ??
Grailsはフレームワークの上に
       フレームワークを造らず、
フレームワークの下に
       フレームワークを造らず。

   ?
  ??
                ん??・・・・。
           10
Grails!?

   11
簡単に。
   Springフレームワークを、
Groovyでダイナミックに柔軟にして、
 Webアプリケーション開発をする
 フルスタックフレームワーク。

          12
Grailsのみで、
Webアプリケーションが、
サクサク開発できます。


既存の技術を活用して。


      13
信頼性!

     Java。

Spring フレームワーク。

   Hibernate。

    Sitemesh。

    Tomcat。

        14
そしてそれらで、


   15
CoCな開発。TDD。

ドメインドリブン開発。

  DSLで読みやすく、わかりやすく、

    必要な部分記述する。

               Groovyで記述。

          Javaっぽく書ける。


          16
しくみ。
        領域のルールを定義する。実装する。
                        => Artefact。 DSL。

                      DSL
        規約        ドメイン固有言語。

                Groovy プログラム
                                    機能的に使う

Plugins - 再利用&組換え可能にモジュール化。
                                   DSL実装
     Artefact                  ドメイン固有言語の動作実装。
 ルールを動作させる仕組み。


                                                17
Plugins - 再利用&組換え可能にモジュール化。
                                  DSL実装
       Artefact            ドメイン固有言語の動作実装。
   ルールを動作させる仕組み。




その領域のフレームワークを開発する。               他のフレームワーク
  DSLの実装をフレームワーク化する。        他のフレームワークをDSLで、

                                動作できるように実装する。
             モジュール化する。


フレームワーク内でフレームワークを柔軟に使ったり。

 フレームワークからフレームワークが派生したり。
                                                18
Grailsはフレームワークの上に
         フレームワークを造らず、
フレームワークの下に
         フレームワークを造らず。

フレームワークでありながら、他のフレームワークと共存し、
      さらにフレームワークを開発して派生できる。


                  ※強引!?・・・・。
             19
Grails聖書から、
 大事な言葉。


  柔軟さを犠牲にせず

 シンプルさをアーカイブ

          20
Grailsの概略図
基本部分はJavaで実装されている。
 中身は、おおよそ、Java(50%)-Grooy(50%)で実装
DIコンテナにSpring
O/RマッパーにHibernate

           Grails                     Groovy
 Spring   Hibernate        SiteMesh    DSL

          基礎部分はJava & Groovy

                 JVM
                      21
GrailsはSpring!
     Grailsは、形を変えたSpring-MVC
     Spring + Hibernateを抽象化したものである
     プラグインの仕組みで
     Springフレームワークの定義を自動化
     Spring Beanビルダー




22   参考資料: “Grails for Spring Developers” by Graeme Rocher
Out of the Box
     Hibernate上に構築された、簡単に利用できる
     O/Rマッピングレイヤ            データベース
     表現豊かなビューテクノロジー View
     Groovy Server Pages (GSP) MVC2
     コントローラレイヤは Spring MVCを利用
     コマンドラインスクリプト環境には ビルドシステム
     Groovy版のAnt Gant
     リロード可能に設定された組込 Tomcat
                                   コンテナ
     組込 Spring DSLによる依存注入     DI    国際化
     SpringのMessageSourceで実装されたi18n対応
     Springフレームワークのトランザクション実装による
23   サービスレイヤのトランザクション トランザクション
Grails

クイックスタート!

    24
Quick Start !!
 ダウンロードして 解凍!
 http://grails.org/Download

 環境変数設定
 export GRAILS_HOME=/opt/grails-1.3.1
 export PATH=$PATH:$GRAILS_HOME/bin




                       25
Quick Start !!
 grails create-app myapp
 cd myapp
 grails create-domain-class work
 ドメインクラス編集
 grails create-controller work
 コントローラに “static scaffold = true” 追記
 起動: grails run-app

 内容がまとまったら
 grails generate-all chat
 そして調整
                            26
どうして動いた?
コマンドターゲット
プロジェクト作成、各種コード生成、アプリケーション起動等
をコマンドターゲットで行う。  % grails run-app
                % grails test-app
メモリ上で動くデータベース
HSQLDBがバンドルされている。
 ファイル動作も可能。
 もちろん運用時はHibernate対応のDBが利用可能
サーブレットコンテナ
組込Tomcatがバンドルされている。
リロードできる。但し一部不安定 (ry

スカッフォルド
ベースになるコードを生成 (動的 or 静的)
簡単なCRUDのみで良いマスタはこれでも充分。             27
Grailsの機能
 GORM (Grails O/R Mapping)
 簡単なタグライブラリ
 URLマッピングDSL
 REST対応
 コンテントネゴシエーション
 Webフロー
 Filter
 AJAX
 Ivyベースの依存性管理
 テスト環境
 クラウドへのデプロイ       28
Grails

     プラグイン
29
Grailsの仕組み                                       ur ity
                                             S ec




                     low
    Controller
                              i1 8n
                                                              Flex




                      bF
                   We
                 Codec                   Quartz
    Domain
                                                          他の
                                                    プラグイン
Grails                                      lug
                                               in
                                                               JMS
                                         MyP
     Core                  Quartz

                                                     ag gin
               Service          UrlMapping          T
     Filters
                                                                     30
Grailsプラグイン
Grailsコアもプラグイン!
簡単インストール
 grails install-plugin acegi

活発なプラグインコミュニティ
 430種類以上!

簡単開発
 Grailsでの開発経験があればできます。
 grails create-plugin myplugin
 grails package-plugin
                          31
Grailsプラグイン
チーム開発 - 公式プラグインのみではない!
 自分のプラグインリポジトリ
 SVN
 Maven


モジュラ開発
 インラインプラグイン
 BuildConfigにプラグインプロジェクトパスを指定。


将来
 OSGi化されたプラグイン?
              32
最近のGrails事情


     33
マメな更新
リリース早っ!
2010-05-11 1.3.0 リリース!
 ∼6日後
2010-05-17 1.3.1 リリース
 ∼1ヶ月後
2010-06-17 1.3.2 リリース
 ∼21日後
2010-07-08 1.3.3 リリース
 ∼21日後
2010-07-29 1.3.4 (予定)
                34
Grails 1.3.x


     35
Grails1.3.x
 詳しくは公式リリースノートを参照。
  http://www.grails.org/1.3+Release+Notes
 ブログに、まとめてあります。
  http://d.hatena.ne.jp/mottsnite




                        36
Grails1.3.x
 Groovy1.7系に更新!
 JUnit4対応
 Mavenリポジトリ対応 maven-publisher
 プラグイン依存性宣言
 プラグインモジュラ開発の向上
 Grails docのPDF書きだし(英語のみ)
 GORM派生プロパティ対応
 GORMでのダーティーチェック
 ネームドクエリに、追加クライテリア、ネスト、チェイン
 クエリーキャッシュの向上
 GSP joinタグ、unlessタグ
 グローバルアプリケーションレイアウト
 フィルタオーダリング
 TagLibテスト向上
              37
Grails1.3.1
 フィルタオーダリング
   dependsOnプロパティを定義することで、フィルタの実
   行順番を定義できる。
                  class MyFilters {
                      def dependsOn = [MyOtherFilters]
                      def filters = { … }
                  }



 GSP タグ "unless" <g:unless   test="${cacheEnabled}">
                     Tag Body Goes Here
                   </g:unless>



 名前つきクエリーのネスト
 TagLib テスト
                     38
Grails1.3.2
 Groovy 1.7.3、Spring 3.0.3 更新
 スクリプトのもしかして機能
           ~/workspace/testapp $ grails create-doman-class
           testapp.Author
           Welcome to Grails 1.3.2 - http://grails.org/
           Licensed under Apache Standard License 2.0
           …
           Script 'CreateDomanClass' not found, did you mean:
              1) CreateDomainClass
              2) CreateApp_
              3) CreateScript
              4) CreateFilters
              5) CreateUnitTest
           Please make a selection or enter Q to quit:



 findメソッドのクエリーキャッシュサポート
    Book.findAll(
      "from Book as b where b.author=:author",
       [author:'Dan Brown'], [cache: true])
                                                                39
Grails1.3.3
     バグフィックス
     Database Mappingに、insertable、
     updateable
        class Book {
            String title
            static belongsTo = [author: Author]
            …
            static mapping = {
                author insertable: false
                author updateable: false
            }
        }




40
Grails1.3.4 予想。
 Groovy 1.7.4 に更新?
 バグフィックス
 Maven Publisher プラグイン更新

 未対応の内容は1.3.5へ引き継がれます。




               41
最近リリースされた

 個人的注目の

  プラグイン


    42
プラグインカタログ

 Application Info
 http://grails.org/plugin/app-info
 Grailsアプリケーションのあらゆる情報を閲覧でき
 る。
 参考資料 http://burtbeckwith.com/blog/?p=344

 Sharding Plugin
 http://grails.org/plugin/sharding
 データベースシャーディング
 参考資料 http://jeffrick.com/2010/07/13/a-grails-
 plugin-for-sharding/
                      43
プラグインカタログ
-認証プラグインの八岐大蛇?- Spring Security 8つのプラグイン
  http://burtbeckwith.github.com/
 1. Spring Security Core plugin
  S2のコアプラグイン。 Acegiをベースに開発。

  リリースされてる
    2. Spring Security   OpenID plugin - OpenID実装
    3. Spring Security   ACL plugin - ドメインオブジェクトセキュリ
    ティ (ACL)
    4. Spring Security   CAS plugin - CAS対応
    5. Spring Security   LDAP plugin - LDAP対応
  まだリリースされていないがリポジトリ確認
    6. Spring Security OAuth Consumer - OAuth対応
    7. Spring Security OAuth Provider - OAuthプロバイダー
    8. Spring Security UI - ユーザ管理UI提供
                                44
プラグインカタログ

 SmartGWT
 SmartClientのJavaScriptコンポーネントを使って
 GWTアプリケーションを構築するためのAPIを実装
 したプラグイン。
 http://grails.org/plugin/smartgwt
 http://code.google.com/p/smartgwt/

 Stories
 http://grails.org/plugin/grails-stories
 他のテストフレームワークに依存しないBDDプラグ
 イン
                  45
プラグインカタログ

 Geolocation
 http://grails.org/plugin/geolocation
 ブラウザの位置情報通知機能(Geolocation API)を扱
 うプラグイン

 ダイナミックコントローラ
 http://grails.org/plugin/dynamic-controller
 コントローラを別管理して、定義により複数のコン
 トローラをミックスして使えるようにする。



                    46
その他。


 47
Grails Plugin Collective
 http://grails.org/Grails+Plugin+Collective
 Grailsプラグインをメンテナンスする、ボラ
 ンティア団体
 主な活動は、バグFix、テスト、新しいGrailsのリ
 リースで動作確認。
  grails-fixtures
  grails-joda-time
  grails-rendering
  grails-selenium-rc
  grails-springcache


                       48
GrailsとNoSQL
 プラグインがあります。
 CouchDB
 http://grails.org/plugin/gorm-couchdb
 HBase
 http://grails.org/plugin/gorm-hbase
 MongoDB
 http://grails.org/plugin/gorm-mongodb
 Neo4j
 http://grails.org/plugin/neo4j
 Cassandra
 http://grails.org/plugin/cassandra
                       49
inconsequential



       50
inconsequential
 GrailsでのNoSQL実装。

 iNconSeQuentiaL
 意味 = 筋の通らない。論理的でない。
 inconsequentialなデータベースに対応するという意
 味であろうと、勝手に解釈。

 現状、詳細な説明が無いのでソースコード
 を読むしかない。


               51
inconsequential
 ソースコードによると。
 コアがあり。
 各NoSQLの実装。
  appengine、cassandra、redis、JCR
 Grails アダプター
  GrailsApplicationMappingContext
   org.springframework.datastore.mapping.MappingContext
  AdaptedDomainClass、AdaptedDomainClassProperty
 そして、runtime-dynamic。
  ソースコードを読むと、PersistentEntityにメソッドを追
  加してダイナミック動作させている。

                           52
inconsequential
 Graeme氏がつぶやいた参考になるコード。




             53
inconsequential
 そういえば、Redisは、VMwareですね。
     Springが持って無くてもVMwareが持ってるって事か・・。
Redisとは?
 オープンソースとして開発されているKVS
 利用実績Github,Craigslist,The
 Gardian,Engine Yard等。
 key-value型、リスト型、集合型、順序付き
 集合型などのデータ構造が扱える。
 1対Nのマスター・スレーブ構成に対応。


http://code.google.com/p/redis/


参考資料 http://www.atmarkit.co.jp/news/201003/16/redis.html
                           54
inconsequential
 リリース時期は?




             55
過去の自分の資料も、

参考になるらしい。
         スライドは、
 http://www.slideshare.net/tyama



               56
見出しだけ日本語

Grailsドキュメント公開
  公式サイト
  http://grails.org/doc/latest

  日本語 Japanese doc.
  http://grails.jp/doc/latest
Q&A


 58
予告
Grailsプラグイン攻略


           発表日未定
      59
告知
JGGUG 名古屋支部 主催

「もくもくGroovy」
 できる限り、毎週木曜日 19:00から 開催。

  あなたも、2時間集中してGアスタな、

     もくもくをしてみませんか?
           60
Thank you.




   日本Grails/Groovyユーザーグループ
   http://www.jggug.org/
                 61

Grailsのススメ(仮)