2010-05-03 優しい Scala の育て方 [長年日記]

[Scala] Webフレームワーク play scala

「play」という凄い Web フレームワークがある。何が凄いかと言うと、まずは名前だ。だって "play" だよ?検索し辛いにも程がある。この衝撃は、http load balancer の "pen" 以来だ。ググっても無駄に時間がかかるので公式サイトを載せておこう。

http://www.playframework.org/

日常会話にも困る場合があるので、サイト名から「playframework」と呼ばれることが多い。管理者の tw 名も @playframeworkであり、hashtagも #playframework なので、play は単なるコマンド名で、こっちの方が正式名という認識でいいのかもしれない。(gem と rubygems の関係に近い)

play scala

で、本来 Java 用の play(framework) に scala module を差し込むと、Scala 用の開発フレームワークになる。いくら JVM 上で Scala が動くといっても module 追加だけでそれが簡単に実現できている点からも、playの設計がしっかりしていると予想できる。で、この play (+ scala module) のことを play scala と呼ぶ。少なくとも私はそう呼んでいる。tw の hashtag は #playscala だ。

http://twitter.com/#search?q=%23playscala

実際、その hashtag を使ってるのは世界で私だけで、実質独り言になってるので、このスレが賑わう事を祈ってやまない。

特徴

全体的に Rails を踏襲した形式となっている。だが、これまで何度も見かけた、Scaffold を最終目標に置いたかのような出来の悪い劣化コピーでなく、「シンプル性」と「ユーザの利便性」を第一に考えてしっかりと構築された本物である。具体例には、

  • UTF-8だけを扱う (ソースもデータも全てUTF8が前提)
  • ソースファイルベースで管理する

が興味深い。

特徴1: UTF-8だけを扱う

ruby1.9を見てもrails3を見ても、みんな文字コードで苦労してる。(後者は前者に引きづられて、かもしれないが)。だから、UTF-8だけを想定する。95%はこれで問題ない。5%(数字は適当だが)は、凄い中国語とか日本の携帯とかが入る。それらは直接扱えないが、ケースとしては5%、実際に使われる割合としては1%未満であろうそのために、本体を複雑にする必要はないという判断だ。(ここは俺の想像)。これは絶対に正しい。欧米主導の多国語化を見てもわかるが、使ってないやつが考えた機能は大概ろくなもんじゃないからだ。YAGNIの典型だ。重要なのは見捨てるのでなく、バンドルしないという点。

  • 5%のユーザが各々のイカした実装を作り、リクエストする
  • 本体側はリクエストに応じてそれを組み込める(or delegate)するAPIを準備

これで、みんなが幸せだ。

特徴2: ソースファイルベースで管理

play では .classファイルは扱わず(意識せず)、ソースファイルベースで管理する。これによって、開発時に大きなメリットが2つ生まれる。

  • ソースコードを監視し、自動的にコンパイル&反映できる
  • エラー発生時に表示する画面で、ソースコードを直接表示できる

後者は開発には本質的な機能ではなさそうにも思えるが、エラー発生時に殺風景な503でもなく、機械的なバイトコードによるbactraceでもなく、綺麗なデザインでソースが表示されるというのは地味に嬉しい。開発者のモチベーションを下げない(どころか上げる?)という効果につながっている。

これらにより、ユーザはLL感覚でScalaによる開発がバグ取りを楽しみつつ行うことができる。また、特徴には上げていないが、ブラウザ上からテストを実行できるのも非常に楽しい。Scalaと同じツンデレ仕様で、ユーザがテストに興味を持つようにうまく導いてくれている。

使用例

とウダウダ説明したが、playframeworkの作者自らが実演した動画(しかもscalaバージョン)があるので、それを見たほうが play scala の凄さを実感できるだろう。

たった4分だし、英語なんて全く聞かなくても、Railsユーザなら理解できる。(そのポリモフィズムも凄いのだが)。4分と言っても、ほぉ、へぇー、いいなぁ、すげー、て思ってたらあっという間に終わるレベル。最近 Scala を勉強してるのはこの play scala を使うことが目的だったりするので、Rails ユーザには是非見てもらいたい。

洗脳目的ではなくて、これで何もピンとこなけばスタイルが違うだけなので、今後も Rails でうまくやって行ける、という保証になるはず。もちろんこれはホンのさわりで、前述の通りブラウザ上からAjaxなspec実行が出来たりと色々楽しいので、何か感じものがあれば、乗り換えないまでも少し触ってみるといいかも。

あえて蛇足を入れるなら、これはJRubyじゃないですよ。Scalaのシンタックスもさることながら、一度も明示的にコンパイルせずに、ソース修正してreloadするだけで開発が進んでるし。

ScalaをLLで感覚で使えてますやん!

「部長、rails3て知ってます?」「なんか、新しいのが出るんだっけ?」「ほら、これ新しいコードですよ」「ほー、なんか定義?がスッキリした?のかな?よし、rails3にアップグレードするか」「部長、これにしていいんですね?」「え、これって?うん、これだよ」「はい、部長(ニヤリ」が俺の夢。

参考

日本語訳を頑張ってくれている @garbagetown 乙であります!


サイト内検索 (by Google)

| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |

過去

2010年
5月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

未来

コンタクト