implicit class を利用して Seq (とか)にメソッドを生やす

case class の Seq に対するメソッドを生やしたい時どうするか。例えば、下記のような case class があるとする。 case class Range( min: Int, max: Int ) これの Seq つまり、Seq[Range] に対して、含まれるRangeの中から、最小の min と 最大の max を取…

最近よくやるPlayFrameworkでのRequest Body(Json)の簡易Validation

業務では BodyParser での parse 時に 簡易的なValidationをすることが多い。以前は、型チェック程度の本当に簡易な Validation しかしていなかったが、最近はもう少し細かく Validation をしつつ、レスポンスを分けれるようにする書き方をすることが多いの…

ControllerComponents の中身を少し見てみる

PlayFrameworkを使っていると、まるで呪文のように何も考えずにControllerに書いている、これ。 class HomeController @Inject() ( cc: ControllerComponents )(implicit ec: ExecutionContext) extends AbstractController(cc) { この、ControllerComponent…

play.filters.headers で設定する contentSecurityPolicy は Play 2.7 から非推奨になっている

New Content Security Policy FilterThere is a new Content Security Policy filter available that supports CSP nonce and hashes for embedded content.The previous setting of enabling CSP by default and setting it to default-src 'self' was too …

IntelliJ に package prefix を省略してくれるPluginが追加されていた。

JetBrainsのブログ Enhanced Package Prefixes 試したいことがあり、新しく Scala のプロジェクトを作成しようとしたら、見慣れないものが追加されていた。 Package prefix なるものが追加されていたPackage prefix なるもの 以前からあったものを見落として…

AWSでWebサービスにCognitoの認証をつけてみる

開発中のWebサービスを公開したいけれど全世界には公開したくないとか、簡単な認証をつけたいがBasic認証は簡単すぎるとか、そもそもクローズドに作りたいとかある。そういう時Cognitoを使ったらいけるって話を見つけた。これを参考に自分でもやってみる。 …

catsのEitherTを使ってみる

普段Scalaを使っていると、Futureがたくさん出てくる。Futureは並行処理を簡単にしてくれる型だが、Eitherなどを使って例外をハンドリングしようと思うと結構面倒がある。普段PlayFrameworkを使っていると、DBとやりとりする層でFutureを生成したら、そのま…

PlayFramework でアクセスできるhostを制限する

概要 PlayFrameworkにはアクセスできるhostを制限できるFilterがあり、これはapplication.confファイル下記を設定することで、実現できる。 play.filters.hosts { allowed = [".example.com", "localhost:9000"] } このフィルターはホワイトリスト形式で、ex…

scalatestplus-play と ScalaTest を併用すると弊害がでる

scalatestplus-play とscalatest は一緒に入れていいものだと勝手に思ってた。ScalaTestをPlay用に拡張するプラグインだと思ってた。けど、scalatestplus-play は ScalaTestを内包しているのでscalatest-playのみを入れればよかったようだ。むしろ、scalates…

初めてのPlayFramework

ここでは、まっさらの状態からPlayFrameworkの最初の開発を始めるまでを目指す。まっさらと言っても、PCを買うところからではない。 PlayFrameworkとは? PlayFramework はScalaを使ってWebアプリを開発する際によく使われるオープンソースのWebアプリケーシ…