Knockout.jsが素敵すぎて恋に落ちるレベル

IMG_0845

その昔、世界はperlであった。apacheは言われた。「mod_cgiよあれ。mod_userdirよあれ。人々はpublic_htmlで分かち、cgi_binに住まうものであれ」そして、そのようになった。

index.cgiがあった。solarisは言われた。「cgiのパーミッションは755であれ。頭(こうべ)は#!/usr/bin/perlとせよ。Java Appletは地を埋め尽くせ」BBSができた。お絵かき掲示板ができた。

二日目の夜、mixiが空を埋め尽くし、足跡を残して去った。

三日目になり、Googleの巨人が天高くGoogle Mapを築いた。solarisは言われた。「見よ。javascriptは我々の一人のように、非同期通信を知る者となった。今や命の木からも取って食べ、永遠に生きるものとなる恐れがある」そこでsolarisはoracleに買収され、javascriptをエデンの園から追い出した。

IMG_0845

意訳

 

つまり私が言いたいのは、その昔、Web開発は糞であったということと、シド・マイヤーズ アルファケンタウリが大好きであるということである。このページを見て両者のネタが分かる人間はまず居まい。

私が初めてPerlに触れてcgiプログラムを作った時、「こんなのはおかしい」と思った。forループを回してli要素を吐き出すなどというのはサーバーがやるべき仕事では無いと信じていた。クライアントでできることはクライアントですべしと思っていた。それが2000年あたりのことだ。

それからずいぶんと時間がたち、ずいぶんと色々なことがあったけれど、「見てくれはサーバーで何とかする」それは変わらなかった。ようやく転機が訪れたのは2010年代になってからではないだろうか。

私はC#教徒WPF派である。MVVMがすべてを救うを信じている。表示に必要なデータがある。そのデータをどのように表示するかを規定しておく。POxO(POCO, POJO)のデータが決まれば対応する画面表示が決まる。なんと簡潔であろうか。これ以上簡潔にする方法があるだろうか。

WPFに触ってXAMLを書いた時、「なぜこれがWebに無いのだろう」と思った。WPF XAML ブラウザー アプリケーションという仕組みは一応ある。しかしこれは基本的にはWPFプログラムをブラウザ内のサンドボックスで動かしているだけなので実行環境に制約がある。今の時代、Webで公開されるものはあらゆるデバイスで利用可能であることを期待されるのは当然のことだ。アドオンを入れなければならないとか、対応ブラウザが限られるとか、そういう制限がかかるのは望ましくない。

また、WPFは良い仕組みだがプロプラであるというのも微妙だ。IDEやコンパイラは無償で手に入るし、.NETはオープンソース化が進んでいるけども、WPFに関する部分はいまだプロプラだし、オープン実装のmonoも「現時点ではWPFは実装しない」と言っている。

そういった中、MSのASP.NETデベロッパーのSteave Sanderson氏が作ってくれたWebでのMVVMフレームワークがKnockoutである。似たようなものとしてbackboneやangularといったものがあるが、knockoutが他と比べて特に優れているのは何と言ってもシンプルで見通しが良く、学習コストも低い事だろう。(参考:angular・backbone・knockoutの比較/印象まとめ)新しいライブラリが出るたびに「まーた覚えるのめんどくせえな」と思ってしまうような人(私)にはぴったりである。

騙されたと思ってKnockoutのチュートリアルをやってみてほしい。もはやそこに言葉は要らない。MVVMによるシングルページWebアプリケーションの新しい世界があるだけだ。

私はこのチュートリアルを終えたとき、得も言われぬ充足感に満ちていた。暗い闇に一筋の光が差したような気がした。「forループを回してli要素を吐き出すなどというのはサーバーがやるべき仕事では無い」、その思いがようやく叶った瞬間であった。ここまでたどり着くのに私は14年もかかったのだ。

これにTypeScript、Linq.jsが加わればまさに鬼に金棒と言える。完璧だ。そうだ。私が長年望んでいたのはこういう事だったのだと思った。