最終更新日: 2009-11-03
WEB+DB PRESS Vol. 53 に向けて書いた記事の元の原稿です。
ソフトウェア開発における危険信号「バッドシグナル」についての本連載、4回目の今回は新しい技術にいつ飛びついて、いつ見送るかという問題について、 (やや強引ですが) 野球のバッターになぞらえて考察してみたいと思います。
バッターはピッチャーから投げられた球を、打ちにいくべきか見送るべきか、一瞬のうちに見極めます。大きくはずれたボール球は見送り、安打を狙える球がくるのを待ち構えます。
実はこれと似たようなことをプログラマも行っています。プログラマの場合、投げられてくるのは球ではなく話題の技術や製品です。 IT 業界にはピッチャーが無数にいるので、球はいたるところから飛んできます。
ブログやニュースサイトなどで話題になっている技術に対して、「これはさっそく試さねば!」と打ちにいくか、「こんなのどうせ流行らないんじゃないの」と見送るかは人それぞれの判断です。
IT業界にはピッチャーがたくさんいますが、制球力のあるピッチャーは少なく、投げられてくる球のほとんどはボール球です。しかし、ネットで話題になっている様子をみると、どの球もそこそこ魅力的にみえて、もしかしたらストライクなんじゃないか、と気持ちがぐらついてきます。そこでうっかり手を出すと、やっぱりボール球だったりします。
「へー BK Toolkit *1 ってのが話題になってるのか。でも、この人いつも大げさに書くからなー。必修とか言われてももう騙されないぞ」「うお、 これ、Web 2.0 神の、あの XXX さんも注目しているのか。ちょっと調べた方がいいかもなあ」「お、github にコード発見*2。これ、海外でも盛り上がってるのかー。これはもう押さえとかないといかんな」
「すげーなー、これ。JavaScript だけで 5万行あるし、これ書いたの只者じゃねえなあ。ちょっと使ってみるか」「おお、動いた。動いた。これ使えば、超リッチなアプリ、簡単に作れるじゃん。やばいわ、これ」
「と思ったら、これ 5万行の JavaScript、毎回読み込んでるっぽい?ローカルだと速いけど、リモートだと激遅いじゃん。しかも、この長大な JavaScript の中ですぐエラー起きるし。使えねー!」
上の例は、ボール球に手を出して凡打に終わったケースです。
話題になっていて一見よさそうな技術でも、実際に試してみると複雑すぎたり、バグっていたりといった理由で使いものにならないことは多々あります。
そもそもまったくストライクに見えないものは話題になりませんから、ストライクに見せかけたボールに騙されるのはある程度、仕方がありません。
一方、誰もがボールと思っていたものがストライクだったというケースもあります。JavaScript はその好例です。 JavaScript は当初、ウェブサイトに目障りなアニメーションを追加するくらいしか使い道のない言語という認識をされていましたが、AJAX という言葉が生まれ、いつのまにかリッチなウェブアプリケーションの開発には不可欠な言語という地位を確立しました。
真打と思われた技術よりも、予想外の技術が普及してしまうことがあるのはこの業界のおもしろいところです。
「ふー。JavaScript はボールだと思って見送っていたのに、実はストライクだったのか。5年くらい出遅れちゃったけど勉強するかなあ。AJAX ってなんだっけ。ああ、X は XML のことか。なるなる。XML でサーバとデータをやり取りすればいいのね。」
「ん、実はあんま誰もそんなことやってないっぽい? んー、なんか JSON *3とかいうのがあるらしいなあ。へー、JavaScript の表記でオブジェクトを記述するのか。で、 eval() すればオブジェクトを復元できる、と。ってこれ、eval したら危ないじゃん。 使えねー」
「と思いきや、なんか正規表現でサニタイズすればいいっぽい *4? あと、 JavaScript で書かれた JSON パーザがあるのか。何か間違っているような。お、Firefox 3.5 とか IE8 だとJSON.parse() というネイティブなメソッドがあるの?進化してるなあ。」
「んー、 XMLHttpRequest は別のホストにリクエスト投げられないのかー。これはちょっと不便。と思ったら JSONP *5ってのがあるの?うげ、これ <script> タグを挟んで無理やりリモートホストのサービスを叩くの?しかも結果を受け取るコールバック関数を指定しとくのか。なんか、きもいなあ、これ。RPC技術っていろいろあったと思うけど、最終的に使われているのはこんなやつなのか。。」
JSONP のような泥臭い技術がウェブアプリケーションを支える基盤技術として使われるようになるとは、10年前に予想するのは不可能だったのではないかと思います。10年後のウェブの技術を予想するのも無理そうです。
ストライクとボールを見極めるのは非常に難しい問題です。前述の JavaScript のように長らく日の目を見なかった技術もありますし、どの技術が成功するかは多分に運の要素があります。かといって、闇雲にバットを振りまくるのは非効率的です。ここでは、打率を上げるためのいくつかの戦略を考えて見ます。
ウェブの世界では習得に時間のかかる重厚長大な技術よりも、一晩ちょっといじればすぐに使える単純な技術の方が普及する傾向があります。
たとえば、一時期ウェブサービスという言葉とともに SOAP やWSDL といった言葉がもてはやされましたが、最近はすっかり聞かなくなりました。一方で、URL にアクセスすると結果が XML や JSON で返ってくるといったお手軽な API のシステムは広く普及しています。
単純ですぐ試せるものなら、使いものにならなくても、時間の無駄は最小限で済みます。アグレッシブにバットを振っていっても大丈夫でしょう。
特定の技術に依存して乗換えが困難になることをロックインと呼びます。プログラミング言語やウェブアプリケーションのフレームワークはロックインが起こりやすいものの筆頭です。
たとえば、一度、あるフレームワークで書いたシステムを後から別のフレームワークで書き直すのは大変です。廃れる運命にある技術に手を出してしまったら、習得に要した時間が無駄になるだけでなく、その技術で開発したシステムの将来も脅かされます。
このため、ロックインされる技術に対しては、手を出す前に将来性があるか吟味する必要があります。しばらく様子を見るのが安全ですが、もたもたしていると時代に取り残されてしまわないか心配になります。
折衷案としては、浅く広く手を出すという戦略が考えられます。少しかじっておくだけでも結構役立つときは多いので、ちょこちょこと手を出していくのはひとつの手です。
役立つかどうか、といった打算的な観点ではなく、おもしろそうかどうかも重要な点です。これは本当におもしろそう!とピンときた技術があったら、躊躇なく飛びついているはずです。
おもしろそうと思って飛びついた技術は、熱中して取り組むので、すごい速さで身につきます。結果的に実用性の低い技術であっても、考え方などの点で、他の事柄に応用できる場合があります。これはおもしろいと思えるネタを見つけたら、果敢にバットを振っていきたいところです。
今回は新しい技術に飛びつくべきか見送るべきか、といった問題について野球のバッターになぞらえて考察しました。強引なこじつけですが、日々、ブログなどで話題になっている新しい技術について、これはストライクなんじゃないか、ボールなんじゃないか、などと考えながら読むのも結構おもしろいんじゃないかと思います。
なお、副題の「ハッカーと球」はポール・グレアム氏の『ハッカーと画家』からとりました。ただの駄洒落ですので、深い意味はありません。
*1架空のライブラリです。
*2github.com はバージョン管理システム Git のホスティングサイト。
*3JavaScript Object Notation-。オブジェクトを
JavaScript表記で記述する手法
*4RFC 4627 にサニタイズの手法が記載されています。
*5JASON with
Padding の略。コールバック関数の名前を渡すとそれを元に関数呼び出しの形で JSON を送り返す手法。