読者です 読者をやめる 読者になる 読者になる

暗号の世界最速実装を目指す ── 光成滋生

C/C++ プログラマ
サイボウズに在籍する技術者を紹介するインタビューシリーズ。

光成のキーボード 光成滋生(Shigeo Mitsunari)
2007年7月、サイボウズ・ラボ株式会社に入社。

「キーの数が多い」という理由で日本語配列キーボードを愛用。「:」キーにバックスペースを割り当て、「変換」や「無変換」キーをAltやCtrlのような(他のキーと組み合わせて押すことで機能する)Modifierキーとして活用するなど、徹底的にカスタマイズしている。

プログラマには、1つのプロジェクトだけに長く携わり続ける人もいるが、異なる複数の技術やソフトウェアを世に問い、マルチな才能を遺憾なく発揮する人も少なくない。たとえばPerlのオリジナル作者として著名なLarry Wallは、今では「パッチを当てる」という普通の表現にもなっているpatchコマンドを作ったことでも知られている。また、Linuxカーネルを最初に作り始めたLinus Torvaldsは、GitHubなどのサービスでも知られるソースコード管理システム「Git」の原作者でもある。

サイボウズ・ラボに所属する光成滋生も、そんな「マルチタレント」を彷彿とさせる。ペアリング暗号に関する研究で電子情報通信学会の論文賞(2010年度)を受賞したかと思えば、一部の開発コミュニティで書籍化(同人誌化?)が話題になった「パターン認識と機械学習の学習」では、「パターン認識と機械学習──ベイズ理論による統計的予測」(著者:C.M.ビショップ)に出てくる数式を丁寧に解説する「優しい数学者」を演じている。

光成が著した「パターン認識と機械学習の学習」。
もともとは、社内勉強会用に作成したドキュメントをGitHubで公開していたもの。それを同僚の竹迫が「洒落で」書籍化した。ISBNも取得し、Amazonでも販売された。

あるいは、2000年前後からのパソコンユーザなら、あの「午後のこ〜だ」の開発者の1人と言えばピンとくる人も多いだろう。CPUの機能を最大限利用して高速化が図られたエンコーダエンジンとして、MP3関連ソフトウェアで広く使われただけでなく、CPUベンチマークとしても活用された逸話を持つ。文字通り一世を風靡したソフトウェアだ。

■最速を目指して

光成が「午後のこ〜だ」の開発を始めたのは、とあるメーリングリストで誘われたのがきっかけだという。予備知識がほとんどないまま、当時としてはまだ珍しかったMP3エンコーダの開発に携わることになった。当時大学院生だった光成は、あくまでも個人の活動(ありていに言えば趣味)として「午後のこ〜だ」の開発に取り組んでいて、その成果はソースコードともにすべて無償公開していた。

ビジネスにしようとは考えなかったのだろうか?

うまくやればお金を儲けられたんでしょうけどね。そういうイメージはなかったですね。そのときは、全然。市販の製品(B's Recorder)でもエンジンとして採用されてましたが、収入はゼロ円でした。「なんか別にいいですよ」「あ、そうですか」てな感じで。今考えると、お金もらっておいても良かったかも。お金ではないけど「パソコン1台あげます」と言ってくれた人はいましたが(笑)。

「午後のこ〜だ」は、最も多いときで5人のプログラマによって開発が行われていたが、その開発プロセスは一風変わっていた。

最初は、みんなが書き殴ったパッチを、私が手動でとりまとめてたんですけど、途中からメンバーの一人がサーバを用意してくれて、CVSでバージョン管理するようになりました。その後、彼はコミットしたら自動的にビルドが開始され、それが終わるとテストが走り、音質が劣化してたらエラーメールが飛んでくる、というシステムを構築してくれました。

今でこそ、たとえばLinuxディストリビューションの開発などでは同様の自動ビルド、自動テストが行われているが、それを10年以上前に、それも個人で構築していたというのは、なかなか珍しい。

そして実際の開発作業では、開発者同士が競い合うような面があったという。

開発者それぞれが世界最速を目指していたので、たとえば私がFFT(高速フーリエ変換)のコードを書いて10クロックぐらい速くなるような成果をコミットしても、その後に他の人がコミットして全部上書きされてしまうこともありました。そこで「こんちくしょう!」と思ってまた書き直して、自分がより速いコードを書いて上書きし返す、という感じ(笑)。自分がより速いコードを書くんだ、という気持ちが強かったですね。

■アセンブラを自作

「午後のこ〜だ」は、高速化のため、ほとんどがアセンブラで書かれていた。当時のAMDのように、公式なアセンブラがないプラットフォームには、自作のアセンブラを利用していたという。それが高じて、今は「Xbyak」(カイビャック)というJITアセンブラを開発、公開している。

C++で書けるJITアセンブラです。実行時に動的にアセンブルするので、柔軟な最適化が可能になります。JITという仕組みはJavaやLLVMではよくありますが、C++では珍しいと思います。結構使いどころが難しいので,ユーザはあまりいません。でもPlayStation 2エミュレータのグラフィックエンジン(の一部)や、去年のラボユースであった正規表現エンジンやJavaScriptエンジンのJITなどで使ってもらえてます。新しいCPUアーキテクチャが出れば、それへの対応を行っています。今は、自分が暗号の世界最速実装を目指すために使っているので。
C++コンパイラは、作ろうとは思わないですね。何だろう、コンパイラに興味はないわけじゃないけど、私は自分が作りたいものをどうやって速くするかっていうのがやりたいことなので。当然、速いコンパイラを作るというのもそれはそれでアリですけど、それは私の目標じゃない。

最速を目指すという強い信念。そして、そのために必要ならとアセンブラまで自作してしまうプログラマとしての「馬力」。マルチな才能を発揮しつつも、プログラマとして目指すところは「ぶれない」強さを感じる。光成自身は「ただ頑固なだけ」と笑い飛ばすが。

■サイボウズ・ラボ

光成がサイボウズ・ラボに入社したのは、2007年7月。数学者になる道を諦めてプログラマとして仕事を始め、それぞれ開発する製品がまったく異なる2社で経験を積んだ後のこと。35歳だった。勉強会を通じて、当時すでにサイボウズ・ラボに所属していた竹迫を知り「面白そうなことをやってるな」と興味を持ったという。

サイボウズは知ってました。大学のときに読んだパソコン雑誌に、ボウズマンの絵が載ってたのを憶えています。ただ、グループウェアという概念がよく理解できてなかったですね。入社してみて初めて「ああ、これかぁ」と分かった(笑)。

入社前、サイボウズ・ラボでどんなことをしたいと考えた?

コーデックに限らず処理を速くしたい場所というのはいろいろあるだろうな、ということは考えてました。あと、暗号に関して自分が考えていたことを製品に組み合わせられたら面白いかな、というのもありました。
今は楽しいですね。取り組むテーマは1、2年ぐらいで変わったりしますが、どれもそれなりに面白いことができているので。評価に入らないテーマでも、自分でゆるやかに継続したりもしています。

■「すごいプログラマ」に「できない」はない

その光成が考える「すごいプログラマ」とは?

具体的に言うと、一緒に「午後のこ~だ」を作り始めた人。彼以上のプログラマはなかなかいないんじゃないかな。どうすごいのかを口で説明するのは難しいけど、すごい技術を持っている町工場の「職人」という感じ。言われたことはピチッと全部やる、「できない」はない。たとえば、200Kbytesでブラウザを作れと言われても何とか作っちゃう、みたいな(笑)。

(了)