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 タグを追加。
これでようやく、デモ動画の内容が一通り実現できました。ふー。