Playframework って何?
• Web開発者の Web 開発者による Web 開発者の
ための Web フレームワーク
• 決して JEE のフレームワークではない
• JEE の規約に則っていない
• Servlet を使っていない
• XML 不要
17.
Play はシンプル
• 従来型のJEE アーキテクチャ • Play のアーキテクチャ
Facelets
Facelets EJB
EJB
Java Server Faces
Java Server Faces
Servlet API
Servlet API Play! Framework
Play! Framework
JEE Container (JBoss など ))
JEE Container (JBoss など
Http Server (Tomcat とか ))
Http Server (Tomcat とか Http Server (Netty)
Http Server (Netty)
Play は Webフレームワークであ
る
• 多すぎる抽象化レイヤーは悪
• Web フレームワークは Web の開発が出来れば
よい
• Web にフォーカスしよう
• HTTP を変に抽象化するのはやめよう
20.
Heroku 曰く
• Developerswith experience in both Java and Ruby
web development often ask the question: Why is
web app development so complicated in Java, and
so much simpler in Ruby, with Rails?
• Java と Ruby の両方を経験している Web 開発者
はしばしば疑問に思うことがある。なぜ Java
の Web 開発はこんなにややこしいんだ?
Ruby, 特に Rails で開発するとこんなにシンプ
ルなのに。
http://blog.heroku.com/archives/2011/8/29/play/
http://d.hatena.ne.jp/ikeike443/20110830/p1
Web フォーカス
• もしあなたがServlet API や Strtus のような
Java の Web フレームワークを使っているな
らば、 HTTP プロトコルを Java の奇妙な
API やコンセプトで抽象化したビューを使って
きたことになります。
• Web アプリケーションフレームワークは
HTTP とそのコンセプトに対して完全かつ容易
なアクセス手段を提供すべきです。これが Play
とその他の Java web フレームワークの根本的
な違いです。
テスタビリティ
• テンプレートもただの関数→ Viewをテスト可
"render index template" in {
val html = views.html.index("Coco")
contentType(html) must equalTo("text/html")
contentAsString(html) must contain("Hello Coco")
}
78.
テスタビリティ
• コントローラもテスト可能
"respond tothe index Action" in {
val result = controllers.Application.index("Bob")(FakeRequest())
status(result) must equalTo(OK)
contentType(result) must beSome("text/html")
charset(result) must beSome("utf-8")
contentAsString(result) must contain("Hello Bob")
}
79.
テスタビリティ
• HTTP サーバを起動してSelenium WebDriver
(FluentLeniumを採用している )
"run in a browser" in {
running(TestServer(3333), HTMLUNIT) { browser =>
browser.goTo("http://localhost:3333")
browser.$("#title").getTexts().get(0) must equalTo("Hello Guest")
browser.$("a").click()
browser.$("#title").getTexts().get(0) must equalTo("Hello Coco")
}
}