使い勝手の再利用をアーキテクチャの視点から考えてみる
クライアントアプリケーションにおける再利用
ながらく、クライアントの世界では、再利用といえば UI コンポーネントの再利用でした。たとえば、TextField だとか Button だとかそういったコンポーネントを作って再利用するようなやり方です。
反して、「気持ちの良い使い勝手」というものはなかなか再利用可能なモジュールとして提供されません。たとえば、Eclipse や VisualStudio を使用しているときに、タブブラウザのマウスジェスチャなどを使いたいと考えることがあります。マウスジェスチャを Eclipse や VisualStudio に実装することはプラグインなどを使えば可能かもしれませんが、タブブラウザの実装から再利用できるわけではありません。
クライアント側の MVC と依存性の注入(Dependency Injection)
「使い勝手」の再利用を妨げるものはなんでしょうか。通常、MVC においては、ビューとコントローラは、モデルに強く依存します。使い勝手を再利用するということは、ビューとコントローラを再利用する(※)ということですから、何らかの「仕掛け」が必要になります。
※ 使い勝手に関するビューとコントローラは、モデルだけではなく他のビューやコントローラに依存することも多いです。なおさら再利用が難しいと言えるでしょう。
LDRize のようにショートカットキーで特定の動作をしたり、Autopagerize のようにページ下部にスクロールしたら次のページを読み込んでページ下部に継ぎ足すというような処理をモジュールとして切り出したとします。これをアプリケーションに適用するにはどうすればいいのでしょうか。
それはマイクロフォーマットに従った HTML を出力すればいいのです。(どのような HTML になるのかは「ユーザインタフェースとアプリケーションは分離する」を参照してください。)これは、マイクロフォーマットという規約によって LDRize や Autopagerize とアプリケーションの間に依存性を注入することになります。
Autopagerize の場合、マイクロフォーマットではなく、SITOINFO というものを記述することによって依存性を注入することもできます。マイクロフォーマットが規約に相当するとすれば、SITEINFO はさしずめ設定ファイルでしょうか。
つまり、ビューとコントローラがモデルに依存する問題は、依存性の注入の考え方を使うことで解決していることになります。
この考え方に従えば、LDRize や Autopagerize 的な使い勝手の再利用は、別に HTML + JavaScript でなくても、Java の Swing や Windows.Forms などでも DI コンテナを使えば実現できそうです。
RIA はウェブアプリ開発のメリットを半減させる?
今更感はありますが、ウェブアプリケーションのメリットは、クライアントをインストールしなくて済むことと、UI 実装の多くをブラウザに任せることができるので専用クライアントを開発するようなコストがかからないことが挙げられます。
ウェブのプラットフォームに載っている限り、クライアントをインストールする手間がないことは変わりません。しかし、リッチクライアントが普及するようになると、ブラウザに任せるだけで済んでいた UI 実装が再び開発者に任されることになります。
Ruby on Rails のような生産性の高いフレームワークを使っていて、ウェブ部分は効率よく開発できたとします。しかし、気がついたら開発時間の大半は CSS と JavaScript もしくは ActionScript との格闘で消費していたということも少なくありません。UI を整えるというのは思いの外コストがかかるのです。
また、ウェブ系の開発者の中にはイベントドリブンを前提としたクライアントアプリの開発に疎い人もいます。せっかく低コストで開発できるはずのウェブアプリは、だんだんと低コストでは済まなくなってきているのです。
こうした状況では、「使い勝手に関するモジュールがアプリケーションエンジニアの手を離れ始めた」という話はあるいは必然なのかもしれません。
まとめ
リッチクライアントが普及すると、ウェブアプリケーション開発は、サーバで MVC、クライアントで MVC で開発するようになり、それなりに開発コストのかかるものになるでしょう。開発コストの削減には、「使い勝手」の再利用が重要になってきます。
従来は使い勝手の再利用には、依存性の注入のアイディアを使うことができます。しかし、「これが普通」といえるようなやり方はまだ見つけられていないため、「自社の生産性を高めるために使い勝手を資産化する」というようなアプローチを取るのはリスキーでしょう。
オープンなユーザースクリプトなどで様子を見ながら適宜アプリケーションに採り入れていくというスタンスが今のところ良いのでしょう。
1 2
TrackBack URL :
