by shigemk2

当面は技術的なことしか書かない

まとめ Playソースコード完全マスターへの道 #ScalaMatsuri #sm_c

  • ScalaもPlayもそんなに…って言う人を対象にしている
  • こうすればだいたい良い みたいなやつ

  • tototoshi

    • scala-csv
    • flyway-play
    • slick-joda-mapper
    • playのプラグインなど
    • scala.jsの怪しい情報商材など

ソースコードを読むとき

  • 「バグっている」と思った時に、自分の実装なのかフレームワークなのかわからない時がある
  • フレームワークのカスタマイズ
  • フレームワークの勉強
  • 暇つぶし

読むのは難しい

  • どこから読めばいいかわからない
  • 設計もわからない
  • ソースコードを読むのはしんどい

そういうのを取り除きたい

ゴール

  • ソースリーディングの役割とか背景などを知る
  • Playの個別のモジュールを知る

ロードマップ

  1. build.sbt
  2. パターン
  3. モジュール
  4. 完全マスター

build.sbt

  • libraryDependencies(使っているライブラリ)
  • dependsOn(sbtはマルチプロジェクトが簡単に出来るので、サブプロジェクト同士の依存関係)

2.1から2.5にかけて、だいぶ複雑になってきている

  • play-javaとplayは同じjar
  • 2.0→2.5でリファクタリングの歴史がわかる
  • 最初はコードが汚かった
    • テストもしづらかった
  • どんどん細かくなっていった
  • Play2.0のときは巨大だったのが細かく分かれていった
  • 各jarのサイズが小さくなっていった
  • ひとつひとつのコンポーネントが小さくなっていった

Playのパターンを理解する

  • dependency injection DI
  • implicit parameter a.k.a type classes

ScalaでDIってどうやるの

  • 結構難しい
  • Springあたりから拾ってきた
  • constructor injection
    • 切り離さないことには単体テスト出来ない
  • RuntimeDI

Play Module

  • Each Module is implemented as Play Module
  • DIの仕組みで作ることが出来る
  • まずはプラグインを読むことからはじめて見たらいいんじゃないでしょうか。
  • 昔あったプラグイン読み込みの優先順位を決めるファイルが、今は、ない

implicit parameter

  • 継承を使わないでimportで振るまいを分けることが出来る
  • type classes in play
    • writeable
    • contenttypeof
    • querystringbindable
    • pathbindable

モジュールの説明

  • play
    • コア部分 Action Rougingなど
  • play-java

    • ↑のJava版…
  • playを読む機会は多い

  • 読みたいjdbc系ライブラリを選んで読んだらいいと思っている
  • WS
  • play-json
  • play-server
  • play-streams(reactive-streams)
  • sbt-plugin

完璧にマスターするのは

あなたの仕事です

まとめ

  • Play2.0→2.5でだいぶ発展している
  • DIのバインディングの仕組みがわかっていれば、読みやすくなる
  • 型クラスがちょいちょい使われているのでその仕組を知っているとわかりやすい

  • モジュールなど

  • core
  • modules ws, cache,など
  • sbt-plugin