生産性重視のJavaフレームワーク、Play frameworkとは
あらためて、フレームワークの重要性は
みなさんはWebシステムを開発するために、フレームワークは使用していますか? 私は10年ほど前に一度だけフレームワークを使用しないJavaのWebアプリケーション開発プロジェクトを経験しましたが、 そのあとのプロジェクトでは、StrutsやSpring、Seasar2など(自社フレームワークも含む)、必ずなんらかのフレームワークが使用されていました。 最近は通常のWebシステム開発でフレームワークを使用しないというケースは、特別な理由を除くとほぼないと思われます。
では、なぜみんなフレームワークを使用するんでしょうか。 フレームワークを使う理由を一言でいうと、「開発やメンテが楽になるから」でしょう。 開発が大変になるのにフレームワークを使用する意味なんてありません。 Web層のフレームワークを使えばJSPにスクリプトレットでJavaコードを埋め込む必要はなくなるし、 DIコンテナを使えば、AOPでトランザクション管理もできてコネクションの閉じ忘れやコミット・ロールバックも宣言的に行えます。 そして、フレームワークで決めたルールに従うことにより実装者のレベルに左右されず、ある程度の品質が保証されます。
しかし、より便利に、より多機能になっていくに従って、フレームワーク自身も巨大化してきました。 Javaのフレームワークは基本的にJavaEEをベースにしているので、カバーする機能も広くなります。 その後、高生産性が売りのRuby on Railsが登場し人気を集め、 「Javaのフレームワークは重いから、高生産性のLLやろうぜ」 「いやいや、LLじゃ遅すぎてエンタープライズ向けでは使えないよ」 などという議論が行われるようになりました。
play frameworkとは
2009年、Rails以外にも次々と軽量フレームワークがでてきたころ、Javaのフルスタックフレームワーク「play framework」がリリースされます。 このフレームワークは生産性に注目し、RESTfulアーキテクチャを目指して開発されました。 さて、このフレームワークの特徴ですが、既存のJavaフレームワークとはだいぶ違いがあります。 いままでのJavaEEの常識を捨てたフレームワーク、というかJavaEE自体も捨ててます。play frameworkではServletもJSPも直接は使いません。 JavaEEの規約よりも、W3CのWorld Wide Webアーキテクチャに沿うことを優先しています。 詳しくはこのあたりをみてもらえばわかるかと思いますが、特徴を抜粋してご紹介させていただきます。
セットアップやデプロイも楽々
使用するのは非常に簡単です。Javaとpythonがはいっていれば動きます。 play frameworkをダウンロードしてパスを通した後、play new コマンドを実行します。
$ play new sample
これだけでプロジェクトが作成されます。では起動してみましょう。 起動はplay runコマンドで行います。
$ play run sample
localohst:9000にアクセスすれば、デフォルトのWelcomeページが表示されます。 もしTomcatなどのAPサーバーにデプロイしたい場合、play warコマンドを使用してwarファイルを作成することもできます。
IDEとの統合
play frameworkはIDEに依存しません。テキストエディタがあれば開発は十分可能です。 IDEで開発したい場合でも、Eclipse,NetBeans,IntelliJならば各IDEのプロジェクトとしてexportすることができます。
コンパイル・サーバー再起動の必要なし
Javaファイルを修正しても、コンパイル・サーバーの再起動は必要ありません。 play frameworkの場合、アクセス時にコンパイルが実行され、修正した箇所が反映されるようになっています。 ※開発モード
単体テストとSeleniumテスト
ブラウザ上からテストを実行する機能がついており、作成したテストはブラウザ上からボタン1つで実行できます。 また、Seleniumのテストも合わせて実行することができます。
ビューはhtml+Groovy
play frameworkではJSPは使用しません。かわりにhtmlとGroovyを組み合わせて使用します。 GroovyはJVM上で動くスクリプト言語で、Javaよりも簡潔な記述が可能です。 JSPでスクリプトレットを記述するよりもはるかにシンプルな記述でコードが書けます。
まとめ
まだまだ紹介したい特徴はありますが、詳しくは公式サイト※1か日本語翻訳サイト※2を御覧ください。 現在play frameworkはバージョン1.2.2がリリースされており、開発も活発にされています。 現状は主に海外での使用が多いようですが、日本でも積極的にドキュメントの翻訳や勉強会が行われており、徐々に知名度が上がってきています。
個人的にはplayはもちろんのこと、拡張モジュールであるplay-scalaが非常に使いやすく、ScalaでWebアプリケーションを開発するときはまずこれを検討します。 私がplay frameworkをプロジェクトで実際に使用した経験はまだわずかでいずれも小規模なプロジェクトになりますが、開発サイクルがとてもテンポよく、楽しく開発できました。 このテンポのよさ、楽しさというのは非常に重要だと思います。 今後はこのblogでplay frameworkについてのもっと技術よりな部分もご紹介できればと思っています。