PlayFrameworkのチュートリアル(挫折版)
HelloWorldを表示したので、次はチュートリアルに沿ってサンプルアプリケーションを組んでみたいところですが、
公式のPlay 2.4のドキュメントには英語のチュートリアルしか無いようなので、
Play 2.2の時の日本語チュートリアルを参考にTODO管理アプリケーションを組んでいきたいと思います。
…って思ってたけど、Taskモデルの準備のところでJavaの書き方がわからず挫折しました!
誰かの参考になるかもなので途中まで書いたものは残しておきます。。。
概要
conf/rotes
ファイルを開きますが、書き方がチュートリアルとちょっと変わっています。
GET / controllers.HomeController.index
が、意味は一緒です。app/contorollers/HomeController.java
を開いてみます。
package controllers; import play.mvc.*; public class HomeController extends Controller { public Result index() { return ok(views.html.index.render()); } }
どうやらindex()
メソッドが動いて、HTMLコンテンツを含む200 OKレスポンスを返しているようです。
HTMLコンテンツとのマッピングはviews.html.(HTMLのファイル名).render()
という書き方になるようです。
次はapp/views/index.scala.html
を開いてみます。
@() @main("Welcome to Play") { <h1>Welcome to Play!</h1> }
ここはチュートリアルと違ってべた書きしてあります。
開発フロー
チュートリアルのようにcontrollersからviewsに値を渡したい場合、どのように書けばよいでしょうか。
まずapp/views/index.scala.html
を開いて次のように書き換えます。
@(message: String) @main("Welcome to Play") { <h1>@message</h1> }
次にapp/contorollers/HomeController.java
を開いて次のように書き換えます。
package controllers; import play.mvc.*; public class HomeController extends Controller { public Result index() { return ok(views.html.index.render("Hello World")); } }
書き換えたらブラウザからlocalhost:9000を開いてみます。
Hello Worldと表示されるはずです。
viewsの一行目に変数を宣言すれば、controllersから引数を渡せることがわかりました。
アプリケーションの準備
conf/rotes
ファイルを編集します。以下の3行を追加します。
# Tasks GET /tasks controllers.HomeController.tasks POST /tasks controllers.HomeController.newTask POST /tasks/:id/delete controllers.HomeController.deleteTask(id: Long)
ブラウザをリロードするとチュートリアルのようにコンパイルエラーが発生する事が確認できます。
次にapp/contorollers/HomeController.java
に以下の行を追加します。
public Result tasks() { return TODO; } public Result newTask() { return TODO; } public Result deleteTask(Long id) { return TODO; }
ブラウザからlocalhost:9090/tasksを開くとTODOが表示されます。
チュートリアルと同じようにindex
アクションが呼び出された時に、tasks
アクションにリダイレクトするようにします。
public Result index() { return redirect(routes.HomeController.tasks()); }
Taskモデルの準備(ここで挫折)
Javaで書く場合はModelクラスを継承したTaskクラスをmodels/Task.java
として実装すれば良さそうでしたが、なんのパッケージのModelクラスをimportすればよいかわからず手詰まりになりました。
感想
ググると日本語の情報はわりとすぐ出てくるのですが、Playのバージョンが2.2の時と2.4の時と2.6の時で若干やり方が違うようで、いい感じに読み替えたり英語のドキュメントにあたるスキルが必要そうだと感じました。 作ってみたいWebアプリケーションはあるので、日本語のチュートリアルが充実している(と思われる)Ruby on Railsに挑戦してみたいと思います。