Scala製WebフレームワークPlayに入門する
最初はチュートリアルに従ってダウンロードしてこようとしていたが、どうやらbrewで簡単にインストールできるということで以下の記事に従って。
Mac での Play20 開発環境構築は brew install play だけ - seratch's weblog in Japanese
$ brew install play
では以下のようにエラーが出てしまった。
▶ brew install play Error: No available formula for play Play 2.3 replaces the play command with activator: brew install typesafe-activator You can read more about this change at: https://www.playframework.com/documentation/2.3.x/Migration23 https://www.playframework.com/documentation/2.3.x/Highlights23
ということでtypesafe-activator
をインストールしてみる。
$ brew install typesafe-activator
サンプルアプリをつくってみる
playではactivator
コマンドを使うらしい。以前はplay
コマンドだったみたいだけど。なんだかイケてない感じしちゃうけど、まーいっか。
$ activator new hello-play
こうするとテンプレートをどれにするかきかれます。
今回は公式のチュートリアルの動画に従って6のplay-scala
を選択。
Browse the list of templates: http://typesafe.com/activator/templates Choose from these featured templates or enter a template name: 1) minimal-akka-java-seed 2) minimal-akka-scala-seed 3) minimal-java 4) minimal-scala 5) play-java 6) play-scala (hit tab to see a list of all templates) > 6 OK, application "hello-play" is being created using the "play-scala" template.
これでhello-play
というアプリの雛形が作成されました!
playの標準アプリの構成はここで確認できます。
app → Application sources └ assets → Compiled asset sources └ stylesheets → Typically LESS CSS sources └ javascripts → Typically CoffeeScript sources └ controllers → Application controllers └ models → Application business layer └ views → Templates build.sbt → Application build script conf → Configurations files and other non-compiled resources (on classpath) └ application.conf → Main configuration file └ routes → Routes definition public → Public assets └ stylesheets → CSS files └ javascripts → Javascript files └ images → Image files project → sbt configuration files └ build.properties → Marker for sbt project └ plugins.sbt → sbt plugins including the declaration for Play itself lib → Unmanaged libraries dependencies logs → Standard logs folder └ application.log → Default log file target → Generated stuff └ scala-2.10.0 └ cache └ classes → Compiled class files └ classes_managed → Managed class files (templates, ...) └ resource_managed → Managed resources (less, ...) └ src_managed → Generated sources (templates, ...) test → source folder for unit or functional tests
見た感じRailsなどのMVCフレームワークと特に変わったところはないかなと感じたけど、唯一target/casses
というディレクトリがJava系言語っぽいかなと思った。ここにはPlayのビルドシステムによってコンパイルされたScalaやJavaのクラスファイルがが入ったりする。
各ディレクトリの用途については公式ドキュメントのページで一読しておくのがよい。
ということで試しにローカルのWebサーバーを走らせてみましょう。以下のようにします。
$ activator run
初期設定のポート番号は9000になってます。
初回だったからか自分の場合はscala-sbtとsbtのダウンロードとかプロジェクト関連のファイルのアップデートやらなんやらでめちゃくちゃ時間かかったけど、無事動きました。
きたー! Welcome#index画面だ!!!
ここの画面を読めばなんか一通りどんな風にアプリが動くのか理解できると思う。
簡単に最初の方の超重要な部分だけひろってみると、まずconf/routes
でルーティングの設定をしているのでこれを確認してみる。
# conf/routes
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / controllers.Application.index
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.at(path="/public", file)
これによると/
にGETでリクエストをおくると、controllers.Application.index
メソッドが実行されるとのこと。
ということでapp/controller/Application.scala
を確認してみる。
# app/controllers/Application.scala package controllers import play.api._ import play.api.mvc._ object Application extends Controller { def index = Action { Ok(views.html.index("Your new application is ready.")) } }
ということでここではindex
メソッドが定義されてて、このメソッドはHTTPのステータスコードが200 OK
のレスポンスならviews.html.index
メソッドが呼び出される。多分これはapp/views/index.scala.html
を呼び出すのかな?この辺の挙動というか、まずScala自体をきちんと勉強できてない。
# app/views/index.scala.html @(message: String) @main("Welcome to Play") { @play20.welcome(message) }
チュートリアルにも書いてあった、activator ui
というものも試しにやってみた。
$ activator ui
これはブラウザのグラフィカルの画面からソースをいじったり、ビルドしたり、チュートリアルを読んだりできるというとても素晴らしい機能。
まぁ全てコマンドライン上でできることではあると思うので、それが苦でなければここのチュートリアルに一通りみてあとはコマンドラインでやればよいと思う。
ということでここまでで一通りPlayでWebアプリを動かすことができた。
ここからどんどん使っていってどんどん記事書けたらと思います。
今回作ったサンプルアプリのソースはこちら。