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


