Webがアプリケーションプラットフォームとして一般的になる以前は、クライアントサーバモデルを採用したアプリケーションがネイティブアプリケーションの開発に採用された時期があった。このモデルではどの要素をクライアントに持たせ、どの要素をサーバに持たせるかが大きな議論のポイントとなる。このため、いくつものクライアントサーバモデルが登場し、処理とロジックをいかにうまく分離するかという技術が磨かれることになった。

その後、Webがアプリケーションプラットフォームとして活用されるようになるわけだが、注目されはじめた当初のクライアントは処理に適したものではなく、ほとんどの処理をサーバ側でおこなってページだけをクライアントへ送信するという処理が採用された。この方法は処理の分散を困難にするほかレスポンスがサーバの処理に依存し、プログラミングの複雑化、セキュリティ対策の困難さ、サーバにおけるステートメント管理の複雑化、オフライン開発の困難さ、相互接続性の難しさなどの問題を顕著化させることになった。

多くの苦難を開発者にしいてきたWebアプリケーションプログラミングだが、Ajaxの登場とクライアントブラウザの成熟、ネットワークの発達でこうした問題が解決しつつある。クライアントサーバモデルの時代に発達した技術を現在のWebアプリケーション開発に適用できる状況にやってきたわけだ。今こそこうした技術を活かし、Webアプリケーション開発の効率をアップさせたい。

どのようにWebアプリケーションにクライアントサーバモデルを適用すればいいかという話がSitePenにおいてClient/Server Model on the Webとして掲載されているので紹介したい。これは多くのWebアプリケーションデベロッパにとって一読の価値があるといえそうだ。

簡単にまとめておくと、クライアントサーバモデルは大まかに次の3つへ分割でき、

  • ユーザインタフェース
  • ビジネスロジック/アプリケーションロジック
  • データ管理

ユーザインタフェースをクライアントへ、残りをサーバで実装し、クライアントサーバ間通信はよく吟味されたインタフェースで実現する、ということになる。あくまで基本的なことしか説明されていないが、導入としてこのレベルの話を抑えておく必要があるだろう。設計や分離、インタフェースがうまくいっているかどうかは、サーバ側をまったく書き換えることなく新しいユーザインタフェースへの置き換えができるか実施してみればわかるとしている。

優れたクライアントサーバモデルの実現はスケーラビリティの実現、迅速なUIレスポンスの実現、モデル化された開発手法の提供、クライアントサイドにおけるステート管理、オフライン機能の実現、相互接続性の向上などを実現する。Client/Server Model on the Webではこうしたモデルを補助するツールとしてDWRDojo Toolkitを紹介している。同ドキュメントで紹介されている内容は技術的に突っ込んだものではなく概論的な要素が強いが、Webアプリケーション設計やツール選択を実施するにあたって興味深いものがある。Webデベロッパは一度同ドキュメントを検討してみるとよさそうだ。