プラガブル Play20 Scala

11,453 views

Published on

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

1 Comment
10 Likes
Statistics
Notes
No Downloads
Views
Total views
11,453
On SlideShare
0
From Embeds
0
Number of Embeds
8,266
Actions
Shares
0
Downloads
15
Comments
1
Likes
10
Embeds 0
No embeds

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
  • プラガブル Play20 Scala

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

    ×