読者です 読者をやめる 読者になる 読者になる

seratch's weblog in Japanese

About Scala, Java and Ruby programming in Japaense. If you need English information, go to http://blog.seratch.net/

Play Framework 2 徹底入門を読んで #play_ja

Play Framework に関する初めての本格的な日本語書籍となる「Play Framework 2 徹底入門」を献本いただいたので、読ませていただきました。索引まで含めると 529 ページの力作です。著者の方々、大変お疲れ様でした。

タイトルに「Java ではじめるアジャイル Web 開発」とある通り、この書籍では基本的には Play2 Java がターゲットとなっており Scala での開発は 9 章のみで触れられています。

私は Scala 版はドキュメント、ソースコードを読んだり、実際にアプリケーションを書いたり、プラグインをサポートしたり、とそれなりに経験があるのですが、Java の方はしっかりと使ったことがなく、把握していなかった内容が多かったこともあり、楽しんで読ませていただきました。

とにかく初心者に優しく

まず一言で言うと、本書はとにかく「Play1、Scala どちらも未経験という方にも分かるよう、可能な限り親切に書かれた入門書」という印象を受けました。あとは Web アプリケーション開発自体の経験がそれほど多くない方も読者層として想定された書き方になっています。これだけ丁寧に書かれているのですから、500 ページを超えるボリュームになってしまうのも納得です。

スクリーンショットやサンプルつきの手順解説はもちろんのこと、COLUMN コーナーで読者がハマりそうなところ、疑問に思いそうなところを先回りして説明されているあたりに現場で Play2 Java を使ってきた先達である著者の気配りが感じられます。sbt の PermGen のサイズ、Windows での文字化けなど「あるある」ですよね。

Play2 JavaScala の知識を全く知らずには使えませんが、かといって「Scala 勉強してから来い」は Java で利用できる点を魅力に感じるユーザにとってはハードルが高すぎますね。

本書では Scala 初心者の方に少しずつ Play2 Java を使う上で必要となる Scala の知識を丁寧に説明していくことで、初心者の方がそこでつまづいてしまわないように注意が払われています。一方で、あまり最初の方で詳細について長い説明をしすぎないようになっていて、この辺は構成にかなり気を使われたのではないかと思います。

特に Scala Template と Routes は Play 独自の仕様なので、かなり丁寧に説明されています。特にテンプレートファイルが一旦 Scalaソースコードとして出力されてからコンパイルされるあたりは、本書の想定読者にとっては馴染みのないアプローチかと思うので、本書のような丁寧な説明は助かると思います。

4.1 で Play2 Java 選定がマッチする開発チームの条件を以下のように定義されています(この中でいくつか当てはまるなら Play2 Java は妥当な選択肢という意味です)。

  • シンプルな MVC 構成の Web アプリケーションを Java で作りたい。
  • Java 経験者で構成されたチームである、もしくは Java が得意なパートナーが多い。
  • Java を使用することが前提の開発案件である。
  • 分散並行処理を楽に行いたい。
  • 専用サーバーでの運用が前提で、クラウドでの利用も検討されている。
  • Play Framework に関して関心のあるメンバーがいる。
  • Scala に関心がある。

書籍内でも説明がありますが、最後の「Scala に関心がある。」というのは将来的に Scala を使っていきたいという志向の Java エンジニアを想定しています。Play2 Java を使った開発では Scala を全く意識せずに使えるというわけではないので、得意な Java で開発しつつ徐々に Scala のアプローチに慣れていくことになります。裾野を広げるという意味でいいことなのかもしれません。

ということで、本書は上記のような Java エンジニア読者層への入門書として最後までブレずに書かれているので「まさに自分が上記の条件に該当する」という方には非常にオススメできると思います。例えば「使ったことないし、よくわかってないけど Play2 Java 案件をやることになった」という方は、本書を手元に置いておくときっと何度も助けられるのではないでしょうか*1

Java 版もなかなかいいところあるのでは

正直、ほとんど初めて真剣に Java 版の Play2 に向き合ったのですが(すみません)、Java 版にもなかなかいいところあるかなというのが個人的には発見でした。

例えばフォームの入力値バリデーションは JSR-303 Bean Validation をラップした処理が Form.java に作り込まれていますが、拡張も含めて誰でもメンテナンスしやすいでしょうし、標準仕様なので場合によっては他の Java アプリとロジックを共有できるかもしれません。

本書にとって残念なことはかなり力を入れて解説している EBean が「開発がアクティブでない」という理由で次の 2.3.0 以降 Play の標準スタックから外れる見込みである点ですね*2。執筆者の立場からすると「ちょ、おまwww」という感じではないかと。お察しいたします。

私自身、EBean をしっかり使いこんだことはなかったのですが、本書で読む限りだと EBean は一般的に ORM に期待されるところには応えているんじゃないかなという印象は持ちました。既に EBean を使って作り込んでいる場合はとりあえずそれはそれでよいのかもしれません*3。今後、新しく開発するものはどうするかは Play 2.3 以降の動向を見つつの判断になりそうですね。

あと、テストコードはできるだけ簡単に書けるようにフレームワークが機能を提供すべきで、そうでないとテストが書かれないという事態に陥りがちかなと思いますが、Play2 Java ではある程度簡潔に書けますし JUnit なのでとっつきやすそうです。7.1 ではテストについて実際のサンプルもまじえながら説明されていますので、参考になると思います。

Scala 寄りの見方をすると Play2 は Scala の技術をベースにしているので Scala でやった方がよいという意見になるのですが、本書を読んでみて感じたのはやはり Java 版の方が初心者の方には相当にハードルが低いのだろうということでした。Play2 Java を使うことで高い生産性・品質を確保でき、開発チームのモチベーションの面でもよい効果が出ているという状況であれば、無理に Scala でなくてもよいのかもしれません。

ともあれ、この日本語書籍の存在が 2014 年の日本における Play2 Java の普及を後押しするとよいですね。

Play2 Java での開発をより快適に

ただ Play2 Java を使った場合でも Scala Template など直接 Scala を扱うことがなくなるわけではなく、Scalaコンパイル時間の長さに悩まされるケースがないわけでもないと思います*4

とりあえず開発マシンはそれなりの性能のものを使いましょうというのが前提になりますね。

本書ではなるべく標準の機能を使うように解説されていますが、テンプレートエンジンは別のものに差し替えるという判断もあってもよいかもしれません*5Java での開発なのに Scalaコンパイル待ちがネックになって利用が見送られるのは残念なので、この辺はコミュニティでアイデアを出し合えればいいですね。

宣伝: ScalikeJDBC も登場

ちなみに応用編の 9 章でのみ Scala による開発について触れられているのですが、そこで ScalikeJDBC を一言紹介してくださっていました。どうもありがとうございます。

年末年始に Play2 Java

を試してみてはいかがでしょうか?

See also

【献本御礼】「Play Framework 2徹底入門」は思っていた以上に実践的 - TEPPEI STUDIO http://teppei.hateblo.jp/entry/2013/12/22/065758

追記

空いていたので Play framework 2.x Java and 1.x Advent Calendar 2013 の 25 日目とさせていただきました(一日過ぎてるけど)。

http://www.adventar.org/calendars/104

*1:現状、そういうケースがどれくらいあるのか分かりませんが 2014 年は増えるといいですね

*2:https://github.com/playframework/playframework/issues/1518

*3:使い込んだことはないのであまり断言はできません

*4:https://groups.google.com/forum/#!topic/play_ja/Mv01m6T41iI

*5:http://d.hatena.ne.jp/xuwei/20131224/1387848493