Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Play 2.3 から 2.4 へアップデートした話
Search
tsuyoshi yoshizawa
July 05, 2015
Technology
3.1k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Play 2.3 から 2.4 へアップデートした話
Play meetup 2 で発表した内容です。
https://playframeworkja.doorkeeper.jp/events/27023
tsuyoshi yoshizawa
July 05, 2015
More Decks by tsuyoshi yoshizawa
See All by tsuyoshi yoshizawa
Scala Fukuoka Play 25 2016
tsuyoshizawa
2
2.4k
seasar_conf_2015.pdf
tsuyoshizawa
3
2.8k
Other Decks in Technology
See All in Technology
freeeにおける AI を用いた ブラウザ動作確認の自動化の取り組み
freee
PRO
0
220
撮るだけでは終わらない。ソニーが挑むB2Bカメラソリューション開発
sony
0
110
ドメインエキスパートは いかにして AI を使って プロダクト開発をするか
tatsuyashiraishi
1
200
[re:Invent2026事前勉強会(有志開催)]続きは、ラスベガスの廊下で / continue-in-the-vegas-hallway
sh_fk2
0
280
AIコーディングを実践してきた1年を振り返る / Looking Back on a Year of Practicing AI Coding
takedatakashi
1
140
シンプルな設定ファイルで実現する AWS IAM Identity Center の ユーザー管理Terraformフレームワークを公開しました / Simplifying AWS IAM Identity Center User Management: An Open-Source Terraform Framework
yamaguchitk333
0
320
クラウドサインを止めずに Nuxt へ 次の10年のために先に決めたこと
bengo4com
1
160
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
1.1k
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
2
480
AIに任せられるFlutterコードベースを作る 〜仕様をコードで表し、ハーネスで守る〜
myohei
1
180
野良MCPサーバーを排除せよ!MCPサーバーのガバナンス
yukiogawa
1
240
Let's Change Our World—Again
snoozer05
PRO
6
680
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
234
19k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Speed Design
sergeychernyshev
33
2.2k
Faster Mobile Websites
deanohume
310
32k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
590
How GitHub (no longer) Works
holman
316
150k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
Raft: Consensus for Rubyists
vanstee
143
7.8k
Believing is Seeing
oripsolob
1
250
Transcript
Play 2.3 ͔Β Play 2.4 ʹ্͛ͨ - Play meetup 2
-
ࣗݾհ Tsuyoshi Yoshizawa ussy00 tsuyoshizawa scala-oauth2-provider ϝϯςͯ͠·͢ גࣜձࣾψʔϥϘͰ Typetalk ͱ͍͏
chat αʔ ϏεΛ Play Ͱͭͬͯ͘·͢
Play 2.4 ʹͯ͠ ຊ൪ڥͰͳ͘Քಇ ࡉ͔͍όάग़͍ͯͯɺطʹ 2.4.2 ·ͰϦϦʔε [2.4] Still a
thread leak in development environment https://github.com/playframework/playframework/issues/4649
2.4 ͰԿ͕มΘͬͨͷ͔ • Dependency Injection ͷαϙʔτ • Plugin ͔Β Module
• i18n ͷΈ͕มߋ • ઃఆΩʔͷมߋ What’s new in Play 2.4 https://playframework.com/documentation/2.4.x/Highlights24 Play 2.4 Migration Guide https://playframework.com/documentation/2.4.x/Migration24
Dependency Injection Controller ʹίϯϙʔωϯτΛ DI ͢ΔʹɺΠϯε λϯελΠϓΛ object ͔Β class
ʹมߋ͢Δඞཁ͋Γ Guice Λͬͯ DI ʢJSR 330 ϕʔεʣ import javax.inject._ import play.api.libs.ws._ class MyComponent @Inject() (ws: WSClient) { // ... }
Module Plugin ඇਪʹͳΓɺ DI ϕʔεͳ Module ʹ Ҡߦ͍ͯ͘͠ඞཁ͋Γ Play 2.4
ͷ Module ͷ࡞Γํͱ Plugin ͔ΒͷҠߦ ʹ͍ͭͯ http://tototoshi.hatenablog.com/entry/2014/12/14/170745
i18n Messages ʹ͢ܕ͕ Lang ͔Β Messages ࠃࡍԽରԠͯ͠ΔͱόʔδϣϯΞοϓ͕໘ case class Messages(lang:
Lang, messages: MessagesApi) object Messages { def apply(key: String, args: Any*)(implicit messages: Messages): String
ઃఆΩʔͷมߋ • ઃఆ͕ແࢹ͞ΕΔΘ͚Ͱͳ͍ • ࣮ߦ࣌ʹܯࠂ͕ग़ྗ͞Εͯؾ͚ͮΔΈ͋Γ • ৽͍͠ͷʹஔ͖͍͑ͯ͘ application.secret session.*
play.crypto.secret play.http.session.*
ΞοϓάϨʔυ
ݱঢ়ͷ֬ೝ • ෳਓͰ Git Λͬͯฒߦ։ൃΛ͍ͯ͠Δ • ͋Δఔେ͖͍ϒϥϯν͋Δ • ϓϩδΣΫτதنఔ •
ͦΕͳΓʹमਖ਼ൣғେ͖͘ͳΓͦ͏ • Play 2.4 ఆҠߦͰ͖ΔͷΛఏڙ͍ͯ͠Δ
ஈ֊తΞοϓάϨʔυ 1. Play 2.3 ελΠϧͰɺ·ͣίϯύΠϧΛ௨͢ 2. ςετΛ௨͠ಈ࡞֬ೝͯ͠ίϛοτ 3. Play 2.4
ελΠϧʹগͣͭ͠Ҡߦ͍ͯ͘͠ ΞοϓάϨʔυ ා͘ͳ͍
ࣗ࡞ϓϥάΠϯͷҠߦ Redis ΛΩϟογϡʹ͏ͨΊʹ Plugin Λࣗ࡞ (scala-redis Λར༻) class RedisModule extends
Module { def bindings(environment: Environment, configuration: Configuration) = Seq( bind[CacheApi].to[RedisCacheApi] ) } play.modules.enabled += "modules.RedisModule" play.modules.disabled += "play.api.cache.EhCacheModule" build.sbt
ScalikeJDBC Play Support play.modules.enabled += "scalikejdbc.PlayDBApiAdapterModule" db {
default { driver = org.postgresql.Driver url = "jdbc:postgresql://localhost/test" username = test password = test hikaricp { poolName = "play" registerMbeans = true } } } HikariCP ͷઃఆΛར༻͔ͨͬͨ͠ͷͰ scalikejdbc-play-dbapi-adapter Λར༻ 2.4 ͔Β HikariCP
application.conf
Thread pool configuration akka { actor {
default-‐dispatcher { fork-‐join-‐executor { parallelism-‐min = 300 parallelism-‐max = 300 } } } } play { akka { actor { default-‐dispatcher = { fork-‐join-‐executor { parallelism-‐min = 300 parallelism-‐max = 300 } } } } } 2.3 2.4 Akka ͱಉ͡هड़ʹͳͬͨ http://doc.akka.io/docs/akka/2.3.11/general/configuration.html
Remote address औಘ trustxforwarded=true 2.3 ·ͰϦόʔεϓϩΩγΛհ͢Δͱ͖ʹɺҎ ԼͷઃఆΛ͢Δඞཁ͕͕͋ͬͨෆཁʹ 2.4 ͔Β x-forwarded
ʹՃ͑ͯ RFC7239 αϙʔ τɻ play.http.forwarded.version ͰΓସ͑Մೳ https://www.playframework.com/documentation/2.4.x/HTTPServer
i18n
i18n ରԠ Controller ͷΠϯελϯελΠϓ͕ object ͷ߹ s/implicit lang: Lang/implicit messages:
Messages/g import play.api.play.current import play.api.i18n.Messages.Implicits._ Lang ͔Β Messages ʹ҉తมΛߦͬͯ͘ΕΔ Controller ʹҎԼͷ 2 ߦΛՃ͢Δ
withLang/clearingLang object FooController extends Controller with LegacyI18nSupport val lang =
user.toLang Ok(Messages("hello.world")).withLang(lang) trait LegacyI18nSupport { implicit class ResultWithLang(result: Result)(implicit messagesApi: MessagesApi) { def withLang(lang: Lang): Result = messagesApi.setLang(result, lang) def clearingLang: Result = messagesApi.clearLang(result) } } ҉తʹ messagesApi Λݺͼग़ͯ͘͠ΕΔ Result ͔Β MessagesApi ʹҠಈ͍ͯ͠Δ
ࢦ͖͢ 2.4 style import javax.inject.Inject import play.api.i18n.{MessagesApi, I18nSupport}
import play.api.mvc.Controller class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport { } Controller ʹ MessagesApi Λ DI ͯ͠ i18nSupport Λ mixin RequestHeader Λ Messages ʹ҉తʹม͢Δ
class Controller GET /
@controllers.Application.index 2.3 ํࣜͰ @ Λ͚ͭΔ͜ͱͰಛఆͷ Controller ͔ Β class Խ͍ͯ͘͜͠ͱ͕Մೳ routesGenerator := InjectedRoutesGenerator routes build.sbt 2.4 ඪ४ͷΓํɻ Controller ͯ͢ class
2.4 style ʹ͚ͯ
Removing GlobalSettings GlobalSettings HttpErrorHandler HttpRequestHandler HttpFilter ApplicationLifecycle GlobalSettings 2.4
Ͱ Ҿ͖ଓ͖ར༻Ͱ͖Δ͕ɾɾɾ
ApplicationLifecyle @Singleton class IntervalJobs @Inject() ( system:
ActorSystem, lifecycle: ApplicationLifecycle) { val minuteJob = system.scheduler.schedule(1.minutes, 1.minutes) { // … } lifecycle.addStopHook { () => Future.successful(minuteJob.cancel()) } } • GlobalSettings#onStart • DI ରΫϥεͷίϯετϥΫλ • GlobalSettings#onStop • ApplicationLifecycle#addStopHook
HttpErrorHandler class ErrorHandler @Inject() ( env: Environment,
config: Configuration, sourceMapper: OptionalSourceMapper, router: Provider[Router], val messagesApi: MessagesApi ) extends DefaultHttpErrorHandler(env, config, sourceMapper, router) with I18nSupport { def onBadRequest(request: RequestHeader, message: String) = ??? def onForbidden(request: RequestHeader, message: String) = ??? def onNotFound(request: RequestHeader, message: String) = ??? def onOtherClientError(request: RequestHeader, statusCode: Int, message: String) = ??? def onServerError(request: RequestHeader, exception: Throwable) = ??? } DefaultHttpErrorHandler Λܧঝ͢ΔͱҠߦ͍͢͠ I18nSupport ΛͬͯΤϥʔը໘ͷࠃࡍԽରԠՄ
͍ͭ·ͰʹҠߦͨ͠Β͍͍ͷ͔ʁ
Play Roadmap 3.0 Play 3 Implementation Plan https://docs.google.com/document/d/1OejviUX5TDlRVeKg1JD9L4qh2Tn21giItmyxRXCydN0/edit Play 3.0.0
1st June 2016 Remove global state Play 2.5.0 1st October 2015 Deprecate every API that relies on global state for which there exists a DI alternative.
·ͱΊ • վળ͞Ε͍ͯ͘ Play • Play 2.4 3.0 ʹ͚ͨελʔτ
• Play νʔϜҠߦΛߟྀͯ͘͠Ε͓ͯΓɺஈ֊ తʹΞοϓάϨʔυՄೳ • Play 2.4 ͔Β࢝ΊΔਓݹ͍ใʹΘ͞Εͳ͍ Α͏ʹ