Play

Play Framework 2.9.0 に送ったPull Request

そろそろPlay Framework 2.9.0が出そうですね。ということで自分の送ったPull Requestをまとめてみました。 大きいところだとTwirlのScala 3対応ですね。いい感じにエラーメッセージ出すのにdottyとかsbtまで調べることになって沼でしたがたぶんなんとかなり…

Play Frameworkの開発チームに入れてもらいました

Play FrameworkがLightbendの手から離れる という発表が昨年の10月にあったんですが、それをきっかけにやりとりして Play FrameworkのGitHub Team に入れてもらいました。 しばらく待ちの状態だったんですが、先週くらいから動き初めたところです。とりあえ…

Modules should be fast and side-effect free と Guice は言っているがPlay Frameworkはそうなってはいない話

github.com Modules should be fast and side-effect free Modules should be fast and side-effect free(モジュールは速くて副作用なしであるべき)と Guice の Wiki にはあります。 これは Guice モジュールの中で DB に接続したりスレッド開始したりする…

PlayのCache APIでMemcachedやRedisの代わりにRDBを使う

Play frameworkはキャッシュのためのAPIを play.api.cahe というパッケージで提供しています。play.api.cache はそのバックエンドとして、CaffineやEhcacheが選択でき、またサードバーティのライブラリを使えばMemcached, Redisなどをバックエンドにすること…

いつもJavaConvertersでうまくいくとは限らない

ScalaとJavaのコレクションを相互に変換するには scala.collection.JavaConverters が便利です。例えばJavaのコレクションに .asScala をつければ、JavaのコレクションをラップしたScalaのコレクションが作られます。ただし、いつも .asScala で済むとは限り…

AirframeでPlayを動かそうとした

taroleoさんが開発しているAirframeが最近Twitterのタイムラインで話題になっていることが多いので、そろそろ触ってみようかと思い、とりあえずPlay frameworkのDIコンテナをGuiceからAirframeに置き換えるというのをやって見ました。結果は失敗に終わったん…

play-jsonでReads/Writes/Formatを定義しなくてもよくする

play-jsonはReads/Writes/Formatを定義するのが面倒とよく言われるので、shapelessの練習も兼ねて作ってみました。 https://github.com/tototoshi/play-json-generic scala> import play.api.libs.json._ import play.api.libs.json._ scala> case class Per…

7つのクラスローダー 7つの世界

Playを触っていると謎のClassNotFoundExceptionが発生することがあります。 もしかしてそれはDEVモードだけで起きてはいないでしょうか? 先日、開発中のPlayアプリケーションで、ある依存ライブラリからClassNotFoundExceptionが発生するという現象にあたり…

PlayのWebCommandsの使い方

Playのドキュメントを見るときに、公式サイトに行かなくても手元で http://localhost:9000/@documentation というURLにアクセスすればドキュメントサイトが見えるということはご存知でしょうか? これにはWebCommandsという仕組みで動いていて、ドキュメント…

Playに依存しないコードを書く

フレームワークの便利さとコードの柔軟性とのバランスの話。 PlayにはいわゆるMVC的な機能の他にいろいろと便利っぽいモジュールが付いていますが、 実際そいつらを使っていると依存関係や柔軟性の面でちょくちょく困ることがあります。 最近何度か困ったの…

Play2.4のプラグインシステムにある欠陥について

私の理解が正しければ、Play2.4のプラグインシステムにはプラグインの起動順が制御できないという大きな欠陥があります。Play2.3以前はplay.pluginsファイルに優先度を記述するというイケてない感が漂うやり方ではありましたが、問題なく制御することができ…

Scala関西 Summit 2015 でflyway-playについて話しました

先週大阪行ってきました。 内容としては、flyway-play、というかFlywayの紹介っぽくなってScala成分薄めになりました。

Slick のコードを生成する sbt プラグインを作りました

Slick コードを生成のイブラリがあり、公式のほうにいくつか使い方のサンプルがありますが、毎回コピペするのもなあと思って sbt プラグインにしました。今のところ Slick 2.1.0 に依存しています。Slick 3.0.0 が出たらそれ用のバージョンも出そうと思いま…

Flyway プラグインを Play 2.4 対応しました

flyway/flyway-play Play 2.1-2.3 向けにサードパーティプラグインとして play-flyway を開発してきましたが、少し前に Flyway の GitHub Organization に加えてもらい、めでたく公式モジュールとなりました。groupId も com.github.tototoshi から org.flyw…

play-json で snake_case な json を camelCase な case class にマッピングする

play-json を使えば json を case class にマッピングすることは簡単にできますが、json のキーがそのまま case class のフィールドに対応するため、snake_case な json API を case class にマッピングするためには、case class のフィールドも snake_case …

Play 2.4 の Module の作り方と Plugin からの移行について

Play 2.4 では今までの Plugin の仕組みが deprecated となり、 新たに Module という仕組みが導入されています。 Module はこれまた新たに導入された Runtime Dependency Injection の上に乗っかっています。 Play では Guice をデフォルトの DI 実装として…

Play で Scalate を使う

play-scalate っていう名前のプラグインはいろんな人が書き散らかしてて github 検索するとボロボロ出てくるんですが、ついうっかり仲間に加わってしまいました。 https://github.com/tototoshi/play-scalate build.sbt に設定すれば libraryDependencies ++…

Play 2.4 と Dependency Injection

Play 2.3 が出たばっかで 2.4 の話をします。 前置き: Scala での DI Scala では DI についてのベストプラクティスと言える方法はなく、まだ意見が分かれている状態です。大きく割ると DI コンテナなどを使った動的な DI と、cake pattern, implicit paramet…

Play で Scala.js を使う

Play meetup では Play や Scala のフレームワークの歴史みたいな話をしていましたが、本当はこのネタで LT をするつもりでした。諸事情によりってやつです。 さて Play で Scala.js をサポートしようぜって話は少し前からありますが、今のところまだ進展は…

play-flyway の話をしました @ 歌舞伎.tech #1

#kbkz_tech で play-flyway の宣伝をしました。 大したものではないですが資料上げときました。http://tototoshi.github.io/slides/kabukiza-tech-goodbye-play-evolutions/

play-flyway 0.2.0 をリリースしました

Flyway の Play プラグイン、play-flyway の 0.2.0 をリリースしました。https://github.com/tototoshi/play-flyway インストール Build.scala or build.sbt libraryDependencies += "com.github.tototoshi" %% "play-flyway" % "0.2.0"play.plugins 1000:co…

play-ascii-art-plugin 0.2.0 をリリースしました

https://github.com/tototoshi/play-ascii-art-pluginPlay の起動・終了時にアスキーアートを表示させるジョークプラグイン play-ascii-art-plugin の 0.2.0 ををリリースしました。play dist でのデプロイに対応しました。詳しくは前回のエントリを参照して…

Play で conf/ 以下のファイルを扱う場合の注意点

Play では conf/ 以下に設定ファイルや、マイグレーション用の sql を置きます。 場合によってはちょっとした画像をファイルを置くこともあるかもしれません。例えば、アプリ起動時にアスキーアートを表示するためにその素材を置くとか。あると思います。 こ…

Play 2.2, 2.3 Roadmap

https://docs.google.com/document/d/11sVi1-REAIDFVHvwBrfRt1uXkBzROHQYgmcZNGJtDnA/pubScala の重要と思うとこだけピックアップ。 2.2 Typesafe Activator Typesafe Activator っていうブラウザからプロジェクトのテンプレートを作ったり、開発できたりし…

Play 2.0 と 2.1 での Akka Actor の使い方の違い

Play を使おうとしたら、全然パフォーマンスがでない、なんで? → Akka のチューニングが必要だった。 という話は Play 2.0 の頃から結構有名な話でした。http://qiita.com/items/0c4bb34a420665536db4 http://tech.furyu.jp/blog/?p=2069 http://gendosu.jp…

scalikejdbc-play-fixture-plugin を作りました

(また Play プラグイン作ったのかよと言われそうですが、、、) おしごと的な Play アプリでは Fixture 機能を自前実装して、それでテストをしていました。 ただ、scalikejdbc に依存していたため、そこだけ切り出して Play プラグインにするとかはしてません…

【再】Play 2.x の QueryStringBindable, PathBindable について

先日 Play 2.x の QueryStringBindable, PathBindable について - tototoshiの日記 で joda-time 用に QueryStringBindable[T] を定義して遊びましたが、それをライブラリ化しました。ご自由にお使い下さい。tototoshi/play-joda-routes-binder · GitHub 設…

Play 2.x の QueryStringBindable, PathBindable について

よしださんのこんなツイートを見たので、 https://twitter.com/xuwei_k/status/302445064976732160 Play 2.x ではリクエストの処理をどのコントローラーのどのアクションに任せるか、 conf/routes というファイルで定義します。そのとき、パスやクエリストリ…

Play2 でファイルアップロードをテストする

Play2.0 の FakeRequest って withFormUrlEncodedBody はあるけど withMultipartFormDataBody はありません。 ですが、FakeRequest[MultipartFormData[TemporaryFile] ] を地道に作ってあげれば大丈夫。*1 こんな感じになります。 package controllers impor…

第三回Playframework勉強会でしゃべった

スライド Togetter ustPlay2.0 いいと思います