frameworkScala皆様、お久しぶりです。この度、弊社で開発し実際のプロダクト上で利用されているplay-velocity-pluginをオープンソース化することができました。play-velocity-plugin弊社では初のOSSプロジェクトとなります。上で動作するVelocityTemplateプラグインです。今日は、このプロジェクトのメイン開発者直々の押し付...ぢゃない、指名を受けてプラグインの紹介をさせて頂きます。前回の記事にあります通り、弊社では現在ソーシャルゲーム開発において、Play!Framework2とScalaを用いた開発を行なっています。そのことについては、粕谷がPlay!Framework勉強会第3回で導入事例を発表させていただきました。Kasuyaこの資料でも、play-velocity-pluginの公開については言及されていますが、ついに実現しました。今回は、このプラグインを導入によるメリットについて宣伝させていただこうと思います。ScalaTemplateをやめたのかPlay!Frameworkは基本的にはフルスタックのWebフレームワークです。そのため、テンプレートエンジンについてもデフォルトでScalaTemplateを利用することができます。engineこのScalaTemplateの特長として、Scalaの強力な構文が利用できるコンパイルされることによりバグが回避されるといったメリットがあります。コンパイル時にきっちりと変数がセットされることや、変数の型、メソッドやフィールド呼び出しの記述ミスがチェックされるので、バグの入り込むスキを少なくしてくれます。HTMLのちょっとした変更でもコンパイルが要求されるという問題が発生してしまいます。その他にも、ScalaTemplate採用プロジェクトがある程度進行した時点で起こった問題として、テンプレートファイルがすべてコンパイル対象となってしまうので、コンパイルの際に非常に多くのマシンリソースが要求されてしまいました。3年前のPCのマシンスペックではコンパイルに10~15分かかることもあったようです。デフォルトのJVMへのメモリ割り当てでは容量が足りずコンパイルが失敗するため、ビルドスクリプトを直接編集して利用メモリを増やすという対応も必要となりました。このような問題があり弊社で以前から利用実績のあるVelocityをテンプレートエンジンとして採用することとなりました。Velocityの特長VelocityはApacheFoundationで公開されているJavaベースのテンプレートエンジンです。Velocityもともと、弊社ではPlay!Frameworkの採用以前からS2ファミリーを利用しており、テンプレートエンジンとしてS2Velocityを利用していました。Webデザイナにも変更がしやすい(構文がわかりやすい)という特長があります。トレードオフとして、バグチェックが難しい記述が冗長になるという問題点もあります。Velocityはレンダリング速度が遅いのではないのかという懸念もありましたが、Velocityを採用する際のベンチマークからも十分な速度でレスポンスを返せることが証明されていますし、サービスを運営している中でレンダリング速度が問題になったことはありません。今回は、ソーシャルゲームというサービスの特性上、リリースサイクルの短縮が大きな課題となります。そのため、変更からリリースまでの時間と、デザイナーの作業の行いやすさという点から比較します。デザインの変更から反映までのステップを下の図に示しますが、これだけでリリースサイクルという観点からはVelocityのメリットが充分に感じられると思います。まとめこのように、play-velocity-pluginはデザイナとの協業、リリースサイクルの短縮という点において利点があります。OSSとしてGitHubおよびMavenリポジトリに公開してありますので、Play!Framework2をご利用の方は、ぜひ試してみていただきフィードバックをいただければと思います。社内だけでなく、皆様のご意見も頂いた上で、今後このplay-velocity-pluginを育てていきたいと思っています。近いうちにplay-velocity-pluginを実際に利用するノウハウなどもこのブログで紹介していきたいと思います。