SlideShare uma empresa Scribd logo
1 de 74
Baixar para ler offline
1
2
•   仕事

    •   newcast inc. ってデザイン会社で、
        印刷系パッケージソフト開発。あと経営。

    •   主に、Grails,Groovy,Java,Obj-C,人材等を扱います。

•   Grailsの経歴

    •   2006/7 旧Grailsドキュメント翻訳。

    •   2006/12 Acegiプラグインを公開。

    •   2007/10 ”Grails eXchange 2007”に、スピーカーとして参
        加。

    •   2008/8 Grails徹底入門 共著。

    •   2006 - 201X Grails日本語リリースノートを即配信を趣味と
        してる。                 3
4
• 7/1 富士山 山開き
• 7/2 キャラ・スーンの誕生日(ZZ)  
 ミーア・キャンベルの誕生日(SEED DESTINY)

• 7/3  2005年にGrails最初のコミットされた日!
• 7/4  アメリカ独立記念日!
• 7/5  @tyama 誕生日!
• 7/6「プログラミングGroovy」発売!
• 7/7 七夕!
• 7/8 質屋の日!     5
• プログラミングGROOVY [単
 行本(ソフトカバー)]

• 価格: ¥3,360




               6
7
8
9
10
• ある程度の。
 • 最新のWeb開発アーキテクチャを知る事ができる。
 • 最先端・流行のJava開発を知る事ができる。
• Grailsでの開発
 • 開発効率の追求。(究極なDRY) 
 • シンプルかつ柔軟。(DSL) 
 • DDD。
• ただし!
 • 柔軟過ぎて質の悪いアプリケーションも構築できる。
 • 意外と作り手によっては、おかしな物になる。
             11
12
1.4にしておくに
は、もったいない
ぐらい内容が良い
から2.0になった!




             13
14
変わる可能性もあるので、
わかる範囲でお伝えします。




  動く動かないの前に、
自分の環境も確かめましょう。
      15
•コア+その他。                                      •DB
  Groovy 1.8, Spring 3.1 M1, Hibernate          基本データベースをH2への変更
  3.6,Servlet 3.0, Tomcat 7への更新。                DBコンソール
  Javaエージェントで開発時リロード改善                          複数データソースサポート
  パフォーマンス強化・速度向上!                               マイグレーションとリバースエンジニア
  新しいコンソールUIとインタラクティブ                           リング
  (interactive)モード
                                              •テスト
  スカッフォルドUIがHTML5に!                             MixinベースUnitテスト
  エラーレポートとスタックトレース表示                            Spockもサポートした新しいテストAPI
•リソース                                           Unitテストスカッフォールディング
  静的リソースハンドリング機能                                強化されたユニットテストのコンソール
  PrototypeからjQueryへ                            への書き出し
•GORM                                         •プラグイン
  GORM API大幅改良、機能強化                             バイナリープラグイン
  AST変換を使用したGORM API                            プラグイン使用統計トラッキング
  抽象クラス継承のサポート                                  プラグイン開発用のAST変換API

                                         16
17
• 注意!
 BuildConfgで
 「grails.project.work.dir="target/work"」を
 定義してると起動しないよ!

成功例




                   18
19
20
21
• Groovy 1.8, Spring 3.1, Hibernate 3.6,
  Servlet 3.0, Tomcat 7への更新。

• Javaエージェントで開発時リロード改善
• パフォーマンス強化・速度向上!
• スカッフォルドUIがHTML5に!
• 新しいコンソールUIとインタラクティブ
  (interactive)モード

• エラーレポートとスタックトレース表示
                      22
• Groovy 1.8
 • 超強化されたGroovyをバンドル
• Spring 3.1
 • SpringプロファイルとGrails環境のブリッジ。
• Servlet 3.0
 • Asyncとか個人的には注目してる。
• Tomcat 7
• Hibernate 3.6
              23
• Javaエージェントの実装により、未サポート
 だった静的型のサービス、ドメインクラス等の
 リロードが可能に。

• -javaagentオプションにSpring-Loaded指定
  して実装されている。

• 起動時の指定でON/OFF可能。
      % grails -noreloading




                   24
http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/




     GSPが再度最適化がされた!
                             25
26
Firefox5だと


<input type="number" name="price"
     required="" value="" id="price" />



                   27
• コンソール表示が1行で表示されるように!
• grails (Ent) で、インタラクティブモードに突
 入。タブ補完、コマンド履歴有り。(jline使用)




               28
• grails (Ent) で、インタラクティブモードに突入
 するので。
     % grails --help
     % grails -version




                    29
• Entでの前コマンド再実行が無くなった。


• でも、クラス名は補完。


            30
31
• ソースツリーのお掃除!
• Gradle使ってる人参考に
 なると思う。




              32
33
• 静的リソースハンドリング機能
 • resourcesプラグインがコアへ           (プラグイン提供)


 • http://grails.org/plugin/resources

• PrototypeからjQueryへ
 • リソースの改善と平行して、jQueryへの移行
   も行われた。


                      34
• js,cssをモジュール管理
• リソースをDSLで定義
modules = {
    core {
        dependsOn 'jquery, utils'
        resource url: '/js/core.js', disposition: 'head'
        resource url: '/js/ui.js'
        resource url: '/css/main.css',
        resource url: '/css/branding.css'
        resource url: '/css/print.css', attrs: [media: 'print']
    }
    utils {                                          <html>
        dependsOn 'jquery'                              <head>
        resource url: '/js/utils.js'                        <r:require module="jquery"/>
    }                                                       <r:layoutResources/>
    forms {                                             </head>
        dependsOn 'core,utils'
                                                        <body>
        resource url: '/css/forms.css'
                                                            …
        resource url: '/js/forms.js'
                                                            <r:layoutResources/>
    }
                                                        </body>
}
                                                   </html>
                                            35
• 連動するプラグイン
 • キャッシュ
   • http://grails.org/plugin/cached-resources
 • gzip
   • http://grails.org/plugin/zipped-resources


                      36
37
• まだM1だから、いきなり説明不足。
• 公式Doc 6.7 AJAXを試しても。
   • <g:javascript library="jquery"/>
   • 動きません
   • Grails初心者キラー。


                      38
• How?
                                  main.gsp <g:layoutHead/>
                                  <r:layoutResources/>
                                                JS

AJAX


        <g:javascript library="jquery" plugin="jquery"/>
        <g:javascript library="jquery"/>
        <r:require modules="jquery"/>
2.0
<r:require modules="jquery"/>



                                    Config.groovy
                                    grails.views.javascript.library="jquery"
                                          39
40
• 基本データベースをH2へ変更
• DBコンソール
• 複数データソースサポート
• マイグレーションとリバースエンジニアリング

• GORM API大幅改良、機能強化
• AST変換を使用したGORM API
• 抽象クラス継承のサポート41
• HSQDB → H2
• BuildConfigに、
 runtime 'hsqldb:hsqldb:1.8.0.10'

• 何ならこれを期に、H2にしてしまおう!
• jdbcの設定も変えないとね!
                     42
• URLに、 /dbconsoleを指定




                 43
• 基本は開発モードのみで使用可能。
 指定する事で productionモードでも可能。
 (セキュリティ必要)
 environments {
     production {
         grails.serverURL = "http://www.changeme.com"
         grails.dbconsole.enabled = true
         grails.dbconsole.urlRoot = '/admin/dbconsole'
     }
     development {
         grails.serverURL = "http://localhost:8080/${appName}"
     }
     test {
         grails.serverURL = "http://localhost:8080/${appName}"
     }
 }


                               44
DataSource.groovy
dataSource {    pooled = true                         ドメインに定義
    driverClassName = 'org.h2.Driver'
    url = 'jdbc:h2:mem:testDb'                       class Book {
    username = 'sa'                                      String title
    password = ''                                        static mapping = {
    dbCreate = 'update'
                                                             datasource 'ALL'
}
                                                         }
dataSource_ds2 {                                     }
    pooled = true
    driverClassName = 'org.h2.Driver'
    url = 'jdbc:h2:mem:testDb2'                      class Comment {
    username = 'sa'                                      String message
    password = ''                                        static mapping = {
    dialect = org.hibernate.dialect.H2Dialect
                                                             datasource 'ds2'
    dbCreate = 'update'
}                                                        }
                                                     }




                                           def book = Book.ds2.get(100)


                                                45
• プラグインで提供。
  詳しくはドキュメントを読みましょう!

• http://grails.org/plugin/database-migration
• http://grails.org/plugin/db-reverse-engineer


                      46
• GORM APIがJavaから使用可能に。
• GORMでの抽象クラス継承のサポート。
• OrCreateとOrSaveクエリーの実装追加。
• 名前付きクエリから関係先の名前付きクエリを
 参照。

• 共有制約とコマンドオブジェクト。

             47
• GORM APIは、Groovy ASTによって、GORM
 エンティティのバイトコードとして注入されま
 す。これによりGORMのメソッドは、Javaコー
 ドから、呼び出したり見たりできます。

    Book book = new Book();
    book.setTitle("The Stand")
    book.save();
    System.out.println(Book.count());
    System.out.println(Book.list());




                      48
• GORMが抽象クラス継承をサポートしました。
 関連リンクやクエリ等を抽象クラスに定義する
 ことができます。
   abstract Media {
        String title
        …
   }
   class Book extends Media {
   }
   class Album extends Media {

   }
   class Account {
       static hasMany = [purchasedMedia:Media]
   }

   ..

   def allMedia = Media.list()



                             49
• ドメインクラスに、findWhereやfindByメソッドに似
    た、nullを返さない、findOrCreateWhere,
    findOrSaveWhere, findOrCreateBy,
    findOrSaveByのクエリーをサポート。

• 実行結果にインスタンスが見つからない場合は、指定
    された値で、新規にインスタンスを作成して返しま
    す。findOrSaveWhereとfindOrSaveByの場合はイン
    スタンスを保存してからインスタンスを返します。
def book = Book.findOrCreateWhere(author: 'Douglas Adams',
                                title: "The Hitchiker's Guide To The Galaxy")
def book = Book.findOrSaveWhere(author: 'Daniel Suarez',
                                title: 'Daemon')
def book = Book.findOrCreateByAuthorAndTitle(
                                     'Daniel Suarez', 'Daemon')
d e f b o o k = B o o k . f i n d O r S a v e B y A u t h o r A n d T i t l e (' D a n i e l S u a r e z ' , ' D a e m o n ' )
                                                             50
• 名前付きクエリがドメインクラスのリレーショ
 ンを含んでいる場合、そのリレーション先の名
 前付きクエリを使用することが可能に。
 class Author {
     static hasMany = [publications:Publication]

     static namedQueries = {
          authorsWithRecentPublications {
              publications {
                  //
                      recentPublications()
                  }
             }
     }
 }
 class Publication {
     Author author
     static namedQueries = {
         recentPublications {//
                 def now = new Date()
                 gt 'datePublished', now - 10
         }
     }
 }
                                     51
• コマンドオブジェクトが共有制約をサポートし
 ました。
 実装方法は以前に追加されたドメインクラスと
 同じです。

   grails.gorm.default.constraints = {
       '*'(nullable: true, size: 1..20)
   }
   grails.gorm.default.constraints = {
       myShared(nullable: true, size: 1..20)
   }
   class User {
       ...
       static constraints = {
           login(shared: "myShared")
       }
   }

                            52
53
• Unitテスト大幅改良!
• フィルター・URLマッピング・ファイルアップ
  ロード・コンテントネゴシエーション・テンプ
  レートビューレンダリング・ドメインクラスク
  ライテリアクエリ

• http://grails.org/doc/1.4.x/guide/
  9.%20Testing.html#9.1%20Unit%20Testing




                      54
• MixinベースUnitテスト
• (未確認)Spockもサポートした新しいテストAPI
• Unitテストスカッフォールディング
 • generate-allでスカッフォールドの内容用のUnitテスト
  が自動生成される。(コード参照)

• 強化されたユニットテストのコンソール表示


                 55
@TestMixin



                    @Mock




@TestFor
           56
• コントローラテストの方法が、
 公式ドキュメントの "9.1" に詳しく掲載!

• リロード良くなったので、
 新コンソール(インタラクティブ)でテストしよ
 う!

• ドメインテスト注意点。
 • Car.findAllByMaker(.....)とかの、フィールド
   (この場合maker)にはインデックス定義必要。
   mappings に maker index:true 。

                 57
58
59
• プラグイン使用統計トラッキング
 • プラグイン使用レポートを収集する機能が実
  装されました。近いうちにプラグイン使用統
  計がGrailsのサイトで公開されます。

• プラグイン開発用のAST変換API
 • @Artefact ??
• バイナリープラグイン

             60
• プラグインを通常のJARファイルとしてプリコ
 ンパイルパッケージ可能になります。
•   Mavenリポジトリで通常のJARファイルで配布可能。

•   バイナリプラグインは他のJARと同じように依存管理が行える。

•   ソースコードを公開しない商用プラグインが可能。

•   通常のJARになることによって、IDE等の環境で扱いやすくなる。


    %grails package-plugin --binary




                    61
62
• 今まではアクションがクロージャで実装されて
 ました。今後はメソッドで実装を推奨します!
 (もちろんクロージャもサポートしてます)

• メソッドにすることによっての利点
•   メモリ効率
•   ステートレスコントローラの使用 (シングルトンスコープ指定)
•   サブクラスでのアクションのオーバーライドが可能。スー
    パークラスのアクションメソッド呼び出しが可能。
    super.actionName()
•   クロージャはフィールドのため複雑だったスタンダードなプ
    ロキシを使用したメソッドのインターセプトが可能。

                 63
def index() {
    redirect(action: "list", params: params)
}

def list() {
    params.max = Math.min(params.max ? params.int('max') : 10, 100)
    [bookList: Book.list(params), bookTotal: Book.count()]
}




クロージャを使用したい場合、旧版対応:
AST変換を使用してクロージャをメソッドに変換したバイト
コードを生成
  grails.compile.artefacts.closures.convert = true

                                64
アクションメソッドに引数を指定してバインド。
<g:form name="myForm" action="save">
! <input name="name" />
! <input name="age" />!
</g:form>




                 指定した型に変換されます。
                  def save(String name, int age) {
                  ! // remaining
                  }



                                65
• 非同期処理。AsyncContext
 BuildConfigにサーブレットバージョン指定
  grails.servlet.version = "3.0"



 使用方法: def ctx = startAsync()
  def index() {
          def ctx = startAsync()
          ctx.start {
              new Book(title:"The Stand").save()
              render template:"books", model:[books:Book.list()]
              ctx.complete()
          }
  }



                              66
Link Generation API
Grailsのルールでリンクを生成するAPI
LinkGenerator grailsLinkGenerator
def generateLink() {
! grailsLinkGenerator.link(controller:"book", action:"list")
}




Page Rendering API
Webリクエスト以外の場所でGSPをレンダリングするAPI
PageRenderer groovyPageRenderer
void welcomeUser(User user) {
!   def contents = groovyPageRenderer.render(
                             view:"/emails/welcomeLetter", model:[user: user])
!   sendEmail {
!   !   to user.email
!   !   body contents
!   }
}
                                             67
• フィルターでのコントローラ・アクション・URI
 の除外指定が実装されました。
 filter1(actionExclude: 'log*') {
     before = {
         //
     }
 }
 filter2(controllerExclude: 'auth') {
     before = {
         //
     }
 }

 filter3(uriExclude: '/secure*') {
     before = {
         // …
     }
 }
                          68
• spring-data-mappingが
 grails-data-mappimgに変更!?
 org.grailsのリネームされた。



       http://www.springsource.org/spring-data


                     リンク切れ!?




          今後どうなるのかな?
                             69
• 依存ライブラリ・プラグインにSNAPSHOTが有
 る場合の自動更新

• パーマネントリダイレクト(301)のサポート
•   redirect() メソッドにtrueを指定すると、リダイレクトは、301の
    HTTPステータスで送信され、その逆であれば、302で送信されます。


• JsonBuilderは非推奨となりました。
• 全てのスタティックホルダーは非推奨。
• GORMエンティティを拡張した抽象クラスは必
 ずsrc/groovyに入れましょう。
                     70
71
お気を付けて使用しましょう!
      72
73
74

Mais conteúdo relacionado

Mais procurados

Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編Toshimichi Suekane
 
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料Toshimichi Suekane
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_introNobuhiro Sue
 
OSS Product feat. Gradle
OSS Product feat. GradleOSS Product feat. Gradle
OSS Product feat. GradleYasuharu Nakano
 
laravel x モバイルアプリ
laravel x モバイルアプリlaravel x モバイルアプリ
laravel x モバイルアプリMasaki Oshikawa
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
Gradle a new Generation Build Tool
Gradle a new Generation Build ToolGradle a new Generation Build Tool
Gradle a new Generation Build ToolShinya Mochida
 
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そうgulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そうToshimichi Suekane
 
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれYasuhiro Murata
 
フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたフロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたShou Takenaka
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示するregret raym
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみたTakeo Noda
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 

Mais procurados (18)

Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
gulp + sass で目指せ倍速コーディング(東区フロントエンド勉強会 2015年 第1回) 環境準備編
 
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_intro
 
OSS Product feat. Gradle
OSS Product feat. GradleOSS Product feat. Gradle
OSS Product feat. Gradle
 
laravel x モバイルアプリ
laravel x モバイルアプリlaravel x モバイルアプリ
laravel x モバイルアプリ
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
Gradle布教活動
Gradle布教活動Gradle布教活動
Gradle布教活動
 
Gradle a new Generation Build Tool
Gradle a new Generation Build ToolGradle a new Generation Build Tool
Gradle a new Generation Build Tool
 
gulp勉強会@IVP
gulp勉強会@IVPgulp勉強会@IVP
gulp勉強会@IVP
 
Gradle handson
Gradle handsonGradle handson
Gradle handson
 
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そうgulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
 
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
[JavaScript][gulp.js] 一緒に楽しよう!gulp.jsのあれこれ
 
フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたフロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみた
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示する
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
 
REACT & WEB API
REACT & WEB APIREACT & WEB API
REACT & WEB API
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 

Destaque

アジャイルサムライ読書会湯島道場第一回Lt
アジャイルサムライ読書会湯島道場第一回Ltアジャイルサムライ読書会湯島道場第一回Lt
アジャイルサムライ読書会湯島道場第一回LtKiichi Kajiura
 
アジャイルサムライ読書会湯島道場開催概要
アジャイルサムライ読書会湯島道場開催概要アジャイルサムライ読書会湯島道場開催概要
アジャイルサムライ読書会湯島道場開催概要Kiichi Kajiura
 
アジャイルサムライ読書会(湯島道場) 第一回 地の巻「アジャイルをはじめる前に」
アジャイルサムライ読書会(湯島道場) 第一回 地の巻「アジャイルをはじめる前に」アジャイルサムライ読書会(湯島道場) 第一回 地の巻「アジャイルをはじめる前に」
アジャイルサムライ読書会(湯島道場) 第一回 地の巻「アジャイルをはじめる前に」Takahiro Nohdomi
 
Introduction to facilitation
Introduction to facilitationIntroduction to facilitation
Introduction to facilitationEiichi Hayashi
 
【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック智治 長沢
 
Discover The Unknown Flex 4.5 (MAX 2011)
Discover The Unknown Flex 4.5 (MAX 2011)Discover The Unknown Flex 4.5 (MAX 2011)
Discover The Unknown Flex 4.5 (MAX 2011)Piotr Walczyszyn
 
Ruby Plugins for Jenkins
Ruby Plugins for JenkinsRuby Plugins for Jenkins
Ruby Plugins for Jenkinscowboyd
 
『ユーザーストーリーマッピング ~再演~』第4回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ユーザーストーリーマッピング ~再演~』第4回 POStudy 〜プロダクトオーナーシップ勉強会〜『ユーザーストーリーマッピング ~再演~』第4回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ユーザーストーリーマッピング ~再演~』第4回 POStudy 〜プロダクトオーナーシップ勉強会〜満徳 関
 
『アジャイルとスクラム』第1回 POStudy 〜プロダクトオーナーシップ勉強会〜
『アジャイルとスクラム』第1回 POStudy 〜プロダクトオーナーシップ勉強会〜『アジャイルとスクラム』第1回 POStudy 〜プロダクトオーナーシップ勉強会〜
『アジャイルとスクラム』第1回 POStudy 〜プロダクトオーナーシップ勉強会〜満徳 関
 
ユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションMasanori Kado
 
Gitことはじめ
GitことはじめGitことはじめ
Gitことはじめbleis tift
 
ユーザーストーリー作り(DevLOVE道場第二回)
ユーザーストーリー作り(DevLOVE道場第二回)ユーザーストーリー作り(DevLOVE道場第二回)
ユーザーストーリー作り(DevLOVE道場第二回)Kiichi Kajiura
 
『ユーザーストーリーマッピング ~前編~』第2回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ユーザーストーリーマッピング ~前編~』第2回 POStudy 〜プロダクトオーナーシップ勉強会〜『ユーザーストーリーマッピング ~前編~』第2回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ユーザーストーリーマッピング ~前編~』第2回 POStudy 〜プロダクトオーナーシップ勉強会〜満徳 関
 
No011-01-Suc3rum-20100225
No011-01-Suc3rum-20100225No011-01-Suc3rum-20100225
No011-01-Suc3rum-20100225Sukusuku Scrum
 
Jenkins実践入門目次チラ見せしちゃいます
Jenkins実践入門目次チラ見せしちゃいますJenkins実践入門目次チラ見せしちゃいます
Jenkins実践入門目次チラ見せしちゃいますMasanori Satoh
 
アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-
アジャイルテスト  -高品質を追求するアジャイルチームにおけるテストの視点-アジャイルテスト  -高品質を追求するアジャイルチームにおけるテストの視点-
アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-Satoshi Masuda
 
Jenkins the definitive guide lt(第四回jenkins勉強会)
Jenkins the definitive guide lt(第四回jenkins勉強会)Jenkins the definitive guide lt(第四回jenkins勉強会)
Jenkins the definitive guide lt(第四回jenkins勉強会)Ryuji Tamagawa
 

Destaque (20)

アジャイルサムライ読書会湯島道場第一回Lt
アジャイルサムライ読書会湯島道場第一回Ltアジャイルサムライ読書会湯島道場第一回Lt
アジャイルサムライ読書会湯島道場第一回Lt
 
アジャイルサムライ読書会湯島道場開催概要
アジャイルサムライ読書会湯島道場開催概要アジャイルサムライ読書会湯島道場開催概要
アジャイルサムライ読書会湯島道場開催概要
 
アジャイルサムライ読書会(湯島道場) 第一回 地の巻「アジャイルをはじめる前に」
アジャイルサムライ読書会(湯島道場) 第一回 地の巻「アジャイルをはじめる前に」アジャイルサムライ読書会(湯島道場) 第一回 地の巻「アジャイルをはじめる前に」
アジャイルサムライ読書会(湯島道場) 第一回 地の巻「アジャイルをはじめる前に」
 
Introduction to facilitation
Introduction to facilitationIntroduction to facilitation
Introduction to facilitation
 
【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック
 
Discover The Unknown Flex 4.5 (MAX 2011)
Discover The Unknown Flex 4.5 (MAX 2011)Discover The Unknown Flex 4.5 (MAX 2011)
Discover The Unknown Flex 4.5 (MAX 2011)
 
Ruby Plugins for Jenkins
Ruby Plugins for JenkinsRuby Plugins for Jenkins
Ruby Plugins for Jenkins
 
TDD Boot Camp
TDD Boot CampTDD Boot Camp
TDD Boot Camp
 
TDDBC東京 1.6 LT
TDDBC東京 1.6 LTTDDBC東京 1.6 LT
TDDBC東京 1.6 LT
 
『ユーザーストーリーマッピング ~再演~』第4回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ユーザーストーリーマッピング ~再演~』第4回 POStudy 〜プロダクトオーナーシップ勉強会〜『ユーザーストーリーマッピング ~再演~』第4回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ユーザーストーリーマッピング ~再演~』第4回 POStudy 〜プロダクトオーナーシップ勉強会〜
 
『アジャイルとスクラム』第1回 POStudy 〜プロダクトオーナーシップ勉強会〜
『アジャイルとスクラム』第1回 POStudy 〜プロダクトオーナーシップ勉強会〜『アジャイルとスクラム』第1回 POStudy 〜プロダクトオーナーシップ勉強会〜
『アジャイルとスクラム』第1回 POStudy 〜プロダクトオーナーシップ勉強会〜
 
ユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーション
 
Gitことはじめ
GitことはじめGitことはじめ
Gitことはじめ
 
ユーザーストーリー作り(DevLOVE道場第二回)
ユーザーストーリー作り(DevLOVE道場第二回)ユーザーストーリー作り(DevLOVE道場第二回)
ユーザーストーリー作り(DevLOVE道場第二回)
 
『ユーザーストーリーマッピング ~前編~』第2回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ユーザーストーリーマッピング ~前編~』第2回 POStudy 〜プロダクトオーナーシップ勉強会〜『ユーザーストーリーマッピング ~前編~』第2回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ユーザーストーリーマッピング ~前編~』第2回 POStudy 〜プロダクトオーナーシップ勉強会〜
 
No011-01-Suc3rum-20100225
No011-01-Suc3rum-20100225No011-01-Suc3rum-20100225
No011-01-Suc3rum-20100225
 
Jenkins実践入門目次チラ見せしちゃいます
Jenkins実践入門目次チラ見せしちゃいますJenkins実践入門目次チラ見せしちゃいます
Jenkins実践入門目次チラ見せしちゃいます
 
20110118 scrum 10 mins
20110118 scrum 10 mins20110118 scrum 10 mins
20110118 scrum 10 mins
 
アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-
アジャイルテスト  -高品質を追求するアジャイルチームにおけるテストの視点-アジャイルテスト  -高品質を追求するアジャイルチームにおけるテストの視点-
アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-
 
Jenkins the definitive guide lt(第四回jenkins勉強会)
Jenkins the definitive guide lt(第四回jenkins勉強会)Jenkins the definitive guide lt(第四回jenkins勉強会)
Jenkins the definitive guide lt(第四回jenkins勉強会)
 

Semelhante a Grails 2.0.0.M1の話

Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門じゅん なかざ
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-PE-BANK
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)tamtam180
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxNobuhiro Sue
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションKazuhiro Hara
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 

Semelhante a Grails 2.0.0.M1の話 (20)

G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 

Mais de Tsuyoshi Yamamoto

JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootJJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootTsuyoshi Yamamoto
 
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Tsuyoshi Yamamoto
 
Grailsx@ロンドンへ行ってきた報告。
Grailsx@ロンドンへ行ってきた報告。Grailsx@ロンドンへ行ってきた報告。
Grailsx@ロンドンへ行ってきた報告。Tsuyoshi Yamamoto
 
多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy GrailsTsuyoshi Yamamoto
 
G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門Tsuyoshi Yamamoto
 
Jggug 2010 330 Grails 1.3 観察
Jggug 2010 330 Grails 1.3 観察Jggug 2010 330 Grails 1.3 観察
Jggug 2010 330 Grails 1.3 観察Tsuyoshi Yamamoto
 
groovyプラプラとか「はやい、はやいよ」
groovyプラプラとか「はやい、はやいよ」groovyプラプラとか「はやい、はやいよ」
groovyプラプラとか「はやい、はやいよ」Tsuyoshi Yamamoto
 
第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」
第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」
第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」Tsuyoshi Yamamoto
 
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」Tsuyoshi Yamamoto
 
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
名古屋SGGAE/J勉強会 Grails、GaelykでハンズオンTsuyoshi Yamamoto
 
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-Tsuyoshi Yamamoto
 
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトークGroovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトークTsuyoshi Yamamoto
 
G*なクラウド 雲のかなたに ショートバージョン
G*なクラウド 雲のかなたに ショートバージョンG*なクラウド 雲のかなたに ショートバージョン
G*なクラウド 雲のかなたに ショートバージョンTsuyoshi Yamamoto
 
JGGUG Camp 2009 いっぽう熱海では、
JGGUG Camp 2009 いっぽう熱海では、JGGUG Camp 2009 いっぽう熱海では、
JGGUG Camp 2009 いっぽう熱海では、Tsuyoshi Yamamoto
 

Mais de Tsuyoshi Yamamoto (20)

JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootJJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-boot
 
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
 
JGGUG grails-spring-boot
JGGUG grails-spring-bootJGGUG grails-spring-boot
JGGUG grails-spring-boot
 
Grailsx@London 2011 報告
Grailsx@London 2011 報告Grailsx@London 2011 報告
Grailsx@London 2011 報告
 
Grails 1.4.0.M1 メモLT
Grails 1.4.0.M1 メモLTGrails 1.4.0.M1 メモLT
Grails 1.4.0.M1 メモLT
 
G * magazine 1
G * magazine 1G * magazine 1
G * magazine 1
 
JGGUG 2011-02 LT
JGGUG 2011-02 LTJGGUG 2011-02 LT
JGGUG 2011-02 LT
 
Grailsx@ロンドンへ行ってきた報告。
Grailsx@ロンドンへ行ってきた報告。Grailsx@ロンドンへ行ってきた報告。
Grailsx@ロンドンへ行ってきた報告。
 
多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails
 
G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門
 
Jggug 2010 330 Grails 1.3 観察
Jggug 2010 330 Grails 1.3 観察Jggug 2010 330 Grails 1.3 観察
Jggug 2010 330 Grails 1.3 観察
 
groovyプラプラとか「はやい、はやいよ」
groovyプラプラとか「はやい、はやいよ」groovyプラプラとか「はやい、はやいよ」
groovyプラプラとか「はやい、はやいよ」
 
第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」
第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」
第3回Grails/Groovy勉強会名古屋「Grails名古屋座談会」
 
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
 
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
 
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
 
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトークGroovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトーク
 
G*なクラウド 雲のかなたに ショートバージョン
G*なクラウド 雲のかなたに ショートバージョンG*なクラウド 雲のかなたに ショートバージョン
G*なクラウド 雲のかなたに ショートバージョン
 
JGGUG Camp 2009 いっぽう熱海では、
JGGUG Camp 2009 いっぽう熱海では、JGGUG Camp 2009 いっぽう熱海では、
JGGUG Camp 2009 いっぽう熱海では、
 
ExtJS勉強会@名古屋
ExtJS勉強会@名古屋ExtJS勉強会@名古屋
ExtJS勉強会@名古屋
 

Grails 2.0.0.M1の話

  • 1. 1
  • 2. 2
  • 3. 仕事 • newcast inc. ってデザイン会社で、 印刷系パッケージソフト開発。あと経営。 • 主に、Grails,Groovy,Java,Obj-C,人材等を扱います。 • Grailsの経歴 • 2006/7 旧Grailsドキュメント翻訳。 • 2006/12 Acegiプラグインを公開。 • 2007/10 ”Grails eXchange 2007”に、スピーカーとして参 加。 • 2008/8 Grails徹底入門 共著。 • 2006 - 201X Grails日本語リリースノートを即配信を趣味と してる。 3
  • 4. 4
  • 5. • 7/1 富士山 山開き • 7/2 キャラ・スーンの誕生日(ZZ)   ミーア・キャンベルの誕生日(SEED DESTINY) • 7/3  2005年にGrails最初のコミットされた日! • 7/4  アメリカ独立記念日! • 7/5  @tyama 誕生日! • 7/6「プログラミングGroovy」発売! • 7/7 七夕! • 7/8 質屋の日! 5
  • 6. • プログラミングGROOVY [単 行本(ソフトカバー)] • 価格: ¥3,360 6
  • 7. 7
  • 8. 8
  • 9. 9
  • 10. 10
  • 11. • ある程度の。 • 最新のWeb開発アーキテクチャを知る事ができる。 • 最先端・流行のJava開発を知る事ができる。 • Grailsでの開発 • 開発効率の追求。(究極なDRY)  • シンプルかつ柔軟。(DSL)  • DDD。 • ただし! • 柔軟過ぎて質の悪いアプリケーションも構築できる。 • 意外と作り手によっては、おかしな物になる。 11
  • 12. 12
  • 14. 14
  • 16. •コア+その他。 •DB Groovy 1.8, Spring 3.1 M1, Hibernate 基本データベースをH2への変更 3.6,Servlet 3.0, Tomcat 7への更新。 DBコンソール Javaエージェントで開発時リロード改善 複数データソースサポート パフォーマンス強化・速度向上! マイグレーションとリバースエンジニア 新しいコンソールUIとインタラクティブ リング (interactive)モード •テスト スカッフォルドUIがHTML5に! MixinベースUnitテスト エラーレポートとスタックトレース表示 Spockもサポートした新しいテストAPI •リソース Unitテストスカッフォールディング 静的リソースハンドリング機能 強化されたユニットテストのコンソール PrototypeからjQueryへ への書き出し •GORM •プラグイン GORM API大幅改良、機能強化 バイナリープラグイン AST変換を使用したGORM API プラグイン使用統計トラッキング 抽象クラス継承のサポート プラグイン開発用のAST変換API 16
  • 17. 17
  • 18. • 注意! BuildConfgで 「grails.project.work.dir="target/work"」を 定義してると起動しないよ! 成功例 18
  • 19. 19
  • 20. 20
  • 21. 21
  • 22. • Groovy 1.8, Spring 3.1, Hibernate 3.6, Servlet 3.0, Tomcat 7への更新。 • Javaエージェントで開発時リロード改善 • パフォーマンス強化・速度向上! • スカッフォルドUIがHTML5に! • 新しいコンソールUIとインタラクティブ (interactive)モード • エラーレポートとスタックトレース表示 22
  • 23. • Groovy 1.8 • 超強化されたGroovyをバンドル • Spring 3.1 • SpringプロファイルとGrails環境のブリッジ。 • Servlet 3.0 • Asyncとか個人的には注目してる。 • Tomcat 7 • Hibernate 3.6 23
  • 24. • Javaエージェントの実装により、未サポート だった静的型のサービス、ドメインクラス等の リロードが可能に。 • -javaagentオプションにSpring-Loaded指定 して実装されている。 • 起動時の指定でON/OFF可能。 % grails -noreloading 24
  • 25. http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/ GSPが再度最適化がされた! 25
  • 26. 26
  • 27. Firefox5だと <input type="number" name="price" required="" value="" id="price" /> 27
  • 28. • コンソール表示が1行で表示されるように! • grails (Ent) で、インタラクティブモードに突 入。タブ補完、コマンド履歴有り。(jline使用) 28
  • 29. • grails (Ent) で、インタラクティブモードに突入 するので。 % grails --help % grails -version 29
  • 31. 31
  • 33. 33
  • 34. • 静的リソースハンドリング機能 • resourcesプラグインがコアへ (プラグイン提供) • http://grails.org/plugin/resources • PrototypeからjQueryへ • リソースの改善と平行して、jQueryへの移行 も行われた。 34
  • 35. • js,cssをモジュール管理 • リソースをDSLで定義 modules = {     core {         dependsOn 'jquery, utils'         resource url: '/js/core.js', disposition: 'head'         resource url: '/js/ui.js'         resource url: '/css/main.css',         resource url: '/css/branding.css'         resource url: '/css/print.css', attrs: [media: 'print']     }     utils { <html>         dependsOn 'jquery' <head>         resource url: '/js/utils.js' <r:require module="jquery"/>     } <r:layoutResources/>     forms { </head>         dependsOn 'core,utils' <body>         resource url: '/css/forms.css' …         resource url: '/js/forms.js' <r:layoutResources/>     } </body> } </html> 35
  • 36. • 連動するプラグイン • キャッシュ • http://grails.org/plugin/cached-resources • gzip • http://grails.org/plugin/zipped-resources 36
  • 37. 37
  • 38. • まだM1だから、いきなり説明不足。 • 公式Doc 6.7 AJAXを試しても。 • <g:javascript library="jquery"/> • 動きません • Grails初心者キラー。 38
  • 39. • How? main.gsp <g:layoutHead/> <r:layoutResources/> JS AJAX         <g:javascript library="jquery" plugin="jquery"/>         <g:javascript library="jquery"/>         <r:require modules="jquery"/> 2.0 <r:require modules="jquery"/> Config.groovy grails.views.javascript.library="jquery" 39
  • 40. 40
  • 41. • 基本データベースをH2へ変更 • DBコンソール • 複数データソースサポート • マイグレーションとリバースエンジニアリング • GORM API大幅改良、機能強化 • AST変換を使用したGORM API • 抽象クラス継承のサポート41
  • 42. • HSQDB → H2 • BuildConfigに、 runtime 'hsqldb:hsqldb:1.8.0.10' • 何ならこれを期に、H2にしてしまおう! • jdbcの設定も変えないとね! 42
  • 44. • 基本は開発モードのみで使用可能。 指定する事で productionモードでも可能。 (セキュリティ必要) environments {     production {         grails.serverURL = "http://www.changeme.com"         grails.dbconsole.enabled = true         grails.dbconsole.urlRoot = '/admin/dbconsole'     }     development {         grails.serverURL = "http://localhost:8080/${appName}"     }     test {         grails.serverURL = "http://localhost:8080/${appName}"     } } 44
  • 45. DataSource.groovy dataSource {    pooled = true ドメインに定義     driverClassName = 'org.h2.Driver'     url = 'jdbc:h2:mem:testDb' class Book {     username = 'sa'     String title     password = ''     static mapping = {     dbCreate = 'update'         datasource 'ALL' }     } dataSource_ds2 { }     pooled = true     driverClassName = 'org.h2.Driver'     url = 'jdbc:h2:mem:testDb2' class Comment {     username = 'sa'     String message     password = ''     static mapping = {     dialect = org.hibernate.dialect.H2Dialect         datasource 'ds2'     dbCreate = 'update' }     } } def book = Book.ds2.get(100) 45
  • 46. • プラグインで提供。 詳しくはドキュメントを読みましょう! • http://grails.org/plugin/database-migration • http://grails.org/plugin/db-reverse-engineer 46
  • 47. • GORM APIがJavaから使用可能に。 • GORMでの抽象クラス継承のサポート。 • OrCreateとOrSaveクエリーの実装追加。 • 名前付きクエリから関係先の名前付きクエリを 参照。 • 共有制約とコマンドオブジェクト。 47
  • 48. • GORM APIは、Groovy ASTによって、GORM エンティティのバイトコードとして注入されま す。これによりGORMのメソッドは、Javaコー ドから、呼び出したり見たりできます。 Book book = new Book(); book.setTitle("The Stand") book.save(); System.out.println(Book.count()); System.out.println(Book.list()); 48
  • 49. • GORMが抽象クラス継承をサポートしました。 関連リンクやクエリ等を抽象クラスに定義する ことができます。 abstract Media { String title … } class Book extends Media { } class Album extends Media { } class Account { static hasMany = [purchasedMedia:Media] } .. def allMedia = Media.list() 49
  • 50. • ドメインクラスに、findWhereやfindByメソッドに似 た、nullを返さない、findOrCreateWhere, findOrSaveWhere, findOrCreateBy, findOrSaveByのクエリーをサポート。 • 実行結果にインスタンスが見つからない場合は、指定 された値で、新規にインスタンスを作成して返しま す。findOrSaveWhereとfindOrSaveByの場合はイン スタンスを保存してからインスタンスを返します。 def book = Book.findOrCreateWhere(author: 'Douglas Adams', title: "The Hitchiker's Guide To The Galaxy") def book = Book.findOrSaveWhere(author: 'Daniel Suarez', title: 'Daemon') def book = Book.findOrCreateByAuthorAndTitle( 'Daniel Suarez', 'Daemon') d e f b o o k = B o o k . f i n d O r S a v e B y A u t h o r A n d T i t l e (' D a n i e l S u a r e z ' , ' D a e m o n ' ) 50
  • 51. • 名前付きクエリがドメインクラスのリレーショ ンを含んでいる場合、そのリレーション先の名 前付きクエリを使用することが可能に。 class Author { static hasMany = [publications:Publication] static namedQueries = { authorsWithRecentPublications { publications { // recentPublications() } } } } class Publication { Author author static namedQueries = { recentPublications {// def now = new Date() gt 'datePublished', now - 10 } } } 51
  • 52. • コマンドオブジェクトが共有制約をサポートし ました。 実装方法は以前に追加されたドメインクラスと 同じです。 grails.gorm.default.constraints = { '*'(nullable: true, size: 1..20) } grails.gorm.default.constraints = { myShared(nullable: true, size: 1..20) } class User { ... static constraints = { login(shared: "myShared") } } 52
  • 53. 53
  • 54. • Unitテスト大幅改良! • フィルター・URLマッピング・ファイルアップ ロード・コンテントネゴシエーション・テンプ レートビューレンダリング・ドメインクラスク ライテリアクエリ • http://grails.org/doc/1.4.x/guide/ 9.%20Testing.html#9.1%20Unit%20Testing 54
  • 55. • MixinベースUnitテスト • (未確認)Spockもサポートした新しいテストAPI • Unitテストスカッフォールディング • generate-allでスカッフォールドの内容用のUnitテスト が自動生成される。(コード参照) • 強化されたユニットテストのコンソール表示 55
  • 56. @TestMixin @Mock @TestFor 56
  • 57. • コントローラテストの方法が、 公式ドキュメントの "9.1" に詳しく掲載! • リロード良くなったので、 新コンソール(インタラクティブ)でテストしよ う! • ドメインテスト注意点。 • Car.findAllByMaker(.....)とかの、フィールド (この場合maker)にはインデックス定義必要。 mappings に maker index:true 。 57
  • 58. 58
  • 59. 59
  • 60. • プラグイン使用統計トラッキング • プラグイン使用レポートを収集する機能が実 装されました。近いうちにプラグイン使用統 計がGrailsのサイトで公開されます。 • プラグイン開発用のAST変換API • @Artefact ?? • バイナリープラグイン 60
  • 61. • プラグインを通常のJARファイルとしてプリコ ンパイルパッケージ可能になります。 • Mavenリポジトリで通常のJARファイルで配布可能。 • バイナリプラグインは他のJARと同じように依存管理が行える。 • ソースコードを公開しない商用プラグインが可能。 • 通常のJARになることによって、IDE等の環境で扱いやすくなる。 %grails package-plugin --binary 61
  • 62. 62
  • 63. • 今まではアクションがクロージャで実装されて ました。今後はメソッドで実装を推奨します! (もちろんクロージャもサポートしてます) • メソッドにすることによっての利点 • メモリ効率 • ステートレスコントローラの使用 (シングルトンスコープ指定) • サブクラスでのアクションのオーバーライドが可能。スー パークラスのアクションメソッド呼び出しが可能。 super.actionName() • クロージャはフィールドのため複雑だったスタンダードなプ ロキシを使用したメソッドのインターセプトが可能。 63
  • 64. def index() {     redirect(action: "list", params: params) } def list() {     params.max = Math.min(params.max ? params.int('max') : 10, 100)     [bookList: Book.list(params), bookTotal: Book.count()] } クロージャを使用したい場合、旧版対応: AST変換を使用してクロージャをメソッドに変換したバイト コードを生成 grails.compile.artefacts.closures.convert = true 64
  • 65. アクションメソッドに引数を指定してバインド。 <g:form name="myForm" action="save"> ! <input name="name" /> ! <input name="age" />! </g:form> 指定した型に変換されます。 def save(String name, int age) { ! // remaining } 65
  • 66. • 非同期処理。AsyncContext BuildConfigにサーブレットバージョン指定 grails.servlet.version = "3.0" 使用方法: def ctx = startAsync() def index() { def ctx = startAsync() ctx.start { new Book(title:"The Stand").save() render template:"books", model:[books:Book.list()] ctx.complete() } } 66
  • 67. Link Generation API Grailsのルールでリンクを生成するAPI LinkGenerator grailsLinkGenerator def generateLink() { ! grailsLinkGenerator.link(controller:"book", action:"list") } Page Rendering API Webリクエスト以外の場所でGSPをレンダリングするAPI PageRenderer groovyPageRenderer void welcomeUser(User user) { ! def contents = groovyPageRenderer.render( view:"/emails/welcomeLetter", model:[user: user]) ! sendEmail { ! ! to user.email ! ! body contents ! } } 67
  • 68. • フィルターでのコントローラ・アクション・URI の除外指定が実装されました。 filter1(actionExclude: 'log*') { before = { // } } filter2(controllerExclude: 'auth') { before = { // } } filter3(uriExclude: '/secure*') { before = { // … } } 68
  • 69. • spring-data-mappingが grails-data-mappimgに変更!? org.grailsのリネームされた。 http://www.springsource.org/spring-data リンク切れ!? 今後どうなるのかな? 69
  • 70. • 依存ライブラリ・プラグインにSNAPSHOTが有 る場合の自動更新 • パーマネントリダイレクト(301)のサポート • redirect() メソッドにtrueを指定すると、リダイレクトは、301の HTTPステータスで送信され、その逆であれば、302で送信されます。 • JsonBuilderは非推奨となりました。 • 全てのスタティックホルダーは非推奨。 • GORMエンティティを拡張した抽象クラスは必 ずsrc/groovyに入れましょう。 70
  • 71. 71
  • 73. 73
  • 74. 74