分さて,これまで10回以上に渡って続けさせていただいたこの「Meteor完全解説」ですが,今回が最終回となります。「⁠完全解説」を銘打っておきながら,説明できていない機能を残していることが大変心苦しいのですが,どうかご容赦ください。前回までの連載により,Meteorのエッセンスとも言える部分についてはほとんど説明を終えたといっても良いかと思います。これまでの記事を振り返ってみても,やはりMeteorは非常に先進的なフレームワークです。Webアプリ開発にかつてないような生産性をもたらすだけでなく,「⁠リアルタイムWeb」の時代をぐっと手元に引き寄せるような手応えを感じます。今回は最終回ということで,Meteorのさまざまな機能を振り返りつつ,Meteorという先進的なフレームワークが指し示す,Webアプリケーションの未来を探ってみたいと思います。Nodeを利用した「フルスタックフレームワーク」であることMeteorの一番の特徴は,なんといっても,クライアントもサーバも同じ言語(JavaScript)で記述することができる「フルスタックフレームワーク」であるという点でしょう。これは,Node.jsを利用することで実現されています。Meteorは,クライアントとサーバのコード共有を最大限促進するために入念な設計が行われています。それは,server/client/public以外の場所に置いたJavaScriptファイルはクライアントとサーバのどちらからも参照できるという実行環境や,Meteor.method()などのAPIに表れています。フルスタックフレームワークだからこそ実現可能な,さまざまな機能があります。サーバ上のコードを更新するための処理は,クライアント側でコレクションを操作することだけです。サーバサイドのDBとのデータ同期は,Meteorによって自動的に行われます。他にも,今回の連載では触れることができませんでしたが,MeteorではOAuthも包含した認証システムも利用できます。簡単なコンフィギュレーションを行い,Meteor.loginWithTwitter()のようなAPIをクライアント側で呼び出すだけで,魔法のように認証処理が行われるというものです。これはOAuthのコールバックをMeteorが自動的に処理して,アクセストークンをDBに格納することによって実現されています。これはサーバとクライアントをどちらも包括している,フルスタックフレームワークならではの機能と言っても良いでしょう。余談ですが,筆者はMeteorに出会うまでは,サーバ側のコードをJavaScriptで書けることに,正直それほどの価値を感じていませんでした。現在では,サーバサイド・プログラミングにおいてNode.js以外の選択肢を考えることができないほどに,「⁠クライアントとサーバを同じ言語で書けること」に価値を感じています。(実際に内部で使用されているのはSockJSというライブラリです)をデフォルトで使用し,クライアントとサーバを常に「つなぎっぱなし」の状態にしています。このことによるメリットは計り知れません。Meteorで構築されたシステムにおいては,あるクライアントが行った変更は,即座に全てのクライアントに対して伝えられます。クライアント全員が1つのデータを「一緒に」操作しているような感覚を味わうことができます。このレベルのリアルタイムアプリケーションを,Meteorでは容易に実現することができます。通信処理を意識する必要はほとんどありません。Meteorアプリケーションの開発中は,ソースコードを編集すると勝手にブラウザがリロードを行い,常に最新の状態で開発を行うことができます。これも,クライアントとサーバが常に接続状態だからこそ実現できる機能です。細かな点ではありますが,実際にこの機能をためしてみると,驚くほど開発がリズムよく行えるようになるため,クセになってしまうほどです。リアクティビティリアクティブ・プログラミングとは,あるデータに対して行った変更が自動的に伝播し,その他の部分に影響をおよぼすようなプログラミング・パラダイムのことです。表計算ソフトの一般的な機能として,セルの値に応じて,そのセルを参照している部分の値も自動的に変更されるというものがありますが,これはリアクティブ・プログラミングの典型的な例です。Meteorがサポートするリアクティブ・プログラミングについては,第10回の記事を参照してください。データを変更するだけで自動的にビューが書き換わるというのは,バインディング機能を備えたMVCフレームワークを利用していれば一般的な機能ですが,Meteorの場合はひと味違います。サーバデータのキャッシュをクライアントが常に保持しており,キャッシュへの操作がサーバデータの更新を直接引き起こします。全てのクライアントが「つなぎっぱなし」で,高いリアルタイム性能を備えています。したMeteorの他の機能と合わせると,「⁠クライアント側でデータを更新するコードを1行書いただけで,サーバデータも更新されるだけではなく,全クライアントのビューが自動的に更新される」ということになります。このように,Meteorのリアクティビティをフルに活用すると,「⁠ほとんど何も複雑な処理を書いてないのに,リアルタイムなWebアプリが出来てしまった」というレベルの生産性を得ることができます。Application:SPA)というのは,昨年(2012年)あたりからよく使われるようになった単語です(Wikipedia⁠)⁠。従来のWebサイト/アプリケーションのように,複数のWebページを遷移するのではなく,単一のWebページ上で全ての処理が行われるようなアプリケーションのことを指します。従来のページ遷移のモデルだと,ページが遷移するたびにJavaScriptのグローバル環境がリセットされてしまいます。WebSocketで「つなぎっぱなし」にしていたとしても,ページが遷移すると切断してしまいます。ページの再読み込みに伴う遅延やリフレッシュ動作は,ユーザビリティを損なう原因となっています。Ajaxによるサーバアクセスが一般化し,history.pushState()によってURLも自在に扱えるようになった今,SPAがもたらす実装の簡易化や高いユーザビリティに注目が集まっているのです。Meteorはまさに,SPAのためのフレームワークです。本番運用時においては,アプリケーションフォルダ内のHTML/JavaScript/CSSファイルは全て自動的に結合され,それぞれ1つのファイルとなります。アプリケーションはWebSocketによって「つなぎっぱなし」の状態で,全てのデータ送受信はJavaScriptを通じて行われます。モジュール管理これまでのWeb開発では,サードパーティのJavaScriptコードを使用する場合,サイトから個別にファイルをダウンロードして利用していました。これではモジュールのバージョンや依存性の管理に問題が生じますし,入手も面倒です。本連載では詳しく取り上げることができませんでしたが,Meteorは自前のモジュール管理システムを構築しており,モジュールを使用するかしないかをコマンドラインで簡単にオン・オフすることができます。Meteorはフルスタックフレームワークなため,jQueryやless,bootstrapのようにフロントエンド向けのモジュールもあれば,email(Email送信用のAPIセット)などのようにサーバ側の機能を強化するためのモジュールもあります。npm(Node.jsのパッケージ管理システム)も併用することができるため,サーバ側のプログラミングにおいては,Node.jsの豊富なモジュールが利用可能です。Bowerのように,Web開発にパッケージ管理の概念を取り入れる試みは他にもあり,この分野がWeb開発の最先端であることは間違いないと言えるでしょう。deployというコマンドを用いて,アプリケーションを簡単にPaaS上にデプロイすることができます。アカウント認証すら必要がないという簡便さで,リリース当初「アプリ開発から公開までを数分で行える」と世間を非常に驚かせました。筆者は,アプリケーション開発の簡便さや運用の楽さ,自動的なスケールアウトなどの機能を考えると,「⁠PaaS/BaaSと統合された開発環境」が今後大きな存在感を示していくのは,間違いないと考えています。リアルタイムアプリケーションでは,WebSocketを使用するサーバアプリを自動的にスケールアウトするようにするのは,なかなか面倒なものです。Meteorは通信や認証に関わる部分を高レベルなAPIで隠蔽しているため,ほとんどのMeteorアプリは自動的なスケールアウトにそのまま対応可能でしょう。MeteorのPaaSはまだテスト用途にしか使えませんが,正式にローンチした暁には,なかなかユニークな存在になると思われます。おわりに筆者は,つい最近Meteorを使用してアプリケーションの本格的なプロトタイプを作ってみました。そのアプリケーションは,Twitterによるログイン機能と高いリアルタイム性が必要なものでしたが,ほんの2,3時間で基本的な機能を作り終えてしまい,その生産性の高さに驚かされました。皆様もぜひMeteorを試用してみて,Webアプリケーション開発の未来を体験してみていただければと思います。その際,本連載の内容がお役に立つことを祈っています。本連載をお読みいただいた読者の皆様,あと,限りない忍耐で本連載にお付き合いいただいたgihyo.jpの小坂様に心よりの感謝を捧げつつ。読者の皆様にお会いできるのを楽しみにしています。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。