Suche senden
Hochladen
Play2実践tips集
•
13 gefällt mir
•
7,535 views
T
takezoe
Folgen
Software
Melden
Teilen
Melden
Teilen
1 von 14
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
(自分流)Gitの運用ルール
(自分流)Gitの運用ルール
Erina Takei
バージョン管理システム比較資料
バージョン管理システム比較資料
suzzsegv
Redmine + gitlab: merge base development
Redmine + gitlab: merge base development
smdkk
Google Product
Google Product
Daisuke Sugai
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
CROOZ, inc.
マジカルsvnとキュアgit
マジカルsvnとキュアgit
Takafumi ONAKA
GitHubで学ぶバージョン管理
GitHubで学ぶバージョン管理
Masafumi Yokoyama
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
Empfohlen
(自分流)Gitの運用ルール
(自分流)Gitの運用ルール
Erina Takei
バージョン管理システム比較資料
バージョン管理システム比較資料
suzzsegv
Redmine + gitlab: merge base development
Redmine + gitlab: merge base development
smdkk
Google Product
Google Product
Daisuke Sugai
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
CROOZ, inc.
マジカルsvnとキュアgit
マジカルsvnとキュアgit
Takafumi ONAKA
GitHubで学ぶバージョン管理
GitHubで学ぶバージョン管理
Masafumi Yokoyama
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
Scala界隈の近況
Scala界隈の近況
takezoe
ネタじゃないScala.js
ネタじゃないScala.js
takezoe
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
takezoe
Slick入門
Slick入門
chibochibo
ドワンゴでのScala活用事例「ニコニコandroid」
ドワンゴでのScala活用事例「ニコニコandroid」
Satoshi Goto
色んなScalaを調べてみた
色んなScalaを調べてみた
Jiro Hiraiwa
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
Ruslan Shevchenko
アドテク企業のScala導入について振り返るlt
アドテク企業のScala導入について振り返るlt
Jiro Hiraiwa
リーンでアジャイルにAndroidアプリ開発をしてみた!(NECビッグローブ ABC向け資料)
リーンでアジャイルにAndroidアプリ開発をしてみた!(NECビッグローブ ABC向け資料)
BIGLOBE Tech Talk
アクターモデルについて
アクターモデルについて
Takamasa Mitsuji
Scala@SmartNews_20150221
Scala@SmartNews_20150221
Shigekazu Takei
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
takezoe
Reactive microservices with play and akka
Reactive microservices with play and akka
scalaconfjp
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
Kazuki Negoro
Without Resilience, Nothing Else Matters
Without Resilience, Nothing Else Matters
Jonas Bonér
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
Yuta Okamoto
【初公開】チャットワーク検索機能を支える技術
【初公開】チャットワーク検索機能を支える技術
Yoshinori Fujiwara
Zen of Akka
Zen of Akka
Konrad Malawski
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
Weitere ähnliche Inhalte
Andere mochten auch
Scala界隈の近況
Scala界隈の近況
takezoe
ネタじゃないScala.js
ネタじゃないScala.js
takezoe
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
takezoe
Slick入門
Slick入門
chibochibo
ドワンゴでのScala活用事例「ニコニコandroid」
ドワンゴでのScala活用事例「ニコニコandroid」
Satoshi Goto
色んなScalaを調べてみた
色んなScalaを調べてみた
Jiro Hiraiwa
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
Ruslan Shevchenko
アドテク企業のScala導入について振り返るlt
アドテク企業のScala導入について振り返るlt
Jiro Hiraiwa
リーンでアジャイルにAndroidアプリ開発をしてみた!(NECビッグローブ ABC向け資料)
リーンでアジャイルにAndroidアプリ開発をしてみた!(NECビッグローブ ABC向け資料)
BIGLOBE Tech Talk
アクターモデルについて
アクターモデルについて
Takamasa Mitsuji
Scala@SmartNews_20150221
Scala@SmartNews_20150221
Shigekazu Takei
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
takezoe
Reactive microservices with play and akka
Reactive microservices with play and akka
scalaconfjp
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
Kazuki Negoro
Without Resilience, Nothing Else Matters
Without Resilience, Nothing Else Matters
Jonas Bonér
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
Yuta Okamoto
【初公開】チャットワーク検索機能を支える技術
【初公開】チャットワーク検索機能を支える技術
Yoshinori Fujiwara
Zen of Akka
Zen of Akka
Konrad Malawski
Andere mochten auch
(20)
Scala界隈の近況
Scala界隈の近況
ネタじゃないScala.js
ネタじゃないScala.js
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
Slick入門
Slick入門
ドワンゴでのScala活用事例「ニコニコandroid」
ドワンゴでのScala活用事例「ニコニコandroid」
色んなScalaを調べてみた
色んなScalaを調べてみた
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
アドテク企業のScala導入について振り返るlt
アドテク企業のScala導入について振り返るlt
リーンでアジャイルにAndroidアプリ開発をしてみた!(NECビッグローブ ABC向け資料)
リーンでアジャイルにAndroidアプリ開発をしてみた!(NECビッグローブ ABC向け資料)
アクターモデルについて
アクターモデルについて
Scala@SmartNews_20150221
Scala@SmartNews_20150221
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
Reactive microservices with play and akka
Reactive microservices with play and akka
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
Without Resilience, Nothing Else Matters
Without Resilience, Nothing Else Matters
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
【初公開】チャットワーク検索機能を支える技術
【初公開】チャットワーク検索機能を支える技術
Zen of Akka
Zen of Akka
Ähnlich wie Play2実践tips集
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
Kazuhiro Hara
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
Kazuhiro Hara
Play jjug2012spring
Play jjug2012spring
Takafumi Ikeda
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
Ryo Iinuma
TypeScript x Bot Framework
TypeScript x Bot Framework
Kazumi IWANAGA
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
Ossで作成するチーム開発環境
Ossで作成するチーム開発環境
Tadahiro Ishisaka
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
Redmine Ansible
Redmine Ansible
ITO Yoshiichi
XPagesジャンプスタート
XPagesジャンプスタート
Mitsuru Katoh
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
Ryo Mitoma
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
Manabu Shimobe
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
Masakazu Muraoka
ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側
Riou Tomita
Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方
Yoshitaka Seo
concrete5で社内システムのお話し
concrete5で社内システムのお話し
Tao Sasaki
コンシューマゲーム開発におけるHansoftの活用事例
コンシューマゲーム開発におけるHansoftの活用事例
Hiroyuki Tanaka
コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略
fisuda
Ähnlich wie Play2実践tips集
(20)
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
Play jjug2012spring
Play jjug2012spring
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
TypeScript x Bot Framework
TypeScript x Bot Framework
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
Ossで作成するチーム開発環境
Ossで作成するチーム開発環境
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Redmine Ansible
Redmine Ansible
XPagesジャンプスタート
XPagesジャンプスタート
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側
Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方
concrete5で社内システムのお話し
concrete5で社内システムのお話し
コンシューマゲーム開発におけるHansoftの活用事例
コンシューマゲーム開発におけるHansoftの活用事例
コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略
Mehr von takezoe
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
takezoe
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
takezoe
Testing Distributed Query Engine as a Service
Testing Distributed Query Engine as a Service
takezoe
Revisit Dependency Injection in scala
Revisit Dependency Injection in scala
takezoe
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
takezoe
頑張りすぎないScala
頑張りすぎないScala
takezoe
GitBucket: Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
takezoe
Non-Functional Programming in Scala
Non-Functional Programming in Scala
takezoe
Scala警察のすすめ
Scala警察のすすめ
takezoe
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
The best of AltJava is Xtend
The best of AltJava is Xtend
takezoe
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
Tracing Microservices with Zipkin
Tracing Microservices with Zipkin
takezoe
Type-safe front-end development with Scala
Type-safe front-end development with Scala
takezoe
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
takezoe
Macro in Scala
Macro in Scala
takezoe
Java9 and Project Jigsaw
Java9 and Project Jigsaw
takezoe
Reactive database access with Slick3
Reactive database access with Slick3
takezoe
markedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVM
takezoe
Excel方眼紙を支えるJava技術 2015
Excel方眼紙を支えるJava技術 2015
takezoe
Mehr von takezoe
(20)
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
Testing Distributed Query Engine as a Service
Testing Distributed Query Engine as a Service
Revisit Dependency Injection in scala
Revisit Dependency Injection in scala
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
頑張りすぎないScala
頑張りすぎないScala
GitBucket: Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
Non-Functional Programming in Scala
Non-Functional Programming in Scala
Scala警察のすすめ
Scala警察のすすめ
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
The best of AltJava is Xtend
The best of AltJava is Xtend
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
Tracing Microservices with Zipkin
Tracing Microservices with Zipkin
Type-safe front-end development with Scala
Type-safe front-end development with Scala
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
Macro in Scala
Macro in Scala
Java9 and Project Jigsaw
Java9 and Project Jigsaw
Reactive database access with Slick3
Reactive database access with Slick3
markedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVM
Excel方眼紙を支えるJava技術 2015
Excel方眼紙を支えるJava技術 2015
Play2実践tips集
1.
1 Play2実践Tips集 Naoki Takezoe BizReach, Inc.
2.
Topic • プロジェクト構成 • 開発モードの高速化 •
マッピング、フォーマット • コネクションプール • 日本語ルーティング • セッション管理 • 認証処理 • 非同期処理、ジョブスケジューリング • 運用時のあれこれ 2
3.
プロジェクト構成 • IntelliJで1プロジェクトで開発するためにsbtのマル チプロジェクト構成にしています 3 ユーザ側Webアプリ (Playプロジェクト) 管理側Webアプリ (Playプロジェクト) Web共通 (Playプロジェクトだがライブラリとして使用) バッチアプリ (sbtプロジェクト) 全体共通 (sbtプロジェクト)
4.
開発モードの高速化 • play2-fastassetsを使用して静的リソースをブラウ ザにキャッシュすることでリクエストを抑制 – https://github.com/takezoe/play2-fastassets 4 <link
rel="stylesheet" media="screen" href="@FastAssets.at("stylesheets/main.css")"> <link rel="stylesheet" media="screen" href="assets/stylesheets/main.css?142014022630"> バージョンタグ付きのパスを生成するのでファイルを変更した場合はリクエストが飛ぶ 運用時のバージョニングにも使用(運用時のバージョニングはPlay 2.3で入る模様) https://github.com/playframework/playframework/issues/1897
5.
フォームのTuple22問題 • 項目数の多いフォームを定義できない – 項目を適当な粒度でグルーピングしてネストさせる –
Scala 2.11では解消されるはず… 5 val userForm = Form( mapping( "firstName" -> text, "lastName" -> text, "mailAddress" -> email, "password" -> text, "companyInfo" -> mapping( "company" -> text, "department" -> text )(CompanyInfo.apply)(CompanyInfo.unapply) )(UserInfo.apply)(UserInfo.unapply) )
6.
テンプレート • Play標準のヘルパー(@inputText等)は基本的に 使用していない – 余計なマークアップが出力されてしまう –
エラーメッセージが微妙 – デザイナとの連携の問題 6
7.
コネクションプール • BoneCPには複数の問題があるため、Play標準の dbpluginを無効にしてHikariCP play
pluginを使用 – http://edulify.github.io/play-hikaricp.edulify.com/ 7 dbpluginを無効にするとevolutionが使えなくなるので注意! Playのdbpluginに依存しないevolutionの代替としてplay-flywayがあります。 https://github.com/tototoshi/play-flyway
8.
日本語ルーティング • ルーティングに日本語パスを定義したい 8 # 標準ではURLエンコードしたパスをroutesに記述する必要がある GET
/%E3%83%8F%E3%83%AD%E3%83%BC controllers.Application.hello # パスを日本語で記述できるように拡張 GET /ハロー controllers.Application.hello
9.
日本語ルーティング • Globalでパスを変換 9 import play.api._ import
play.api.mvc._ import java.net.URLDecoder.decode object Global extends GlobalSettings { override def onRouteRequest(req: RequestHeader): Option[Handler] = { super.onRouteRequest( if(req.path.startsWith("/%")) req.copy(path = decode(req.path, "UTF-8")) else req) } } Globalにもこの他にも様々なフックメソッドが用意されており、オーバーライドすることで Playの全体的な動作のカスタマイズが可能です。
10.
セッション管理 • PlayはRails同様のクッキーセッション機能 • サーバサイドにデータを保存する仕組みは自分で 用意する必要がある •
PlayのCache APIを使用してセッションIDと紐付け て保存する機能を自作 • ローカルではEhcache、プロダクションでは Memcachedを使用(設定で切り替え可能) – https://github.com/mumoshu/play2-memcached 10
11.
認証処理 • Secure Social –
http://securesocial.ws/ – デフォルトで様々なソーシャルメディアに対応 – ユーザ登録、メール通知等の機能も組み込まれており、 設定は複雑だが高機能 – そこまで高機能なものが不要であればpac4jもいいかも • play2-auth – https://github.com/t2v/play2-auth – 権限によるアクションの認証機構を提供 – システム独自のユーザ管理を行う業務アプリケーション 等に向いている 11
12.
非同期処理 • メール送信や外部APIの呼び出しなど時間のかかる 処理はPlayのコントローラからアクターを起動して非 同期実行 12 object SendMailController
extends Controller { val actor = Akka.system.actorOf(Props[SendMailActor], name = "sendMailActor") def send = DBAction { implicit request => // メール送信対象のユーザを取得 val accounts = Accounts.filter(_.acceptMail is true.bind).list // 送信対象のユーザを指定してアクターを起動 actor ! users // レスポンスを返す Ok(views.html.test("test page.")) } }
13.
非同期処理 • 定期的に行う処理はakka-quartzを使用してアクタ ーをスケジュール実行 – https://github.com/theatrus/akka-quartz 13 Typesafeで開発しているakka-quartz-schedulerというものもありますが、 application.confにスケジュールを記述する必要があるので動的にスケジュールを 設定したいという用途には向いていません。 https://github.com/typesafehub/akka-quartz-scheduler //
スケジューラを取得 val quartzActor = Akka.system.actorOf(Props[QuartzActor]) // スケジュールを登録 quartzActor ! AddCronSchedule( Akka.system.actorOf(Props[HelloWorldActor]), // アクター "0/5 * * * * ?", // スケジュール "HelloWorld" // メッセージ )
14.
デプロイ、運用にかんするあれこれ • distで生成したzipファイルをサーバに転送、展開し てシェルスクリプトを実行して起動 – Commons
Daemon(jsvc)を使ってデーモン化 http://d.hatena.ne.jp/takezoe/20140516#p1 • Playの起動時にオプションで設定ファイルを指定 – -Dconfig.resource=クラスパス内の設定ファイル – -Dconfig.file=ファイルシステム上の設定ファイル • ログにはslf4j+LogBackを使用 – LogBackの設定は全開にしておき、Play側の設定でログ レベルを調節している 14
Jetzt herunterladen