JJUG CCC 20150411 grails3 Spring-boot

59
Grails 第3章 進化したSpring-bootベースフレームワーク @tyama

Transcript of JJUG CCC 20150411 grails3 Spring-boot

Grails 第3章 進化したSpring-bootベースフレームワーク@tyama

About Me山本です。岐阜県からきました。 デザイナーです。ウソです twitter: @tyama はてな id:mottsnite

活動• 今週のGrails 意訳版

• grails.jp/news

• Grailsリリース情報を

ほぼリアルタイム配信。

9年目に突入!

• はてな id: mottsnite

本日のお話

• Grails ? • Road to 3.0

• Grails 2.4.x ~ Grails 2.5 • Grails 3 の話

• 新機能情報など • Grails2との違い。 • Grails 3 とSpring Boot。

“祝!New GRAILS_HOME!(4.9)” ↓

Object Computing, Inc.

昔からGroovyに関心を持っている会社です。 Jeff氏が昔いた会社

Grails て何? (知らない人へ)

• Springフレームワークをベースにドメインドリブンでサクッと開発するフルスタックフレームワーク。

• RoRにインスパイアされてJava/Groovyで開発。 • RoR系なので、CoCです。

• 開発には、ディレクトリベースの規約とGroovy DSLを活用。

Road to 3.0

Grails 3.0への道

図解説明Road to 3.0

Spring 4.0.x Groovy 2.3.x コードベースのモジュラー化

Spring 4.1.x Groovy 2.4.x

Grails 2.4.x

Grails 2.5

Grails 3.0.x

今までと同じアーキテクチャ

Grails以外で 使用可能

Standalone GORM Standalone GSP Asset Pipeline

Gradle Asset Pipeline Plugin

Grails 1.3.x Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレね。今後はどうすると?

Spring Boot 1.2.x Spring 4.1.x Groovy 2.4.x

そぎゃんこと言うても、変わっ

とだけんしょんなかたい!

アーキテクチャが変わった!?アップデート大変!?

Spring 4.1なので依存するプラグインは注意してね。

図解説明Road to 3.0

Grails 1.3.x Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレね。今後はどうすると?

Road to 3.0

• Road to 3.0 構想

• 3.0リリースというゴールに向けて2.4.xから、リファクタリングを開始。一部の実装は2.4でも含む。

• Spring Bootをベースにするために。 • コアコードを集中的にリファクタリング • 主要機能は、生Spring BootなどGrails外でも使用できるように再構築。(以前できてた?できかけてた物も再度見直し)

• ただゴールのGrails3では一部仕様変わるかもよっ! • なんなら、実際に更新大変かもよっ! • それでもモダンなアーキテクチャにするのだよ!

Grails 2.4.x リリース

• Spring 4.0 • Java 8 対応 • Groovy 2.3 に更新 • @CompileStatic 対応 • アセットパイプライン • コードベースのモジュラー化 • Hibernate 4 対応 • 単独利用できる GORMとGSP

図解説明Road to 3.0

Grails 1.3.x Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレね。今後はどうすると?

Spring 4.0.x Groovy 2.3.x コードベースのモジュラー化

Grails 2.4.x

Grails以外で 使用可能

Standalone GORM Standalone GSP Asset Pipeline

Spring 4.0? 今はSpring 4.1だろっ!

Spring 4.1は Grails 3で対応する(キリッ

あとで話あると思うけど、、 更新するの大変なんだろっ?

わかっちまえば、そうでもないのだが。。

んじゃ、だすよ。これも。

Grails 2.5

• Grails 2.4 系と同じアーキテクチャ。 • 違い

• Groovy 2.4 対応 • Spring 4.1 対応

• いきなり Grails3 だと アレ な人向けに、ベースとなるライブラリを更新して対応させたバージョン。       ただし、Spring 4.1の互換に悩む事も。

図解説明Road to 3.0

Spring 4.0.x Groovy 2.3.x コードベースのモジュラー化

Grails 2.4.x

Grails以外で 使用可能

Standalone GORM Standalone GSP Asset PipelineGrails 1.3.x

Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレね。今後はどうすると?

Spring 4.1.x Groovy 2.4.x

Grails 2.5今までと同じアーキテクチャ

Spring 4.1なので依存するプラグインは注意してね。

図解説明Road to 3.0

Spring 4.0.x Groovy 2.3.x コードベースのモジュラー化

Grails 2.4.x

Grails以外で 使用可能

Standalone GORM Standalone GSP Asset PipelineGrails 1.3.x

Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレね。今後はどうすると?

Spring 4.1.x Groovy 2.4.x

Grails 2.5今までと同じアーキテクチャ

Spring 4.1なので依存するプラグインは注意してね。

図解説明Road to 3.0

Spring 4.0.x Groovy 2.3.x コードベースのモジュラー化

Grails 2.4.x

Grails以外で 使用可能

Standalone GORM Standalone GSP Asset PipelineGrails 1.3.x

Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレだね。今後はどうすると?

Spring 4.1.x Groovy 2.4.x

Grails 2.5今までと同じアーキテクチャ

Spring 4.1なので依存するプラグインは注意してね。

Grails 3 の話を始める前に おさえて起きたい内容。 ★ Asset Pipeline ★ スタンドアロンGORM, GSP

Asset Pipeline

• Web用リソースアセット(CSS,JS,画像)をアレするアレ。Railsの人にはお馴染みかな。

• Resourcesプラグインに変わりコチラが公式となった。

assetタグ<asset:javascript src="application.js"/><asset:stylesheet href="application.css"/><asset:image src="grails_logo.png" height="60" />

application.js//= require jquery//= require_self//= require file_a//= require_tree .console.log('some javascript');

Standalone GORM

• GORM - Grails O/R マッピング Grails3へ向けて外部利用もできるようになった。

• https://github.com/tyama/standalone-gorm-examples ↑以下のサンプル詰め合わせ • Groovyスクリプト

• GORM MongoDB • GORM Hibernate 4

• Spring Boot • GORM MongoDB • GORM Hibernate 4

デモ

Standalone GSP & Spring Boot

• Grailsでお馴染みのView層 GSP • https://github.com/grails/grails-boot

“Road to Grails 3.0 ここで、Grails 2.4.x , 2.5 の話は終了。”

図解説明Road to 3.0

Spring 4.0.x Groovy 2.3.x コードベースのモジュラー化

Grails 2.4.x

Grails以外で 使用可能

Standalone GORM Standalone GSP Asset PipelineGrails 1.3.x

Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレね。今後はどうすると?

Spring 4.1.x Groovy 2.4.x

Grails 2.5今までと同じアーキテクチャ

Spring 4.1なので依存するプラグインは注意してね。

Grails 3.0.x

Grails 3

Spring Boot

Gradle

Grails 3

• 何かに煽られる形で3/31に3.0.0リリース。 • そしてすぐに3.0.1リリース。 • プロジェクトリーダーは、その後、長期休暇へ。戻ってくるのか!? • 前バージョンから更新はファイル複製!

• Spring Bootをベースに構築。 • CoCとCoCのぶつかり合い。良い意味でも悪い意味でも。。

• ビルドシステムをGradleに。 • ビルドを柔軟に。

図解説明Road to 3.0

Spring 4.0.x Groovy 2.3.x コードベースのモジュラー化

Spring 4.1.x Groovy 2.4.x

Grails 2.4.x

Grails 2.5

Grails 3.0.x

今までと同じアーキテクチャ

Grails以外で 使用可能

Standalone GORM Standalone GSP Asset Pipeline

Gradle Asset Pipeline Plugin

Grails 1.3.x Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレね。今後はどうすると?

Spring Boot 1.2.x Spring 4.1.x Groovy 2.4.x

アーキテクチャが変わった!?

Spring 4.1なので依存するプラグインは注意してね。

“Grails3 What’s new!” “ザックリ、解説”

Grails3 What’s new! - コアフィーチャ

• Groovy 2.4 • AST, Trait, StaticCompile

• Spring 4.1 • JMSアノテーション, JCache, WebSocket, Groovyマークアップテンプレート

• Spring Boot 1.2 • SpringのSpringによるCoC • Tomcat,Jetty,Undertowコンテナ組込の起動可能Jar

• Gradle ビルドシステム • 今までのGantからGradleへ移行!

細かいことはSpring詳しい人に聞いて

細かいことはGroovy詳しい人に聞いて

とりあえず、Boot本読んでね。

Gradle本 持ってないの?

Grails3 - 何故 Spring Boot?

• マイクロサービス

マイクロサービス

マイクロサービス

モノリス vs マイクロサービス

Alvaro Sanchez-Mariscal氏のスライドより。

Grails3 - 何故 Spring Boot?

• マイクロサービス • ファットJARと組込コンテナ。様々なランタイムに対応。

• Tomcat, Jetty, Undertow

• モニタリングとヘルスチェックの仕組み • spring-boot-starter-actuator

• Bootのオートコンフィグレーションの活用。 • 常識的なデフォルト設定

• spring-boot-autoconfigure

• Springの柔軟性を活用 (今までもこれからも)

“Grailsでマイクロサービス? なにそれうまいの?”

Grails マイクロサービス

• 作成 • grails create-app demo --profile=web-micro

• 実行 • grails run-app / インタラクティブモードでもOK

• パッケージ • grails package • java -jar build/demo-0.1.jar

• 注意点: 現状の問題点 • テストコードがあると動かない • パッケージしたときにgroovy-antがなくて起動しない..

• @Grab('org.codehaus.groovy:groovy-ant:2.4.3') • 物によっては動きが?まあマイクロサービスですから。

Grails3 What’s new! - コアフィーチャ

• アプリケーションプロファイル

Keynote: Grails 3.0 Preview

Grails3 - プロファイル •アプリケーションのプロファイルを指定することでさまざまなタイプのアプリケーション生成に対応。

•プロファイルはgithubリポジトリで管理されている。 •そこに使用可能なプロファイルが提供されている。

スライド流用

Keynote: Grails 3.0 Preview

Grails3 - プロファイル •リポジトリのprofile階層に使用可能なプロファイルが管理されている。 •そこに今後。 ratpackとか他のプロファイルも入る。 •プロファイルでは以下が定義されている。 •プロジェクトスケルトン •テンプレート •コマンド

スライド流用

Keynote: Grails 3.0 Preview

Grails3 - プロファイル - コマンド •yamlでタスクステップを定義。 •groovyでスクリプトを提供も可能。 •GroovyScriptCommandクラスとして実行される。 •コマンド補完などの内容も定義 •コマンド作成用に新たなAPIなども用意されている。 •コード生成用のrender, modelなど。

スライド流用

Keynote: Grails 3.0 Preview

Grails3 - プロファイル - 継承 •プロファイルは継承できます。 •プロファイルを実装するときは近いプロファイルを継承して作成できる。多重継承も可能。 •継承するので、必要追加分のみを定義すればよい。 •不要なスケルトン・コマンドは除外も可能。 •でも、まだ自由にリポジトリを切替はできないのでアレです。

スライド流用

Grails3 What’s new! - コアフィーチャ

• Traitをベースに再デザインされたAPI • Groovy 2.4.x の恩恵!

• traitがASTされます!

Grails3 What’s new! - コアフィーチャ

• 内部フローの変更

Grails3 What’s new! - Webフィーチャ

• コントローラアクション用フィルターの廃止。 • Interceptor API に変更。

class MyInterceptor { boolean before() { true } boolean after() { true } void afterView() { // no-op }}

Grails3 What’s new! - 開発環境フィーチャ

• 新たなシェルとコード生成API • 強化されたIDE統合

• Intellij IDEA にgradleプロジェクトとして取込 • アプリケーションメインクラス

• static void main をもつ Applicationクラスを実行 • IDEで実行・デバッグも起動できる

Grails3 What’s new! - テストフィーチャ

• インテグレーション • Spring Bootをベースとしたテスト実行の仕組みを使用

• Gebファンクショナルテスト • create-functional-test でSpock/Gebファンクショナルテストを生成

• Gradleテスト実行 • 並列実行でのテスト実行定義など。

“What’s New だけだとわからんね。”

“とりまコード動かしてみましょう!”

デモ

• マイクロサービス - コードみましょ。 • 通常App - コードみましょ。 • Grails3 + Spring Boot

Grails3 のコードいろいろ

• メインファイル grails-app/init/パッケージパス/Application.groovy

• Spring Bootと同じ感じだよ。

• 階層がかわった。

• http://grails.github.io/grails-doc/3.0.1/guide/upgrading.html

• 定義設定が変わった。Config.groovy DataSource.groovy 廃止

• 今後のメインは application.yml

• 今までのGroovyな設定ファイルは application.groovyを作成して書けば良いよ。

• 読込順: yml → groovy → 起動ルートyml → 環境変数

• ログの形式が変わったよ。 logback.groovy

• http://logback.qos.ch/manual/groovy.html

• Gradleになったから、BuildConfigは無しで、 build.gradle を使うよ!

• Grails用のGradleプラグイン

Grails3 のいろいろ

• Grails2からの移行は結構大変。

• http://grails.github.io/grails-doc/3.0.1/guide/upgrading.html

• Grails2で出来たことが実装変わってアレっとなる。 → 慣れろ!

• 同時にSpring Bootのマニュアルを読むようになる。

• http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/html/

• Spring 4.1で提供されている便利な物は使え。

• http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/

• いろいろ解明するまで悩みまくる → まだ情報すくない。

• ドキュメントが嘘つきの時がある。(書いてある事がGrails2の情報だったり)

• -noverify

Grails3 でのプラグイン

• プラグインまだ少ないね!? 現状: 17個

• 今後はbintrayで管理される: https://bintray.com/grails/plugins

• Grails 2.4 系でのプラグイン数: 1200個

• Grails3では使えません。どうすんの? 以下でだいたいクリア。

• リソース系: webjarsを活用

• Spring系: オートコンフィグとかでどうにかなるでしょ?

• ファンクショナル系: 自分で移行

• ライブラリ系: 依存追加すれば?

• テクニカルな: 作者が対応するの待つ or 頑張って自分で実装!

• ゴミ系: どうでもいい物もたくさんある。そいつらは気にしない。

図解説明Road to 3.0

Spring 4.0.x Groovy 2.3.x コードベースのモジュラー化

Spring 4.1.x Groovy 2.4.x

Grails 2.4.x

Grails 2.5

Grails 3.0.x

今までと同じアーキテクチャ

Grails以外で 使用可能

Standalone GORM Standalone GSP Asset Pipeline

Gradle Asset Pipeline Plugin

Grails 1.3.x Grails 1.2.x Grails 1.0.x

古代

Grails 2.3.x Grails 2.2.x Grails 2.1.x

近代

時代に合わせるといろいろアレね。今後はどうすると?

Spring Boot 1.2.x Spring 4.1.x Groovy 2.4.x

そぎゃんこと

言うても、変

わっ

とだけんしょ

んなかたい!

アーキテクチャが変わった!?アップデート大変!?

Spring 4.1なので依存するプラグインは注意してね。

Grails3 まとめ

• Spring Bootの勉強が必要 • 必須ではないが知っておくと吉。 • むしろ必要でしょ。

• Spring Boot の開発をさらに迅速に! • アノテーション不要開発。 • コード配置場所を定めるCoCでメンテナンスしやすい。 • 小さな物はもちろん、大中規模のアプリやプラグインを活用したモジュラ開発が可能 • キレイに開発すれば、後からSpring Boot化も可能。

• まだバグが多い? • そこまで酷くはない。簡単な回避方法もある……と思う。 • 今までも初物はアレでした。

• Grails2との関係 • 違いが多いので。。。

JGGUGに集まれ!

• G*ワークショップ • 来週あります!来週金曜日! • Web API祭り! • もっとGrails3の事を知ることができます!

• https://jggug.doorkeeper.jp/events/22473

Q&A

• 簡単な内容でお願いします。 • Javaはクソではありません。

Thank you.

日本Grails/Groovyユーザーグループ

www.jggug.org59