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

JJUG CCC 20150411 grails3 Spring-boot

Jul 15, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: JJUG CCC 20150411 grails3 Spring-boot

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

Page 2: JJUG CCC 20150411 grails3 Spring-boot

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

Page 3: JJUG CCC 20150411 grails3 Spring-boot

活動• 今週のGrails 意訳版

• grails.jp/news

• Grailsリリース情報を

ほぼリアルタイム配信。

9年目に突入!

• はてな id: mottsnite

Page 4: JJUG CCC 20150411 grails3 Spring-boot

本日のお話

• Grails ? • Road to 3.0

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

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

Page 5: JJUG CCC 20150411 grails3 Spring-boot

“祝!New GRAILS_HOME!(4.9)” ↓

Object Computing, Inc.

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

Page 6: JJUG CCC 20150411 grails3 Spring-boot

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

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

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

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

Page 7: JJUG CCC 20150411 grails3 Spring-boot

Road to 3.0

Grails 3.0への道

Page 8: JJUG CCC 20150411 grails3 Spring-boot

図解説明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なので依存するプラグインは注意してね。

Page 9: JJUG CCC 20150411 grails3 Spring-boot

図解説明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

近代

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

Page 10: JJUG CCC 20150411 grails3 Spring-boot

Road to 3.0

• Road to 3.0 構想

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

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

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

Page 11: JJUG CCC 20150411 grails3 Spring-boot

Grails 2.4.x リリース

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

Page 12: JJUG CCC 20150411 grails3 Spring-boot

図解説明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

Page 13: JJUG CCC 20150411 grails3 Spring-boot

Spring 4.0? 今はSpring 4.1だろっ!

Page 14: JJUG CCC 20150411 grails3 Spring-boot

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

Page 15: JJUG CCC 20150411 grails3 Spring-boot

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

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

Page 16: JJUG CCC 20150411 grails3 Spring-boot

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

Page 17: JJUG CCC 20150411 grails3 Spring-boot

Grails 2.5

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

• Groovy 2.4 対応 • Spring 4.1 対応

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

Page 18: JJUG CCC 20150411 grails3 Spring-boot

図解説明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なので依存するプラグインは注意してね。

Page 19: JJUG CCC 20150411 grails3 Spring-boot

図解説明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なので依存するプラグインは注意してね。

Page 20: JJUG CCC 20150411 grails3 Spring-boot

図解説明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

Page 21: JJUG CCC 20150411 grails3 Spring-boot

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');

Page 22: JJUG CCC 20150411 grails3 Spring-boot

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

デモ

Page 23: JJUG CCC 20150411 grails3 Spring-boot

Standalone GSP & Spring Boot

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

Page 24: JJUG CCC 20150411 grails3 Spring-boot

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

Page 25: JJUG CCC 20150411 grails3 Spring-boot

図解説明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

Page 26: JJUG CCC 20150411 grails3 Spring-boot

Grails 3

Spring Boot

Gradle

Page 27: JJUG CCC 20150411 grails3 Spring-boot

Grails 3

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

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

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

Page 28: JJUG CCC 20150411 grails3 Spring-boot

図解説明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なので依存するプラグインは注意してね。

Page 29: JJUG CCC 20150411 grails3 Spring-boot

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

Page 30: JJUG CCC 20150411 grails3 Spring-boot

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本 持ってないの?

Page 31: JJUG CCC 20150411 grails3 Spring-boot
Page 32: JJUG CCC 20150411 grails3 Spring-boot

Grails3 - 何故 Spring Boot?

• マイクロサービス

Page 33: JJUG CCC 20150411 grails3 Spring-boot

マイクロサービス

Page 34: JJUG CCC 20150411 grails3 Spring-boot

マイクロサービス

Page 35: JJUG CCC 20150411 grails3 Spring-boot

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

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

Page 36: JJUG CCC 20150411 grails3 Spring-boot

Grails3 - 何故 Spring Boot?

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

• Tomcat, Jetty, Undertow

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

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

• spring-boot-autoconfigure

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

Page 37: JJUG CCC 20150411 grails3 Spring-boot

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

Page 38: JJUG CCC 20150411 grails3 Spring-boot

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') • 物によっては動きが?まあマイクロサービスですから。

Page 39: JJUG CCC 20150411 grails3 Spring-boot

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

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

Page 40: JJUG CCC 20150411 grails3 Spring-boot

Keynote: Grails 3.0 Preview

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

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

スライド流用

Page 41: JJUG CCC 20150411 grails3 Spring-boot

Keynote: Grails 3.0 Preview

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

スライド流用

Page 42: JJUG CCC 20150411 grails3 Spring-boot

Keynote: Grails 3.0 Preview

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

スライド流用

Page 43: JJUG CCC 20150411 grails3 Spring-boot

Keynote: Grails 3.0 Preview

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

スライド流用

Page 44: JJUG CCC 20150411 grails3 Spring-boot

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

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

• traitがASTされます!

Page 45: JJUG CCC 20150411 grails3 Spring-boot

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

• 内部フローの変更

Page 46: JJUG CCC 20150411 grails3 Spring-boot

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

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

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

Page 47: JJUG CCC 20150411 grails3 Spring-boot

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

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

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

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

Page 48: JJUG CCC 20150411 grails3 Spring-boot

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

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

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

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

Page 49: JJUG CCC 20150411 grails3 Spring-boot

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

Page 50: JJUG CCC 20150411 grails3 Spring-boot

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

Page 51: JJUG CCC 20150411 grails3 Spring-boot

デモ

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

Page 52: JJUG CCC 20150411 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プラグイン

Page 53: JJUG CCC 20150411 grails3 Spring-boot

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

Page 54: JJUG CCC 20150411 grails3 Spring-boot

Grails3 でのプラグイン

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

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

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

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

• リソース系: webjarsを活用

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

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

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

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

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

Page 55: JJUG CCC 20150411 grails3 Spring-boot

図解説明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なので依存するプラグインは注意してね。

Page 56: JJUG CCC 20150411 grails3 Spring-boot

Grails3 まとめ

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

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

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

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

Page 57: JJUG CCC 20150411 grails3 Spring-boot

JGGUGに集まれ!

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

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

Page 58: JJUG CCC 20150411 grails3 Spring-boot

Q&A

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

Page 59: JJUG CCC 20150411 grails3 Spring-boot

Thank you.

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

www.jggug.org59