Your SlideShare is downloading. ×
  • Like
プラガブル Play20 Scala
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

プラガブル Play20 Scala

  • 10,185 views
Published

Play プラグインやその他モジュールの概要、 ScalikeJDBC の紹介と #akskscala の参加者募集について。

Play プラグインやその他モジュールの概要、 ScalikeJDBC の紹介と #akskscala の参加者募集について。

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
10,185
On SlideShare
0
From Embeds
0
Number of Embeds
8

Actions

Shares
Downloads
14
Comments
1
Likes
10

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Transcript

  • 1. プラガブルPlay20 Scala Kazuhiro Sera (@seratch)
  • 2. アジェンダ軽く自己紹介Play の拡張全般についてScalikeJDBC のご紹介#akskscala へのお誘い
  • 3. 誰?Scala、Java がメインのプログラマいろいろやっています#akskscala @赤坂(溜池山王)Play は 1.0 出たときから
  • 4. 質問
  • 5. 質問Play20 プラグイン作ったことがある方はどれくらいいらっしゃいますか?
  • 6. 質問Play20 プラグイン作ったことがある方はどれくらいいらっしゃいますか?と質問したものの、そもそもプラグインの定義って明確なんだっけ・・?
  • 7. どうやらプラグインとは明確な定義はされていないものの、どうやらPlay20 プラグインは 2 種類あるplay.plugins に追加して使う Play アプリのランタイム機能拡張play コンソールを拡張するための sbtプラグイン
  • 8. イメージ図モジュールプラグイン プラグイン play.pluginsに追加 ではない形で (Play アプリ拡張) Play を 拡張するもの sbt プラグイン(play コンソール拡張)
  • 9. typesafehub/play-pluginsdust sbt プラグインguice play.pluginsinject play.pluginsmailer play.pluginsredis play.pluginssbtgoodies sbt プラグインsbtlogger sbt プラグインutil (プラグインではない)
  • 10. Play アプリ拡張(play.plugins)
  • 11. conf/play.plugins公式 Wiki の説明参照play.api.Plugin という trait拡張ポイントはコンストラクタとonStart/onStop/enabled のみ(2.0.2 時点)
  • 12. 何ができるのかコンストラクタや onStart でアプリ内共通で使うものを準備しておく典型例:コネクションプールの初期化実際プラグインにすべき要件は多くない
  • 13. 早速つくってみよう app 直下に MyPlugin.scalaimport play.api._class MyPlugin(app: Application) extends Plugin { def onStart(): Unit = { println(“This is my first Play20 plugin!”) }}
  • 14. テストも書こうimport org.specs2.mutable.Specificationobject MyPluginSpec extends Specification { "MyPlugin" should { "be available" in { running(FakeApplication( additionalPlugins = Seq("MyPlugin"), additionalConfiguration = Map("key", "value"))) { // do something ...
  • 15. 実際に使う conf/play.plugins に追加 読み込み順序の数値は昇順 Play 本体のプラグインの最後は GlobalPlugin (10000)10001: MyPlugin
  • 16. 拙作の例ScalikeJDBC Play PluginScalikeJDBC は SQL テンプレートベースの DB アクセスライブラリconf/application.conf の DB 設定を読み取ってコネクションプールを初期化
  • 17. Tips
  • 18. TipsPlugin のコンストラクタや onStart、onStop は一度しか呼ばれない?
  • 19. TipsPlugin のコンストラクタや onStart、onStop は一度しか呼ばれない?Production 環境ならそうだけど・・
  • 20. TipsPlugin のコンストラクタや onStart、onStop は一度しか呼ばれない?Production 環境ならそうだけど・・テストだと FakeApplication は大量に生成されて、その度に呼ばれまくる(重たい処理はキャッシュするなど)
  • 21. Play コンソール拡張(sbt プラグイン)
  • 22. sbt プラグインplay コンソールは sbt のラッパーなのですべての sbt プラグインが利用可能play コンソールに機能を追加するにはsbt プラグインを書く必要があるScala に慣れてないとハードル高め
  • 23. 拙作の例ScalikeJDBC Mapper Generator特に Play20 専用ではないので Play プラグインとは表記していないplay コンソールで「scalikejdbc-genuser」とやると user テーブルを元にapp/models/User.scala 自動生成
  • 24. 生成されたコード利用例// app/models/User.scalaval user: Option[User] = User.find(123)val count: Long = User.countAll()DB localTx { implicit session => User.findBy(“group_id = {groupId}”, ‘groupId -> 234) foreach { user => user.copy(groupId = 345).save() }}
  • 25. プラグインではない Play 拡張
  • 26. プラグインではない拡張Play の機能を拡張するのにプラグインにとらわれる必要はない@gakuzzzz さんによる play20-authは Controller に mixin して使うPlay20 を拡張、便利にするためにつくられたものは何でもモジュール?
  • 27. playmodules.net有志の方が作ったサイト(非公式)何かつくったらとりあえず登録してみるのもいいかもただ、将来的には公式サイトにうまく集約できる方がよさそう
  • 28. ScalikeJDBC のご紹介
  • 29. ScalikeJDBCSQL を知っていればすぐ使えるコードをどこでもそのまま再利用可能柔軟なトランザクション制御複数のデータソースに同時アクセス開発、サポートがとてもアクティブ
  • 30. あえて短所も・・他に比べてまだまだマイナーO/R マッパーではない記述はあまり DRY ではないのでコードの自動生成によってカバーしているPlay20 については Typesafe Stackに SLICK(ScalaQuery)が入る予定
  • 31. 試してみてくださいmapper-generator とセットでどうぞレガシー DB 連携の業務実績ありもしバグがあったら光の速さで直します日本語の情報も増やす予定ですまずはこちらをご一読ください
  • 32. #akskscala へのお誘い
  • 33. Scala はじめませんか?akskscala.github.com隔週で木曜 20:00∼赤坂(溜池山王)Play20 をやるなら Scala は必修です次回は 7/26 zentasks をいじります