小飼弾のアルファギークに逢いたい♥

#19プリファードインフラストラクチャー 太田 一樹、岡野原 大輔、田中 英行

今回のゲストは、⁠株)プリファードインフラストラクチャー(PFI)の最高技術責任者 太田一樹さん、フェロー・特別研究員 岡野原大輔さん、エンジニア 田中英行さん。本誌でもVol.49 特別企画「⁠⁠速習]レコメンドエンジン」をはじめとする記事を執筆いただいていますが、ディープな話題で対談も盛り上がりました。

(左から)太田一樹氏、田中英行氏、岡野原大輔氏、小飼弾氏(撮影:武田康宏)
(左から)太田一樹氏、田中英行氏、岡野原大輔氏、小飼弾氏(撮影:武田康宏)

小学生のときからデータ圧縮

弾:それぞれ自己紹介をお願いします。

岡野原(以下、岡⁠⁠:(PFIには)会社設立のときからいまして、今は大学の博士課程3年[1]にも在籍して、研究と、研究をいかにして世の中のことに応用できる可能性があるかを実際にいろいろ試すということをしています。自分の関心としては、昔からデータ圧縮が大好きで、小・中学校のときに、NIFTY SERVE[2]の通信が遅いのがきっかけでlhaとかのデータ圧縮に興味を持つようになりました。福島県の田舎の出身で、まわりでプログラミングができる人がいなかったので、NIFTY SERVEで話してたりもしてました。大学に入ってからは、詳しい人も周りにいたり、未踏プロジェクト[3]も3年くらいやって、いろんな人に会って幅を広げる機会があって、今に至っているという感じです。

太田(以下、太⁠⁠:岡野原さんのアルゴリズムがデータコンプレッションランキング[4]で3位になったりしてます。

岡:今でもデータ圧縮は日進月歩で進んでいて、そういう競争をしているサイトもあります。

技術的な観点で言えば、アルゴリズムは普及するのにだいたい10年くらいかかる。LZとか、bzipのBWTとか[5]も登場してからやっぱり10年くらい普及までかかっている。そういう経験もあって、会社では、10年のギャップをいかに短くできるかをもう1つの目標にしています。

弾:BlockSortingは、岡野原さんの記事を見て、初めて直感的にわかった。

岡:あれは中学生ぐらいのころに書いた文章が残っているんで、恥ずかしい(笑⁠⁠。

世界初通信可能GBエミュレータ

田中(以下、田⁠⁠:田中といいます。ここの3人の中で唯一、正社員でして(笑⁠⁠。2年目なんですけど、会社では、プログラムを書くのが好きで、エンジンの開発をしたり、ミドルウェアの基盤ライブラリを作ったり、インタフェースを作ったりしています。

田中英行氏
田中英行氏

小学校のときにMSX[6]というマシンを親戚からもらったのが、プログラムを始めた最初。小学校、中学校と、MSXとかPC-98[7]でずっとBASICで書いてました。高校に入って、MSXからWindowsマシンになって、ずっとWindowsのアプリケーションを書いてまして、アクションゲームとか、ゲーム機のエミュレータとか。ゲームボーイ(GB)の通信ができるエミュレータがなかったんで作ってみたり。ネットワーク越しにポケモンができたり。

太:田中さんのエミュレータは世界で初めて通信対戦ができるエミュレータ。

田:そういうのでプログラミングの経験を積んで、大学は情報系に入ったんですけど、大学でもプログラミングをずっとやって[8]⁠。大学に入って、ICPC[9]っていうプログラミングのコンテストがあるって聞いたんで、それに出たりして。で、ICPCでPFIの社長の西川徹さんと知り合って、今、こういうところにいる感じです。

初めてのiアプリが40万ダウンロード

弾:では、太田さん。

太:僕は今、プログラミング歴6年目くらいですね。

弾:ほう、この中では一番若い。

太:僕は、今大学のM2(修士課程2年)注10で24歳。中学時代はバスケしかしてなくて、高校に入ったときにウルティマオンライン[11]にはまり、ディアブロ[12]にはまり。青春の2年くらいが飛んだ(笑⁠⁠。ある有名なディアブロのサイトを僕、手伝ってたんですけど、もう1つライバルのサイトがあって、そっちの管理人が直也さん[13]だった(笑⁠⁠。

太:で、高2か高3のときに、iアプリの使える携帯503iを親父に買ってもらって。それで、ゲームが作れるというのでJavaをそのときに初めて習って。10Kバイトにいかに収めるかっていう、よくわからないところからプログラミングの世界に。それで、シューティングゲームを作って。だいたい40万ダウンロードくらいあったんです。

弾:おおー(笑⁠⁠。

太:で、それで塾の帰り道、電車の中でたまたま隣のお姉さんが僕のゲームやってて、インターネットすげーなと思ってそれでネトゲ厨だった僕は目が覚め、プログラミングを本格的に始めたわけです。で、大学に入って、学校に週1か週2も行ってなかったんですけど、授業がおもしろくなかったので、バイトばっかりして、単位だけテスト前にとるみたいな感じでやって、未踏を大学2年生くらいのとき、ICPCを3年生くらいのときに。そのときはAnthy[14]とかKDE[15]とかやってました。KDEは高校時代から。

会社紹介

弾:PFIとはどんな会社でしょう?

太:(設立当初に)岡野原さんがいたということで、検索エンジン、レコメンドエンジン、連想検索エンジン、関連記事推薦エンジンなどの自然言語処理/大規模データ処理を核にしたミドルウェアを作っています。ビジネスモデルの面では、パッケージソフトとして売ってライセンス収入を得ることと、いろいろな企業さんと共同開発的に一緒にプロダクト作って売っていこうとしてます。

弾さんが着ているのはPFIが運営している「ねことパソコン」Tシャツ
弾さんが着ているのはPFIが運営している「ねことパソコン」Tシャツ

一番好きなプロダクト

弾:これまでで手がけたプロダクトで一番好きなのは何ですか?

太:僕は今作っている検索エンジンのSedue(セデュー)かな。

弾:Sedueとはなんでしょうか?

太:今作っている大規模分散検索エンジンで、いろんなマシンを使って効率的に分散の全文検索をするっていうものです。上のシステムのレイヤを僕は書いていて。マシンが協調しながら動いているのが、どうも楽しくて。うまく動いたときは、ほんとにうれしい。

田:会社で作ったもので言うと、基盤のライブラリでPFICommonっていうのがありまして、それが結構C++で割にきれいにできたなあって思っていて、気に入ってます。

弾:岡野原さんは?

岡:僕は、Sedueの中に使っている、CSA[16]っていう圧縮接尾辞配列のやつとかはなんで動いてるのかいまだによくわからない(笑⁠⁠。

弾:ちょっと待ってください(笑)

岡:結構僕、アルゴリズム的には適当な人で、+1とか-1とかよくずれているので、これ+1にすればいいのかなとか言って、適当に調整する人なんですよ。こわい(笑⁠⁠。

太:負荷かけてもまったく落ちないけどね(笑⁠⁠。

岡:結構、直感的に書いてる(笑⁠⁠。で、CSAとかは理論的にあったやつを実際に動かせるようになったし、みんなに使ってもらっているので、自信作とまではいかないですけど、いいかなと思います。

はてなとの提携

弾:はてなとの提携ってどういういきさつだったんですか。

岡:これはまさに僕がWEB+DB PRESSに書いた記事[17]を見て、近藤さん[18]からメールが来て、話しましょうって。で、うちの会社に来て、ちょっと話をして、おもしろいことできそうだから、とりあえずなんか作ってみようかっていう話からスタートですね。

太:近藤さんがこちらに来て、じゃあ行こうかって社員全員で京都に乗り込んで(笑⁠⁠。9人か10人くらいで。

弾:ずいぶんな大人数ですね。

岡:旅行も兼ねて(笑⁠⁠。結構、開発合宿は今までも年に何回かやっているので、京都行って開発してみたいなっていうのがあって、実際にいくつかサービスかひな形を作ったから、それを出す。

太:はてブの関連エントリ機能とかはそこで作りました。

アルゴリズムの重要性

弾:アルゴリズムって、どれくらい重要なんでしょうか。

岡:イノベーションを起こすくらいの領域だと、重要かなとは思いますね。でも、アルゴリズムはあくまで道具で、適材適所で、このアルゴリズムが使えるなっていうのを見積もれるのが、どちらかというと大事な気がします。たとえばこれくらいの問題について、これくらいの実装コスト、このくらいの期間で作るっていうのがあるとき、これくらいの複雑さのこのアルゴリズムを作ろうって、ぱっと言える能力がある人がいい。

田:それ以前の話としても、WebのフロントエンドのPHPとかPerlとかでWebアプリケーション書いてるような人でも、たとえばPHPとかPerlだったらハッシュとかありますよね。そのハッシュがなんで動いてるのかを知っておかないと、たとえばそれでPerlでコードを書いて動かせなかったときに原因を推察したりとか、裏で動いているものを知っておくとかは重要なんではないかと。

田:自分で書いたループがどれくらい時間がかかるとか、そういうのもイメージできるようになっておかないと、やっぱりサービスとか作るときでも、ユーザが急激に増えたときにどうなってしまうかとか。そのへんがやっぱりアルゴリズムは重要だと思います。

SSD

弾:今、どんな技術に注目してますか?

岡:SSD[19]とか。

弾:SSDは久しぶりに大物がきましたよね。

太:田中さんはうちのSSDの検索エンジンのコアアルゴリズムを書いていて。こないだ、全言語のWikipediaを1つのSSDで一瞬で検索するっていうデモを作って。それを書いたのが田中さんなんですよ。

田:SSDでヘッドがない分、レイテンシ[20]が低いので。ある程度ランダムアクセスができちゃうので、だいぶ違うアルゴリズムが載るんですね。

岡:メモリとディスクだと、とても無理だって、諦めてたようなやつがいともたやすく。

弾:SSDの時代にも昔の超遅いハードディスクがあってっていうようなモデルに立脚したOSっていいと思います。僕もいろんな人にさんざん言ってて、UNIXって、便利だよね、わかりやすいよね、エンジニアの直感に沿うよね、その世界に生きていればラクだね。っていうのはあるけど、それだけじゃつまんなくねっていうのは、よく言うんですよ。今どきOS作るって、ログインプロンプトが出てくるだけじゃ全然だめで、ブラウザが動いてなんぼでしょ? って、今は亡き、いとじゅんさん[21]に言われてしょぼーんとしたことがあるんですけど、そろそろその話を蒸し返してみようかなと。

岡:逆にブラウザが動けば、ほとんどこと足りるので。

弾:Firefoxを移植しておけば。

岡:そう(笑⁠⁠、ほんとにあり得るなあと思いますね。

太:ブラウザじゃなくて、ほかのキラーアプリケーションが登場したら、またモデルが変わるんじゃないかと。ブラウザに縛られ過ぎてる気がする。

弾:うんうん。

太:ブラウザが槍だとしたら、銃みたいのが出て、どかーんて。

岡:ブラウザかんけーねーみたいな。

太:そう。

弾:そもそも、RAMがございまして、基本的にやることはRAMとCPUの中のレジスタに納めますけど、それは消えないようにするためにハードディスクに書き込まなきゃいけなくて、まず起動するときにハードディスクを読みにいくっていうのが、アホかと。SSDにあるんだったら、SSDにあるものとかmmap()[22]しておいて、もう起動の必要のないシステムというのができるじゃないかと。MSXの時代に戻る(笑⁠⁠。

太田一樹氏
太田一樹氏

太:Solaris使えばいけますよ。SolarisはZFS[23]っていうファイルシステムがありますけど、SSDをキャッシュにしながらも裏をハードウェアにして、ZFSにアクセスすると、よく使うデータはSSD上にみたいな。エンタープライズサーバみたいな、そういう。

弾:いやあ、ZFSいい(笑⁠⁠。だけども、やっぱりフロントエンドがUNIX的な考えに凝り固まってるじゃないですか。だからPalm OSって、ちょっといいなあと思ったことがあります。それは何かっていうと、ファイルシステムっていう概念がない。

太:そうなんですか。使ったことがない。

弾:うん。オブジェクトしかないんですよ、中に。だからそういうようなPalmが出始めるとまたコンピュータの世界もおもしろくなるかなと。今、ほんとにすごいラクで、ラクな代わりにすごい退屈なの。で、SSDって久しぶりのヒットやこれ、っていう。

全部SSDというのか、要はランダムアクセスのスピードが速くなったときっていうのは、またこれがシーンが変わりますよね。まさにSSDで。

岡:アルゴリズムの研究でも、今までのメモリを前提にしてたようなやつから、全然世界が変わっちゃって、今までのいろんなモデルとかも、崩れてしまうし。

田:まだSSDのランダムアクセスがメモリ並みに速いわけではない。

岡:もうちょっと工夫しないと。

田:もうちょっと中間的なアルゴリズムが作れる余地があるのがまだビジネス的にはいいのかな(笑⁠⁠。

弾:ところが、今のところ、そのSSDというのも、SSDの特性を活かすのではなく、あくまでヘッドがないハードディスクとして使ってますよね。

ストレージの次はネットワーク

太:個人的には、ストレージの次はネットワークかなと思っていて、インフィニバンド[24]とか、あのへんのスパコンで使われてたやつがどんどん今安くなっていて、Ethernetより断然速い。

弾:スパコンのサイズを考えれば、ちょっとしたメトロイーサ[25]の代わりにはなるんじゃないか? 今、Ethernetで一番速いって言ったら、10Gbpsか。

太:10Gですね。インフィニバンドのほうは、数十Gbpsとか、あとレイテンシも全然違います。

弾:確かに普通の高校生がインフィ二バンドで遊ぶところまでは来てないけど、普通に有線だったら、Gビットでしょ。これ(MacBook Air)ですらGビットですからね。で、やっぱGビットっていうのは結構速いですよね。だって、ハードディスクよりも速いもん。

岡:僕も自分のデータ全部ネットに置いてます(笑⁠⁠。Gmailとか。

弾:それが正しいかも。

田:ぼくのは、外は遅いです。

岡:でも、おれのハードディスク死亡寸前だから(笑⁠⁠。

太:へたなハードディスクより速いかも。

ソースコードが読めるようになるには

弾:ソースコードを読めるようになるにはいったいどうしたらいいか。

岡野原大輔氏
岡野原大輔氏

岡:興味を持って読むのっておもしろいと思います。僕も日本語の形態素解析を行うMeCab[26]などの工藤さんのコード、すごいきれいで読んでるんですけど、実際に中を見て動いてるっていうのは楽しいです。全然自分と関係ないソースコードを無理やり勉強で読んでもおもしろくないから、自分が普段使っているやつとか、なんで動いてるのかよくわからないブラックボックスでも、ソースコードに全部書いてあるはずなので、そういうのを読むっていうのはすごいおもしろいです。

弾:オープンソースのものって、きれいな部分と汚い部分と差がありますよね。

太:職人技で成り立っているところっていうのはありますよね。

弾:FreeBSDもLinuxも目が潰れそうなソースがいっぱいあるかと思うと、こんなエレガントな書き方があるんだというのも。

太:そういう意味では、細部を飛ばすっていうのは結構重要な要素だと思います。全体を把握する。どういうデータ構造が使われてて、それがどのようにアクセスされて、全体として何をやってるのかっていうのが大ざっぱに把握できるようになると、読めるようになるのかなと。

田:構造を把握するのと、アルゴリズムを理解するのとは、違う話ですよね。

弾:違いますよね。アルゴリズムとか、1回実装すると覚えるんですよ。

岡:そうですね。

弾:僕はどっちかっていうと、ソース読めるようになりたかったら自分でも書けと。再発明しろと。

岡:自分で実装できないところまできて、そこで読むと、ようやくわかる。

弾:書かないと読まないしね。

岡:再発明は大賛成です。

太:大いに再発明をすればいいと思う。

弾:BlockSortingは岡野原さんの記事を読んで、やっとわかったので。ああ、こういうものなんだというのが。あれ、ちょっとくやしかったなあ。ソース読んだだけじゃわかりませんでした。

岡:僕が読んだときは、英語しかなくて、そのとき英語が読めなくて。誰かが掲示板に書いた5行くらいの説明しか最初なくて、そっからこれなんで復元できるんだろうっていうのをさんざんやった記憶があって、そのあとに、ちょっと変種が出てきて、szipっていうのがあるんですけど。それのソースコードが開示されたのが10年後くらいで、なんでこれでうまくいってるのかっていうのが、小中高とずっとなぞで。もう気になって。で、あとで読んだら、中身わかったっていう。やっぱソースコード読めるのは、すごい幸せなことですよね。ソースがないと一生わからない場合もあるので。

画像

おすすめ記事

記事・ニュース一覧