
前回のインタビューで、北山さんが「ハンパなく速いんですよ!」ってこれからお会いする山田さんの作品をベタ褒めしていたのを鮮明に覚えている。ソフトウェアの世界では、自動車のように中心部分をエンジンなんていうが、これは本当にすばらしい表現で、車種の数だけエンジンに特徴があり、この吹けあがりはどうだとか、パワーがあったり、安定性があったりする。ソフトウェアのエンジンも同様で、中にはひたすら速さを追求したF1エンジンみたいなものがあったりするのだ。
VNN1は実は昔、エンジン(車じゃなくってソフト)を作っていたので、外からは見えないが良いエンジンを作る人が本当は気になってしょうがない。ただ最近は、WEBに精通したソフトを作れるほうがかっこいいらしい。すこし悲しい。しかし今日は違うのだ。ソフトウェアの世界で最速ラップをたたき出そうとしてるエンジンビルダーの話が聞けるのだ!
山田:一言でいうと、オープンソースの全文検索エンジンライブラリです。
VNN1:全文検索エンジンには、SennaやHyper Estraier、Luceneなどいろいろなものがありますが、他のエンジンとの違いはどんなところにあるんですか?
山田:検索エンジンにはそれぞれ特徴があって、例えばSennaは高速性を売りにしていますし、Lucene は機能の豊富さや安定性を売りにしていると思います。Luxの一番の売りはスケールする高速性です。
高速性に関しては、いろいろな工夫を施しています。もちろん、内部のアルゴリズムにも拘っていますが、他に2つの特徴があります。1つは、ゼロから独自開発したデータベースLux IOを採用していることです。最初はQDBMを採用したのですが、パフォーマンスが満足いかなかったので独自開発をしました。もう一つは、分散インデックスの仕組みを取り入れたことです。このためLuxでは、サーバ数を増やすことにより、検索性能をスケールアウトさせることが出来ます。この点がLuxの大きな特徴だと思います。
VNN1:なるほど。高速性をトコトン追求しているわけですね。
山田:あまり表に出てこないのですが、実はもう一つ特徴がありまして、拡張性を持ったアーキテクチャにしています。そのため、用途に応じて部品単位で入れ替えをする事が出来るようになっています。カスタマイズをしたり、ハードウェア環境に応じてチューニングが必要な場合に、柔軟に対応できるようになっています。例えば、最近ではハードディスクをSSDに置き換えたり、クラウド環境が注目されたりしていますが、そのような環境にも適用し易いアーキテクチャだと言えます。
VNN1:どんな用途で強みを発揮しそうですか?
山田:やっぱり、大規模な全文検索が必要なシステムですね。数百万とかのオーダーではなく、数千万件から億単位の大規模なデータの検索で特に強みを発揮します。あとは、やはりベンチャー企業の皆さんに使って頂きたいですね。オープンソースですし、カスタマイズしやすいと思うので、自社のサービスに是非組み込んで活用して頂きたいですね。まだ色々作り込まなければいけないところも多いですが。
VNN2:例えば、クローラーでネット上からかき集めた膨大なデータを処理するようなWebサービスの検索機能とかにマッチするんでしょうか?
山田:そうですね。他には、最近だとライフログやSNSなど、ネット上に膨大なコンテンツが蓄積されるサービスが出てきていますので、そういった分野でも活用できると思います。
VNN1:ところで、そもそも何故Luxを開発しようと思われたのですか?
山田:今の仕事で検索エンジンを作る必要があったのですが、フリーの検索エンジンライブラリではパフォーマンスに満足できなくて、それで自分で作り始めたのがきっかけです。
VNN2:しかし、いきなり検索エンジンを開発するって、普通のエンジニアには出来ないですよね。そもそも学生時代からその分野に知見があったのですか?
山田:学生時代はオペレーションズリサーチの研究室だったので、最適化アルゴリズムは扱っていましたが、全文検索とはかなり分野が違います。実は前職で大手検索サイトの検索エンジン開発に携わっていました。
VNN1:Luxはお一人で開発されているのですか?
山田:そうです。最初は毎週土曜日に8時間ほど使って開発を始めたのですが、未踏に採択されてからは本格的に時間を使うようになり、それからの半年間は、月に200時間以上はLux開発に使っていました。会社に無理を言って、週1日勤務にしていただき、Lux開発に集中させて頂きました。
VNN1:すごい集中の仕方ですね。
山田:昔からハマリ性なところがあって、2つのことを同時にやることは出来ないんですが、1つのことにのめり込むのは得意なんです。ただ、集中するのに時間がかかるタイプなので、耳栓をするとか、静かなところにこもるとか、いろいろと工夫が必要です。自宅で長時間集中するのは難しいので、以前はマンガ喫茶でプログラムを書いたりしていた時期もありましたが(笑)、最近は都心の会員制図書館を利用したりもしています。
VNN2:アイディアを考えるのも全部一人でやってらっしゃるんですか?
山田:はい。アイディアを考えるのとプログラミングをするのと、時間的には半々くらいでしょうか。ただ、やはりいろんな人と議論をした方が発展性があるので、同じ分野の開発者が集まる勉強会への参加は積極的に行っています。また、今は一人で開発をしていますが、将来的にはコミュニティで開発を継続していくことを考えています。
VNN1:なんだか求道的な印象を受けるんですが、そもそもどうしてプログラミングにはまったんですか?
山田:実は、大学に入るまでプログラミングをやったことがなかったんですよ。もともとアクティブな方で、小学生のときからずっとスケートボードにはまっていて、コンピュータには殆どふれなかったんです。大学3年生でオペレーションズリサーチの研究室に入ったのですが、そこの教授がハッカーだったんです(笑)。それがものすごくかっこ良く、「この人はヤバイ」と思いましたね。その教授の影響は大きかったと思います。
VNN2:どんなところが凄かったんですか?
山田:基本的に放任主義なんですけど、仕事はどんどん進めていくタイプでした。一度、翌日までにあるプログラムを作らなくてはならなかったのですが、当時の私のスキルでは時間的に困難な状況でした。翌日研究室に行くと、「作っといたから」と言って、どう考えても一日では作れそうにないレベルの完成度のプログラムが完成していたのです。職人的というか、アーティストみたいな鮮やかさがありました。
VNN1:山田さんも十分職人的というか、ストイックに高いレベルで技術を追求されていると思うのですが、そんな山田さんが尊敬する技術者の方ってどんな方ですか?
山田:mixiの平林幹雄さんはすごいと思いますね。アウトプットの量が人間業じゃないと思いますし、しかもいろいろなところで使われている。先日、Key Value Store技術の勉強会に参加したとき、スゴイ人たちがたくさん集まっていたんですが、かなり多くの人が平林さんのTokyo Cabinetを使っているんですよね。
VNN1:それでは、山田さんが将来的に作ってみたいソフト・サービスとはどんなものなのでしょうか?
山田: すごい大作っていうものにも興味はあるのですが、それよりは、同じ開発者から広く使ってもらえいるいいツールやライブラリを作りたいですね。いいライブラリというのは、非常に優秀な技術者からも信頼されて使われるんですよね。Tokyo Cabinetもそうですが、MeCabなんかもそうですね。
VNN1:最後に、次のスゴイ技術者の方をご紹介頂けないでしょうか。
山田:筑波大学の古橋貞之さんを紹介させて頂きたいと思います。まだ現役の大学生なのですが、コアなライブラリを量産している方です。私も基盤技術に近いところで開発活動を行っていますが、古橋さんもニュータイプとでも呼べそうな、基盤技術にとても精通している技術者だと思います。
VNN1,VNN2:本日はありがとうございました。
山田さん、かっこよかった。求道的な山田さんが今後作り上げいくツールがもっともっと普及して世界中で使われるようになりますように。The UNIX Super Text の改定時に、山田さんが作ったツールが普通に掲載されるのもそう遠くは無いように感じた。がんばれ山田さん。応援しています!

山田 浩之 (やまだ ひろゆき)
Blog: no hacking, no life http://cheesy.dip.jp/diary/
1980年生まれ。ソフトウェアエンジニア。上智大学理工学部卒業。
2008年上期未踏IT人材発掘・育成事業にて「全文検索エンジンLuxの開発」を行う。