BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ポストHTTP時代 MeteorによるリアルタイムWebアプリケーション

ポストHTTP時代 MeteorによるリアルタイムWebアプリケーション

原文(投稿日:)へのリンク

QCon New York 2013HTML5トラックで、Matt DeBergalis氏は自身が共同出資しているオープンソースのリアルタイムWebアプリケーションフレームワーク『Meteor』について講演した。DeBergalis氏によると、クライアントサイドとサーバサイドの間の振り子は、何度も行ったり来たりしているという。すなわち、振り子はメインフレーム(サーバサイド)からデスクトップ(クライアントサイド)に振れ、さらにWeb(サーバサイド)に向かったのち、現在ではモダンWebに行き着いている。そこでは、クライアントサイドで出来る事がますます増え、より多くの作業が再びクライアントサイドで行われるようになっている。しかしながら、これらのモダンなWebアプリケーションを開発するためのツールは ― DeBergalis氏の主張によると ― そうした現状に追いついていないという。Meteorの目標は、この種のリアルタイムWebアプケーションをもっと簡単に、一貫性のある形で作成できるツールを開発者に提供することである。

今日のモダンWebアプリケーションは、次の2つの異なる要素で構成されている。

  1. サーバサイドはPHP、JavaもしくはRubyなどを用いて、特定のサーバサイドAPIや、ソフトウェアを構築し、かつ依存関係を管理するツールなどを使用して構築される
  2. クライアントサイドは1つまたは多くのJavaScriptライブラリ、HTML、CSS、そしてGoogle Closure Compilerのような独自のビルドツールで構築される

上記の2つは、通常、HTTPもしくはWebSocket上でJSONを用い、エンコードされた独自プロトコルで通信を行うのが基本的なやり方である。このプロトコルでは、『データのこの部分を送れ』や『データのこの新しい部分を永続化しろ』、『データのこの部分を描画しろ』等のコマンドをやり取りする。

Meteorはこのアプローチを再考し、すべてをリアルタイムで処理することを目指している。この目的を達成するためには、HTTPによる通信が最適であるとは考えにくい/。/そこで、その代わりにDDP (Distributed Data) プロトコルを用いて、WebSocketを介した通信(単なるWebリソースの配信だけでなく)を行なっている。DDPは、次の3つの基本的なオペレーションを提供する汎用的なプロトコルである(このプロトコルは、JSONを用いてエンコードされている)。

  • Subscribe: クライアントはこのプロトコルを用いてログインし、次のようにサーバに要求する。「私はXというデータコレクションに興味があるので、その全データの初期スナップショットを送ってほしい。そして、キャッシュを更新するために、差分データを送り続けてほしい。」
  • Publish: 「エンティティYのプロパティXの値がZに変更された。」
  • Remote-procedure call: これらのオペレーションは、リモートプロシージャコールを用いて実行され、障害に強い方法で実行結果が返却される

Meteorには、JavaScriptで書かれたサーバサイド用とクライアントサイドのDDP実装が付属している(サーバサイドは、Node.jsFibersで実装している)。しかしながら、DDPプロトコルは実装方法に依存しないため、別の言語で実装することも可能である。例えば、.NET製のクライアントライブラリがすでに提供されている。

Meteorの2つ目の要素は、描画エンジンである。Meteorの描画エンジンは、AngularJSWeb Componentsと良く似た、基礎となるデータを元にしてDOMを自動的に最新に保つ仕組みを持っている。

Meteorの3つ目の要素はパッケージングである。Meteorのコンポーネントはクライアントサイド単体でもサーバサイド単体でもないため、現在のパッケージシステムを適用することができない。Meteorのパッケージングシステムは、サーバサイドとクライアントサイド両方のコンポーネントを配布することができるようになっている。

Meteorはコードのどの部分をブラウザで実行する必要があり、どの部分をサーバで実行するのかを自分自身で判断する。DeBergalis氏は、本当に必要とするコードだけがクライアントサイドにプッシュされるように、より良いコード分離のための静的コード解析技術を開発中であると述べている。

リアルタイムのデータプッシュ機能は、Meteorの唯一のリアルタイム機能ではない。デモの中で最も魅力的な要素の1つは、動的なコードプッシュ機能であった。すなわち、開発者がファイルを保存するとすぐにそのコードをサーバ上で自動リロードするだけでなく、パッケージ化してすべてのクライアントにプッシュする機能である。この機能により、すべてのクライアントがサーバサイドのコードの最新バージョンに対応した、最新かつ最良のバージョンのコードを実行していることが保証されるのである。

MeteorはリアルタイムWebアプリケーション開発に対する、フルスタックの興味深いアプローチである。Meteorについてさらに学びたい場合は、MeteorのWebサイトにあるドキュメントを読み、実例を見てほしい。InfoQにレビュー記事がある、Meteorについて書かれた本もある。.

この記事に星をつける

おすすめ度
スタイル

BT