謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

Playframework

Playframework2.5 で Slack3 弄ってみる

まずはアプリケーション仕様 今回は特に何も考えず、Evolution で突っ込んだ文字列を画面に表示するだけ。 ジンプルなことは良いことだ。 教科書はこれ PlaySlick - 2.5.x Playframework プロジェクト作成 いつものこと activator new play-scala を選択する…

Playframework2.5.x でプロジェクト分離してみた

サブプロジェクト自体は、Playframework2.3 から存在していて、当時はあまり使い道も思い浮かばなかったが、今では大分使いやすくなってたのでメモ。 完全独立した sbt プロジェクトを取り込む このケースでは、完全に独立した sbt モジュールを取り込みます…

Playframework 2.5 で足りてなさそうなセキュリティヘッダ設定を追加する

セキュリティヘッダなんて、ヘッダに組み込むだけのものなので、ザクッと。 package filters import javax.inject.{Inject, Singleton} import akka.stream.Materializer import play.api.Configuration import play.api.mvc.{Filter, RequestHeader, Result…

Play2.4 でネストしたJsonをバインドする

何で今更かというと、これつかえねーかなと思ったから。 最初は、Forms でのバインドをしようとしたのだけど、早速フォーラムが見つかりました。 キーワードは Play recursive form https://groups.google.com/forum/#!topic/play-framework/Ya1hPmR2QtY こ…

フォームヘルパーをタグ調整する(Play 2.4.x) with マルチセレクトチェックボックス

Playframework 2.4 において、フィールドコンストラクタの仕様も変わったので、対応したチェックボックスを作ってみる。 Custom Field Constructors これがなんなのかというと、input とかの helpers の外枠の事。 いつぞや Bootstrap 対応した フォームヘル…

Play2.4 の DI を弄ってみる

まず適当に Singleton アノテーションをくっつけて使用する。 package utils.modules import javax.inject._ /** * アクセスカウンター */ @Singleton class AccessCounter { @volatile private var price = 0 def add(p: Int) = price += p def get = price…

Playframework 2.4.x でセキュリティヘッダの設定など

まず前提として、Playframework にはフィルタという機能がある。 Playframework 2.3.x 以下の場合は、Global オブジェクトにミックスインする形式をとっていた。 ScalaHttpFilters だが、Playframework 2.4.x 以降は、DI も含めて形式が変更となり、root パ…

Playframework2.4.xのサブプロジェクトの扱い

完全に親子関係でしたねってだけ。 子のオブジェクトは親から参照できるけど、親のオブジェクトを子は参照できない。 同時に、子は横つながりを持たない。 まぁなんとなく想像通りな訳で、使い道的には、幾つかのプロジェクトで共有しておきたい機能をサブプ…

PlayFramework 2.4 でサブプロジェクトで一部URLを切り出してみる

教科書は下記 SBTSubProjects で、まずはプロジェクト root ディレクトリに下記を一気に作成 modules /rest_apis /controllers /conf そして、 modules/rest_apis/build.sbt を作成する。 ここに実は二つ罠があった。 公式では下記(20015/7/8 時点)が書か…

Play 2.4.x をいい加減調べてみる

色々変わったそうなので、まずはハイライトを見てみる。 https://www.playframework.com/documentation/2.4.x/Highlights24 DI サポート テストにおけるモックを容易にしたかった 軽量な組み込みPlayアプリケーションや、一つのJVM上で複数のPlayアプリケー…

フォームヘルパーをタグ調整する(Play 2.3.x)

何がしたかったかと言うと、Bootstrap の形状にうまく乗せたかった。 で、試行錯誤して自分で使っててまぁ違和感がなくなったのでメモ書き Playframework の Form については本家を参照すべし。 まず、Playframework の helper で吐き出すと、デフォルトは以…

Playframework 2.2.x と 2.3.x のUT

基本的に ApplicationSpec と IntegrationSpec の二つ まずは 2.2.x のが下記 import org.specs2.mutable._ import org.specs2.runner._ import org.junit.runner._ import play.api.test._ import play.api.test.Helpers._ /** * Add your spec here. * You…

Playframework2.3、RequireJS と AngularJS を同時に運用してみる

それぞれがなんなのかは下記参照 AngularJS の入門をしてみる - 謎言語使いの徒然 Playframework2.3 で RequireJS 弄ってみる - 謎言語使いの徒然 で、特に難しい話とかはなくて。 build.sbt で Angular 読んで libraryDependencies ++= Seq( jdbc, anorm, c…

AngularJS の入門をしてみる

まずは WebJars の使い方おさらい Playframework2.3 では WebJars にデフォルト対応しているという事で、まず単純に Bootstrap を読んでみる。 libraryDependencies ++= Seq( jdbc, anorm, cache, ws, "org.webjars" % "bootstrap" % "3.0.2", "org.webjars"…

Playframework 2.2, 2.3 現状のおさらい。

まず最初に断っておく。現状(2014/08/25) 2.4 が RC 状態にある。 そして、2.4 には触れない事を断っておく。 Playframework2.2 おさらい 仕事で Playframework 2.2.3 を延々使ってると、新しいバージョンアップに疎くなるので、とりあえず乗り換えも視野に…

HikariCP + ScalaActiveRecord + MySQL5.1 をやってみた

何故にメモかというと、HikariCP がそもそもサンプル無さ過ぎて地獄を見たから。 まずは基本的な ScalaActiveRecord アプリを作る Play のサンプルアプリケーションをまずは作る。 play new HikariSample ウィザードくらいは任せた。 で、速攻、 ScalaActive…

可変長の追加フォームを作成する

可変長のフォームに対応する - 謎言語使いの徒然 の続き。 ついでだから動的にフォームを突っ込んでみる。 まずは build.sbt に下記を突っ込む。 coffeescriptOptions := Seq("bare") Coffee コードをコンパイルする際に、ラップをしない操作。 で、coffee …

可変長のフォームに対応する

まぁ特に難しい話はなし。 リピートしたい類のモデルを用意する。 package models case class Game(name: String, vendor: String) object Game { import play.api.data._ import play.api.data.Forms._ def form = Form(maps) def multiForm = Form(single(…

Chef で CentOS に Playframework2.2.x アプリをデプロイする

CentOS5.10 で動作確認。多分 CentOS 6.x もそんな変わらない筈。 段階を踏もうか。 Play アプリをリリース用にコンパイルする Chef を使ってJavaを突っ込む Chef でデプロイ用 Cookbook を作って配置する 起動スクリプトを書いてデプロイする knife solo co…

Playframework へのアクセス全部に共通のセキュリティヘッダを食わせる

まぁやってる事は ServletFilter とあんまり変わらない。 まずは適当にフィルタを作る。 コピペで安心はモットーです(2.2.1 で確認他のバージョンは知らん) package utils import play.api.mvc.{RequestHeader, Filter} import scala.concurrent.Future impo…

ログイン必須のアクション定義

ログインしてなかったら…という処理は皆書く筈。 Playframework 2.1 あたりから Security クラスが出来たらしい。 当然 2.2 でも使えるのでメモ。 package controllers.helpers import play.api.mvc._ import controllers.routes trait LoginController { se…

Thymeleaf をPlayframework2.2.Xで無理やり使ってみた。

Java のテンプレートエンジン - 謎言語使いの徒然 でさくっと見たテンプレートを、じゃぁPlayframeworkでどうやるんだろうと、ドキュメント眺めながらやってみた。 で、まずはファイルが何処に配置されてるのかを返すクラスを作成。 package utils import or…

Playframework2.2 でファイルアップロードとか

結構みんな探しそう、、、というかきっとアクセス増えそうというあざとい意図で書いてみる。 で、HTTPからファイルを送信するパターンは二つ。 純粋に HTTP Request body にバイナリ突っ込む方法これは単純ですよね。 // routes に追加 // POST /simple cont…

Play2.2.1のWSがもう少しどうにかならんかと思って解析してみた

経緯:試しに書いたらこんなことになり、フォーラムでは対応してないとか言ってて、じゃぁテストとかどうすんだろう?とか思ったらこの辺 で テストで「WS.url で multipart 飛ばせないの?」→「FakeRequest作りこんでテストして」とかそういう話があったの…

Playframework2.2.1 の dist されたアプリを Ubuntu13.10 でサービス化する

適当なサンプルアプリを作る。 play new sample で、それを dist する。 play dist すると、下記が出来上がる。 sample/target/universal/sample-1.0-SNAPSHOT.zip アプリケーション名-バージョン.zip これを適当にサービス化できそうなディレクトリに展開す…

Playframework2.2 から scala activerecord を使う

Scala ActiveRecord まずは build.sbt でプラグインを指定Playframework2.2 でまだフォームインテグレーションは試してないけど、O/R として使う分には問題なかったのでメモ。 libraryDependencies ++= Seq( "com.github.aselab" %% "scala-activerecord" % …

WSライブラリの Playframework2.1 以降の変更

WSライブラリ Playframework 2.0.x 系は WS コマンドで外部サイトアクセスできるのですが、2.0 系から気づけば応答値が変更されていて色々戸惑ったので。 2.0.x 系は val promise:Promise[Response] = WS.url("http://xxx.xxxx.net").get() Promise 型は独自…

自力でFacebookのOAuth2に対応してみた

やることはFacebookアカウントでサイトのアカウント作って、ログイン認証したいだけだったのだが、どうも Playframework2.2 では Pac4J が対応していなかったので、自力で認証してみた。 まずは設定に Facebook のアプリケーション情報を突っ込む auth { fac…

Pac4J をPlayframework2.2 に突っ込んでみて挫折(2013/11/01 時点で未対応)

Playframework2.2 になってから projects/Build.scala が抜けて、build.sbt に直接書くようになってるので注意。 っても、sbt 知ってればどうという事もない。 resolvers += "Sonatype snapshots repository" at "https://oss.sonatype.org/content/reposito…

暗号化を利用する

といってもハッシュを作るだけですが、Playにはcryptが存在する ライブラリは play.api.libs.Crypto で、基本的に下記の定義がある 不可逆(ハッシュ化) sign(String):String sign(String, Array[Byte]):String 可逆 encryptAES(String):String encryptAES(St…