Meteorでオセロを書いてみた

Meteor 0.3.2 PREVIEW
http://meteor.com

Meteorは、高機能なWebアプリを素早く作るためのプラットフォーム。TwitterとTechCrunchで知った。以下のような特徴が印象的。

  1. Ruby on Railsのようにひな形が一発で生成できる。
    • ただ、RoRと比べて、吐き出すファイルは少ない。基本のExampleの場合、テンプレート機能のある.html、.js、.cssの3つのみ。
  2. データベースにはMongoDBを使用。ドキュメント指向で、スキーマが不要。JSONでクエリーを投げることができ、取っつきやすい。
  3. おそらく一番の肝は、サーバーとクライアントで透過的にデータベースが扱えること。片方での変更が他方に自動的に同期される。
  4. Routeファイルもないらしく、基本的にすべてが単一のHTML上に読み込まれたJavaScriptで記述される。
    • ただし、publicフォルダにおいたファイルは静的リソース(これらのhtmlにはテンプレートも使えない模様)として機能する。
  5. サーバー、クライアントのコード両方にJavaScriptを使い、サーバーではNode.jsが走っている(ただし、IOは非同期ではない)。サーバー用とクライアント用のコードを同じファイルの中に書くことも出来る。
    • serverフォルダにおいたファイルはサーバー専用コード、clientフォルダに置いたファイルはクライアント専用になる。
  6. HTML/JS/CSSファイルを変更して保存すると、自動的にブラウザ側でリロードされる(「ホットコードプッシュ」)。
  7. デプロイも簡単とのこと。Tarballが作られ、Node.js(とMongoDB)が動くサーバーならすぐに走らせられるらしい。
    • Meteorのサイトにデプロイするなら、meteor deploy hoge.meteor.comで簡単にデプロイできる。--passwordでパスワードもつけられる。
  8. デプロイ時にはすべてのCSSとJSがそれぞれminifyされて1つのファイルになってHTMLからリンクされ、クライアントに送信される。
  9. モジュールの追加・削除が簡単。まだライブラリは少ないものの、標準でjQuery, CofeeScript, LESSなどが用意されている。

「これまで2週間かかっていたことが数時間で出来るようになる」とのうたい文句。
公式サイトのスクリーンキャストがなかなか鮮やか。
http://meteor.com/screencast

僕もデータをリアルタイムに同期する例としてオセロを書いてみた。直感的、簡潔に書けるという印象。HTMLで盤を書くのにハマったりして5時間近くかかってしまったものの、少し慣れれば確かに生産性は高そうだ。
Othello by Meteor
http://othello.meteor.com
http://github.com/nebuta/MeteorOthello

二つのブラウザ間で黒と白を決め、交互に石を置ける。サイト上に一つしか盤面がないので2人入ったらあとは見てるだけしか出来ない。それと見ている誰かがResetを押すと即リセットしてしまうというなかなかの糞仕様なのは勘弁してほしい。

懸念としては、データベースをサーバー/クライアントで共有するためにセキュリティの問題がよく言われているようだが、近々認証などを導入する予定だとのこと。また、パフォーマンス面も、リロード時や動かしている途中にもたつく事があった(ローカルサーバーでも気づくくらいの同期のタイムラグがある)ので、若干懸念がある。それと、meteor.comのサイトがここ1日で何回も落ちているので、スケーラビリティとか大丈夫なのかな、単に今のサーバーのキャパに対してデプロイされたアプリが予想外に多すぎたのかな、とか、いろいろ心配になった。