本エントリは Play! framework Advent Calendar 2011 jp #play_ja : ATND の4日目です。
前日の @kitora_naoki さんからバトンを受け取りました。
好きなPlay!のモジュールはcoberturaとCRUDです。皆さんよろしくお願いします。
本日のテーマは「Play!で開発するときの情報の集め方」です。
Play!の公式ドキュメントは非常に整っていてチュートリアル、各機能の説明などがきちんと書かれています。*1
実際にWebアプリケーションを作成する際に、どう実装するかの情報が欲しくなります。
本日は私がよく使っている英語の情報源を紹介しておきます。
Playの情報源
1.X
- Play!本家ドキュメント まずはここから
- 日本語版ドキュメント はこちら
- cheat sheet 開発中は常に開いてます
- Play! ML
- stackoverflow 開発ではまったときに検索しましょう
- 書籍
- Introducing the Play Framework
- Play Framework Cookbook | Packt Publishing おすすめ。運用&モジュール作成についてまとまっている
- バグレポート バグかな?と思ったらチェック
- github ソースを読みましょう
2.0
- 本家ドキュメント だんだん増えてきてます。
- 日本語情報はこちらの方( @syuta さん?)が頑張ってくれてます。http://dev.classmethod.jp/author/syuta/
- https://github.com/masahitojp/Play20/wiki/Status ゆるゆると翻訳を進めてます。協力してくれる方を募集中です。
- sample ドキュメントを読み終わったら次はこれ。現状の機能が大体わかります
- github ソースを読みましょう。
まとめ
実は今日、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) は @magnet88jp さんです。 明日もお楽しみに!