ストレージサービスプラットフォームを活用してPure JavaScriptアプリケーションを作る

まあ何の言語であるかどうかというのは別にこだわってないのですけど、なぜかこのブログ(snippets...)では話題がJavaScriptメインになってたりします。これはおそらく、Webアプリケーションではサーバサイド言語というのはそもそもいくつもあるのに、クライアントサイドを記述するのは実質JavaScriptに限られているため、話題がいろいろな層に通り易いということがあるのかもしれません。

サーバサイド言語とJavaScriptといえば、AjaxがはやりだしてもしばらくJavaScriptはサーバサイドの言語とセットで使われるものだったのですが、最近は特にそうでもないようです。

たとえばGoogle Maps APIにしても、ただ表示するだけなら別に自分でサーバサイドの実行環境を用意する必要はないわけです。さらにJSONPに見られるようなWebサービスの形態を組み合わせれば、non-server環境でのマッシュアップアプリケーションの作成も可能になります。サーバサイドアプリケーション実行環境のホスティングサービスというのも最近は安価なものが多くなっているようですけど、このようなWebサービスに対してクライアントから直接接続できるアプリケーション形態はスケーラビリティという点で大変有利です。

しかし、Google MapsJSONPも結局Read-Onlyなサービスであって、データを作成、更新してストレージ内に永続させておくようなサービスにはやはりサーバサイドのアプリケーション構築が必要、というのがまだ一般的な認識でしょうか。

ただ、世の中にはHTTPベースで提供されるストレージサービスが多数プラットフォームとして提供されています。これを上手く利用すると、全くJavaScriptのみでRead-WriteなWebアプリケーションを作ることも可能になります。

このブログでもいつか書きましたが、一つ目はWebDAVサービスを利用するものです。この場合XMLHttpRequest経由でWebDAVメソッドを送信することになります。こうすると、デスクトップアプリケーションがローカルファイルシステムにアクセスできるのと同様に、WebアプリケーションはWebDAVストレージをファイルシステムとして利用できます。

あと著名なものとしては、AmazonのS3があります。これもHTTPベースであるため、AJAXアプリケーションとして動作するWebアプリを構築することが可能です。ただ、認証の仕組みがもともとサーバサイドからの利用を想定しているため、実際にクライアントスクリプトのみで一般ユーザ向けのWebアプリケーションを構築するのには多少難があるように個人的に感じます。

上記2つの例は、ファイルシステム的なストレージサービスを提供するものでしたが、リレーショナルデータベース的なストレージを提供するサービスもあります。Salesforceの提供するApexプラットフォームはAjaxAPIを提供しており、これを利用することで JavaScriptからデータベース内に任意のデータを構造化した形で永続格納しておくことが可能になります。Salesforceには実はもう一つ特徴的なことがあります。それは企業用アプリケーションを提供するという名目上あくまでエンドユーザ課金という形をとっているので、Amazonのようにアプリケーション開発側が継続的にプラットフォーム利用コストを負担する必要が無いということです。これはアプリケーション開発を行う側としては理想的であるとも言えます。

これらのプラットフォームを利用したアプリケーションの場合、アーキテクチャとして実際のシステム階層は2階層のみになり、WebアプリケーションでありながらまるでC/Sのアプリケーションのような奇妙なアーキテクチャになります。アプリケーションサーバ層が存在しないためセキュリティコントロールに不安があるかもしれませんが、ほとんどのストレージサービスはすでにエンドユーザ毎のセキュリティ(アクセスコントロール)が組み込まれた形で提供されています。あとは複数ユーザの間でデータ共有ができたり、書き込みなどの制御が出来るプラットフォームであれば、かなり柔軟なアプリケーション構築が可能なのではないでしょうか。