typesafe activatorを使わないplayframework2.3の始め方

tototoshiさんの、これ

Play 2.3 がリリースされたので変更点と試し方を説明します

の便乗(?)的な感じで、なぜか自分もチュートリアルを書いてみます。普通に書いたら意味ないので、少しだけ変わった方法を書いてみます。


変わった方法とは、あえてtypesafe activatorを使わない方法を書きます。また、play2.3がどうやって成り立ってるのかを説明するのも兼ねて、activatorを使わないだけでなく、なんらかのテンプレート使ったりとか自動生成とかもせずに、一つずつ手作業でやって、最低限の構成のところまでだけを説明します。
なので、実用的なのかどうかはわかりません。慣れたら、それぞれみんなtypesafe activator使うなり、独自にテンプレート的なプロジェクトを用意しておくなり、giter8使うなりした方がいいかもしれません。

あと、先に完成後の最小限のplay2.3のサンプルプロジェクトのgithubのURL貼っておきます。*1

https://github.com/xuwei-k/play2-minimal-sample


1. Javaをインストー

- ここは流石に説明省略。頑張れ

2. sbtをインストー

- 0.12以前だとだめです。0.13系でないとだめです。0.13系なら0.13.2でも0.13.6でもどれでもいいです。*2

3. project/build.properties作成

- projectというディレクトリを作り、project/build.propertiesというファイルに"sbt.version=0.13.7"と記述します。これは必ず書きましょう。*3

4. project/plugins.sbt作成

plugins.sbtに以下のように記述。間に空行入れるの忘れないように。*4

resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8")
5. build.sbt作成

これはトップレベルに置きます。以下のように記述*5

lazy val sample = Project(
  "sample", file(".")
).enablePlugins(PlayScala).settings(
  scalaVersion := "2.11.5"
)
6. app/controllers/Application.scala 作成

以下のように記述

package controllers

import play.api._
import play.api.mvc._

object Application extends Controller {
  def index = Action {
    Ok("hello world")
  }
}
7. conf/routes 作成

以下の内容を記述

GET     /                           controllers.Application.index
8. sbt runして、localhost:9000を開く

初めてだと、jarのダウンロードにかなり待たされますが、(数分から数十分)気長に待ちましょう。
無事立ち上がると、単にブラウザにhello worldという文字列が表示されるはずです。おわり


まとめ


結局、play2.3で最低限必要なのは、以下のような5つのファイルです。*6

project/build.properties
project/plugins.sbt
build.sbt
app/controllers/Application.scala
conf/routes


今までの流れを、もう一度それぞれの意味も解説しつつ振り返ると

  • まず、playframework2は単なるsbtのプロジェクトです。sbt抜きにplay2をやることは不可能なので、sbtの知識を(徐々にでいいので)増やしましょう。
  • project/plugins.sbtにaddSbtPluginと書くのは、play2にかぎらず、sbtでpluginを使う場合の一般的な方法です。
  • build.sbtにおいて、".enablePlugins(PlayScala)"という部分は、sbt0.13.5から導入された新しいsbtのpluginの使い方です。つまり一つだけsbt pluginを追加しています。しかしそれ以外は、あくまでもなんの変哲もないsbtのプロジェクトです。
  • 5のbuild.sbt作成までで、プロジェクトのひな形は一応完成です。しかしwebアプリとして最低限動かして何らかのレスポンスを返すにあたっては、play2の場合、最低限コントローラーとroutesファイルが必要です。この、コントローラーの.scalaファイルや、routesファイルの置き場などが、play2独自のものです(playをsbtのpluginとして読み込んだことにより、そうなっている)。普通のsbtプロジェクトはsrc/main/scalaにメインのコードを書いていくのが、上書き設定されていてapp以下に置くようになっています。
  • 最低限の仕組みだけを説明すると、それほど長くないですね?「scaffoldとかで自動生成されるの気持ち悪い、一つ一つ意味を理解したい!」という人は、一旦こんな感じでやってみればいいと思います。
  • typesafe activatorも試してみて、便利だと思ったら使いましょう。使いたくなかったら、それぞれ自分に合った独自のやり方見つけましょう。ただ、実際は、こんなシンプルな構成でplay2.3は最低限動くというのも知っていると役に立つかもしれません
  • 個人的にgiter8テンプレート作ってるので、使いたい人は使ってください。*7 細かいところカスタマイズしたかったら、forkして好きにしてください https://github.com/xuwei-k/play.g8

*1:つまり、sbtインストールして、これをcloneして、sbt runすれば動くはず

*2:が、特に理由なければ、最新使う、でいいと思う

*3:sbtのlauncherは0.13.2などでもいいけど、ここに0.13.5以降のversionを書かないと、play2.3はsbt0.13.5以降の機能を要求するので使えません

*4:ただし、sbt0.13.7以降にすれば、空行必要ない

*5:scalaVersionは書かなくても動きますが、書かないとsbtが作られたScalaと同じversion、つまりScala2.10.4になります。せっかくなのでScala2.11系を使いましょう

*6:build.properties以外は、ファイル名や置き場所が微妙に異なっていたりしてもいいというか、違う書き方もありますが、そこは略

*7:このgiter8テンプレートは、今回説明したような、ほんとに最低限だけのものではなく、もう少し色々設定入ってます