読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

Advent Calendar 1 - Meteorとは


12月になると、各所でクリスマスまでプログラミング関連の記事を連載するAdvent Calendarが盛況になります。
私も遅ればせながらやってみようかと思いました。題材はMeteor。

http://www.meteor.com/

Meteorはウェブアプリケーションのプラットフォームです。去年の4月に初期プレビューバージョンが発表されました。
ウェブアプリケーションと言えば、従来の主流であるJavaや、Ruby on Railsに始まった軽量動的言語によるプラットフォーム群がたくさんありますが、Meteorはかなり特色のあるプラットフォームです。以下、特長。

記述言語はJavaScriptだけ

クライアント側もサーバー側もプログラムはJavaScriptで書きます。(文書の記述としてHTMLやCSSも使います。)
サーバー側はNode.js上で動いています。正確にはNode.jsをFibers拡張したものの上で動いています。Fibersをふんだんに使ったプラットフォームなので、従来の非同期コールバック的な書き方とは違い、同期的な書き方ができます。
CoffeeScriptの自動コンパイルもサポートされているのでクライアント、サーバ両側ともCoffeeScriptでも書けます。

リアクティブなデータベース

これが一番の特長。通常のウェブアプリケーションは、クライアント側からREST APIなどでサーバーにアクセスして、サーバーがデータベースにアクセスします。Meteorももちろん内部的動作には同じですが、

  1. サーバー側でもクライアント側でも同じAPIでデータベースにアクセスするようになっている。REST通信はプラットフォームが必要に応じて引き受けるので、アプリケーション側ではコーディングが不要。
  2. データベースに出版-購読デザインパターンを用いている。データの同期はプラットフォームが行うので、アプリケーションはデータの更新時の動作を記述するだけ。(リアクティブなデータベース)

ライブのページ更新

HTMLのテンプレートに現在、Handlebarsが採用されています。これはMeteor用に拡張されており、テンプレート内でリアクティブなデータが使われていると、データが更新された時テンプレートの描画もプラットフォームが自動更新します。アプリケーションでは再描画のコードが不要です。

常套句は書かせないという設計思想

Meteorやそのパッケージを使うと、誰もが書かなければいけないコードはプラットフォームやパッケージが提供するという一貫した思想を感じます。例えば、appcacheというパッケージ。アプリケーションキャッシュを利用しようと思うと、マニフェストイベントハンドラなど書かなければいけないコードが頭に色々浮かびますが、Meteorのappcacheはそのすべてを提供してくれます。


Meteorのリアクティブなデータベースのおかげで、クライアント―サーバー、あるいはクライアント間で同期を取る必要があるアプリを非常に簡単に書くことができます。Meteorを利用して2つほどアプリを作りましたので、ご覧いただけたら幸いです。

  1. ストリートビュー上で泥棒と巡査Googleマップストリートビュー上で泥棒と巡査(おにごっこ)ができる簡単なデモアプリ
  2. 囲碁中継耳赤囲碁のメジャータイトルの対局をライブ中継するウェブアプリケーション