シンガポールでアジアのエンジニアと一緒にソフトウエア開発をして日々感じること、アジャイル開発、.NET、SaaS、 Cloud computing について書きます。

パラダイムシフト

»

 最近プロジェクトが一段落し、時間があるので、日ごろできなかった新しい開発ツールを試したり、開発フレームワークの習得をしたりして、いろいろ新技術を勉強している。いわゆるアジャイル・プラクティスの1つである、scrumのspike工程をやっているのだ。

 最初は、バイオインフォマティクスの流れで、各種アルゴリズムを勉強。動的計画法、隠れマルコム連鎖、さらに遺伝的アルゴリズムなどを勉強した。その後は、昔使った技術の復習ということで、C++のMFC、STLやATLなど、経験したことのあるSilverlightの流れでWPFを勉強。WPFの3D描画の機能は将来使えそうだ。次にWF(Work flow)。これは、開発の方法論そのものを変えるインパクトのある技術で、少し触ったぐらいでは、その開発方法論を変えるレベルに達するとは思えず、将来これを使ったプロジェクトに関与できることを期待して、ざっと表面を流すだけで終了。

 そして次に試したのが、NHibernateASP.NET MVCjQuery

 まずNHibernateに関して。.NETの世界でORM(Object Relational Mapping tool)と言えば、LINQ to SQLとEntity Frameworkがある。LINQ to SQLを使った場合、domain objectは基本的にはDB上のtableのentityと1対1に対応したものになる必要があり、制限が多過ぎる。さらに、多層構造のアプリケーションのDB層でLINQ to SQLを使うのは、少し力不足の感を拭えない。

 そこでEntity Frameworkがあるのだが、これは少なくともRelease1は使えるレベルではないことは確認できた。Release2が最近出たので、それは使えるかもしれないが、もう少し待っても良いだろう。

 ということで、今回はORMツールとして、オープンソースのNHibernateを試すことにした。ご存じ、Javaの世界でのORMとしてdefact standardのHibernateが.NETにポートされてNHibernateが誕生した。その後、.NETの発展と合わせて独自の進化を遂げている。最近、NHibernateでLINQが使えるようになって、これで.NETのORMはNHibernateで『決まり』の感がある。

 次に、ASP.NET MVCとjQuery。実は、これを勉強してみて、私が今までWebアプリケーションに関して持っていた考えが完ぺきに覆されるのを感じた。こういうのをパラダイムシフトというのだろうか?

 ご存じのとおり、MVCとはアプリケーションをModel View Controllerの3つに分けて実装する、アーキテクチャパターンだ。JavaのStrutsやJavaServer Faces。さらにRuby on Rails。PHPのZend framework技術者なら、当たり前のアーキテクチャだ。しかし、.NETの技術者は、ASP.NET MVCでようやく使い始めることになる。

 今まで.NETでWebアプリケーションと来ればASP.NETだった。ASP.NETはVisual Basicを使ったデスクトップアプリケーションの開発者が、容易にWebアプリケーションの開発者になれることを狙った開発フレームワークだ。どういうことかというと、VBのデスクトッププログラムの基本であるイベント駆動で、Webアプリケーションを作れるようにと、マイクロソフトはASP.NETフレームワークを作ったのだ。

 実際、ASP.NETの開発は、VBでデスクトップアプリを組んでいた人なら、ほぼラーニングカーブなしで開発を開始することができる。ただし、HTMLのプロトコル上にイベント駆動の仕組みを無理やり当てはめるのだ。いろいろ無理があるのは事実で、少し変わったことをやろうとするとすぐに、壁につき当たることになる。

 私は長いこと、ASP.NETで開発をやってきた。頻繁に困ったのが、複数のイベントが同時に発生することを前提にして実装していて、イベントの発生順序がイベント駆動の考えから感覚的に導かれるものと異なることや、ASP.NETではHTMLのタグを直接扱わず、ASP.NETのタグでラップするのが普通で、そのためクライアントサイドのコードが、難しくなることなどがあった。さらに、コントロールのIDをプログラマが自分で決められないことも大きい。そのため、JavaScriptの実装が必要な時には、結構難しいことをする必要がある。

 しかし、その難しさが最もシビアになるのが、AjaxをASP.NETで実装しようとした時だ。4年ぐらい前だろうか、Ajaxが注目を集めていたころ、ASP.NETで開発をしていた私は、ASP.NET AJAXというものがあることを知り、UpdatePanelという存在を知った。ページ更新時にページの中で、部分的に更新するだけでいい部分を、このUpdatePanelなるマークアップで囲んであげるだけで、望んだAjaxの効果が達成できてしまう技術に感動したものだ。実際その技術について、最近まで感動していた。そう、確かにこのUpdatePanelはすごいと思う。

 しかし、WebページからXMLHttpRequestを使って非同期にサーバからデータを取得するのがAjaxだが、その基本的仕組み自体を使ってAjaxを実現することは、ASP.NETではとてつもなく難しいことで、私のような普通の開発者には無理と、最初からあきらめていた。つまり、ASP.NETでAjax的効果を実現するためには、UpdatePanelを使うか、それでできなければ、ASP.NET AJAX Control Toolkitで提供されているAjax対応のコントロールを使うだけだと思っていた。実際の話、それだけでもかなりリッチなUIのアプリケーションをを作ることができる。しかし、実は前の開発では、その限界を知ることになった。結局、マイクロソフトがSilverlightが出してくるタイミングで、ASP.NET Ajaxで実装することをあきらめ、Silverlightの使用に方向転換して、何とかアプリケーション開発は完了できた。たぶん、あそこで大決断していなかったら、プロジェクトは失敗していただろう。

 そして、その考えが今回ASP.NET MVCとjQueryを勉強して、覆されたのだ。MVC、これはModel View Controller 、というようにアプリケーションの内部構造を分けて、実装のSC(Separation of Concern)やSoC(Single responsibility Principle)を実践するアーキテクチャパターンとして優れているのだが、実はそれだけではない。Webアプリケーションをその下部構造である、HTTPのプロトコルに最も自然な形で乗せることができるという強みを持つ。何事も自然なものはいい。そのおかげで、Ajaxの実装が、拍子抜けするほど簡単になるのだ。

 さらに、Ajaxの実装には、当然だがJavaScriptのコードが必要不可欠だ。そのJavaScriptのコードはブラウザによる微妙な仕様の違いなどのため、素人が手を出すとどうしても不安定なものになってしまう。そのため、高い信頼性のシステムを短納期で作ることを要求される受託開発では、なるべく避ける方向に働く。しかし、それもjQueryのおかげで、その難しさが吹っ飛んだ。jQueryがブラウザ間の違いを、ものの見事に吸収してくれるのだ。Ajax frameworkにも、ブラウザ間の違いを吸収するという効果があり、ある程度成功している。しかし、Ajax frameworkは、オブジェクト指向にあまりなじまないJavaScriptの言語体系上に、オブジェクト指向を無理やり入れているきらいがあり、必要以上に難しくなっている。

 ASP.NETでWebアプリケーションを開発していたころ、JavaのFaceやStrutsを勉強して思ったのが、「ASP.NETにあるような非常にリッチなサーバコントロールがJavaの側にはない」ということだ。これまでは「Javaの開発は異常に工数がかかるのでは?」と思っていた。ところが、そういう考えも今回で変わった。「CSSを使いこなすこと」、つまりWeb上のコンテンツの実装と、そのデザインの実装をきれいに分ける方式を忠実に守っていれば、きれいなデザインのページも結構簡単に作れるのだ。ASP.NETのサーバコントロールなぞ、邪魔なだけだ。

 今回は、JavaのStrutsやFace、もしくはRuby on Railsの技術者には「ASP.NETの技術者て、“アホ”なんだ」と思っていただくと同時に、ASP.NETの技術者の皆さんには、「それそろ別の畑を見にいってもいいかも?」と思ってもらえればと思い、少々技術的な内容を書いてみた。

Comment(3)

コメント

AC/DC

例のstaticおじさんが、
http://wonderfulsky.web.fc2.com/memo.html
こんなこと書いてるよ。

要するにあれだ。コラムニスト本人のコメントに書くほどの度胸はない。自分のつまらない内容なしのコラムはコメント閉鎖しちまった。だからほとんど誰も見ないようなサイトで、吼えてるだけってことだな、こりゃ。
しかも、自分が理解できない言葉を目にしたら「信じません」なんてのたまってやがるしね。
真っ向から反論できるだけの知識も技術力もないもんだから、つまらないアラ探しして、何か書いた気になってる哀れなご老人だ。いたわしいぜ。

みながわさんよ、あんたはもう何か書くのはやめた方がいいぜ。
恥をさらすだけだからさ。

って、不快な人の話題でコメント欄を汚してしまってすみませんです。

AC/DC

しかも、

>誹謗中傷をコラムに書いてはいけない規則のはずですがね。変です!

自分が過去のコラムで、学歴がどうの、私は客だだのと、さんざんひどいこと書いてきたのを、ころっと忘れてるよ。
都合の悪いことは忘れるってわけかね。
ほんとに始末におえないぜ。

あたま

「隠れマルコム連鎖」じゃなくて
「隠れマルコフ連鎖」ですね
HMM, Hidden Markov Model

コメントを投稿する