- ScalaもPlayもそんなに…って言う人を対象にしている
こうすればだいたい良い みたいなやつ
tototoshi
- scala-csv
- flyway-play
- slick-joda-mapper
- playのプラグインなど
- scala.jsの怪しい情報商材など
ソースコードを読むとき
- 「バグっている」と思った時に、自分の実装なのかフレームワークなのかわからない時がある
- フレームワークのカスタマイズ
- フレームワークの勉強
- 暇つぶし
読むのは難しい
- どこから読めばいいかわからない
- 設計もわからない
- ソースコードを読むのはしんどい
そういうのを取り除きたい
ゴール
- ソースリーディングの役割とか背景などを知る
- Playの個別のモジュールを知る
ロードマップ
- build.sbt
- パターン
- モジュール
- 完全マスター
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