Keep on moving

あんまりまとまってないことを書きますよ

Play! Advent Calendar 2011 4日目 - Play! の情報源(英語編)+Tips

本エントリは Play! framework Advent Calendar 2011 jp #play_ja : ATND の4日目です。
前日の @ さんからバトンを受け取りました。
好きなPlay!のモジュールはcoberturaCRUDです。皆さんよろしくお願いします。

本日のテーマは「Play!で開発するときの情報の集め方」です。
Play!の公式ドキュメントは非常に整っていてチュートリアル、各機能の説明などがきちんと書かれています。*1
実際にWebアプリケーションを作成する際に、どう実装するかの情報が欲しくなります。
本日は私がよく使っている英語の情報源を紹介しておきます。

Playの情報源

1.X
2.0

まとめ

実は今日、Peter HiltonのMLへの投稿がありまして急遽ドキュメントの話題に変えました。
ここでドキュメントのドットが抜けてるのを指摘したことがありまして感謝をしていただいて非常に恐縮したことがあります。
ドキュメントの整備などもOSSへの貢献になりますのでOSS活動をしたい方は是非forkしてみるといいと思います。

ドキュメントの紹介だけなのもなんなので2つほどTipsを紹介しておきます。

[1.2.X]HTTPリクエストとJavaコードのバインディング

Play!で一番好きな機能です。
controlerでHTTPリクエストをJavaコードに簡単に変換することができます。
この機能は1.2.4で全面的に書き直されていますので、より柔軟な書き方ができるようになりました。
@Asアノテーションで変換方法を記述しておくと、受け取りたい型に変換してくれます。詳しくはcontrollerのドキュメントを参照してください。

archives?from=2011/12/04
public static void tasksSince(@As("yyyy/MM/dd") Date from) {
    List<Task> tasks = Task.findBy("date >= ?", from);
    render(tasks);
}
ScalaテンプレートでmoreStyle,moreScript相当の処理を入れる

Play! Javaのテンプレートでは、簡単にテンプレートごとにCSS,JSを追加できるのです*2が、
現状の1.2.X+Scalaモジュール/2.0ではこれに相当する機能がありません。

以下のようにすると同じようなことができます。詳しくはドキュメント,MLを参照してください。このコードは1.2.X+Scalaモジュール用ですが、使うAPIを2.0用に変更すれば2.0でも使えると思います。

app/views/main.scala.html

@(title:String = "")(body: => Html)(moreScript: => Html = Html(""))
<!DOCTYPE html>
<html>
    <head>
        <title>@title</title>
        <link rel="stylesheet" media="screen" href="@asset("public/stylesheets/main.css")">
        <link rel="shortcut icon" type="image/png" href="@asset("public/images/favicon.png")">
        <script src="@asset("public/javascripts/jquery-1.6.4.min.js")" type="text/javascript"></script>
        @moreScript
    </head>
    <body>
        @body
    </body>
</html>

app/views/tags/script.scala.html

@(src:String, stype:String="text/javascript")
<script src="@asset("public/javascripts/" + src)" type="@stype"></script>

app/views/Application/index.scala.html

@(title:String)
@import views.tags.html._
@main(title) {
  <p>hello</p>
}{
  @script("hello.js")
}
明日は

明日 (12/5) は @ さんです。 明日もお楽しみに!

*1:一部間違いがあったりしますが、コメント欄での指摘にあわせて頻繁に更新されています

*2:[http://playdocja.appspot.com/documentation/1.2.3/templates:title=template]