Play Framework 2.3 を触る

インストール

ちょっと時間ができたので、思う所あってとりあえず最新のPlay Frameworkを触ってみました。
当然色々とハマりどころがあったので備忘録。

Play Frameworkは2014/05末に2.3がリリースされ、TypeSafe Activatorと統合されたことで結構大幅に変わった様子。
Activatorというのは本来は「リアクティブ・プログラミング」のためのプラットフォームのようですが、今回はまあそこは大きくは絡まないです。
但しTypeSafe、そう、Scalaを作ったMartin Odersky先生の会社が出して来ているものなので、今後Playを使うならとりあえず乗っかっとけって感じでしょうね。

暫く自前Mac環境の更新をしていなかったので、結果としていろいろとアップデート祭りになってしまいました。

  • JDK1.7のインストール(Playが対応していないのでScala 2.11が正式対応していないので、1.8はちょっと見送り。Oracle提供になって、インストールディレクトリが違うんですよね。ユーティリティの "Java Preference" も無くなってるし、「環境設定」の「Java」でもうまく切り替わらなかったので、とりあえず「/System/Library/Frameworks/JavaVM.framework/Versions」の「CurrentJDK」のリンクを「/Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/」に張り替えることで対応。正しいやり方ではないかもね。)
  • MacPorts => Homebrewへの移行(PATHの設定を /usr/local/bin 及び /usr/local/sbin を見るように変更)
  • Scala 2.11のインストール(Homebrewを利用)
  • Play 2.3(というかActivator)のインストール

Play Framework のダウンロードサイトからダウンロードすると、普通にActivatorのzipが落ちてきます。(このあたり、まだホームページのドキュメントが追いついてないですね。)解凍してPATHを通します。

説明に従って「play new」の代わりに「activator new」とやると、どのテンプレートを使うか聞かれます。
今回はとりあえずplay-java(3)を選びました。

Browse the list of templates: http://typesafe.com/activator/templates
Choose from these featured templates or enter a template name:
1) minimal-java
2) minimal-scala
3) play-java
4) play-scala
(hit tab to see a list of all templates)

色々ダウンロードが始まります。
そして出来上がったフォルダに移動して「activator ui」とやると、しばらくすると勝手にブラウザで開発用ページが開きやがります。
僕はもともとPlayにそんなに慣れていたわけでもないので、とりあえずこのuiベースでいろいろやってみることにしました。


eclipseでプロジェクトを開く

上記のブラウザ上から、コードの編集/保存、コンパイル・実行まで可能になっていますが、やはりコーディングはEclipseからやりたいですよね。
もともとPlayにもあった機能ですが、Eclipse用のプロジェクトを作る機能もブラウザ上に搭載されています。
ちょっと分かり難いのですが、「Code」メニューの上の方のプルダウンメニュー(?)から、「Open Project in Eclipse」というのを選ぶことができます。

ここからEclipse用のプロジェクトファイルを生成することができます。
あとはEclipseで適当なワークスペースを開いて、Package Explorerコンテキストメニューから「Import」=>「General」=>「Existing Project into Workspace」といういつものやつです。

デモ動画に従ってみる => jQueryはどこ?

Play Frameworkのトップページには、非常にテンポの良い開発デモ動画があったので、とりあえずこれに従って試してみました。(デモではIntelliJ Ideaを使ってますね)
但し例によってこの動画はまだPlay 2.3には対応していないため、そっくりそのままというわけにはいきませんでした。
特に今回作ったプロジェクトのデフォルトテンプレートにはjQueryのインポート文が入っていなかったため、デモ動画で紹介されているAjaxの部分が動きません。
ここが一番ハマりました。

いろいろ調べた結果、Play 2.3からは、この辺りは「WebJars」なる仕組みを使ってインポートをするみたいですね。
ここ⇒Migration23 - 2.3.x を読むと書いてあるのですが、Playを触っていない人間にはなかなか良く分からんのですよ。
で、散々探しまわった挙句、こちらに親切に書いてくれていました。ありがとうございます。

Play Framework 2.3 For Java ことはじめ #7 bootstrap3を使う - まーぽんって誰がつけたの?

つまり、

  • build.sbt の「libraryDependencies」に、WebJarsとjqueryに関する記述を追加する。

libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
javaWs,
"org.webjars" %% "webjars-play" % "2.3.0",
"org.webjars" % "jquery" % "2.1.1"
)

↑こんな感じ。但し、バージョンの指定の根拠は分からず。。

  • conf/routes にwebjarsの取得パスを記述

GET /webjars/*file controllers.WebJarAssets.at(file)

  • テンプレートに、次のように script タグを追加。

これでようやく、デモ動画の内容が一通り実現できました。ふー。