エンジニアHubPowered by エン転職

若手Webエンジニアのための情報メディア

まつもとりーがmod_mrubyを開発した理由 - 解決すべき課題は研究ではなく、実運用の中にあり

多くのエンジニアから、そのアウトプットが注目される「まつもとりー」こと松本亮介さん。自身のOSS開発の裏側にある研究と開発の関係性を聞きました。

「研究したいと思ったことと、企業で必要とされる課題解決にギャップを感じた」
インターネット基盤技術の“研究者”として広く知られる、まつもとりーこと松本亮介(まつもと・りょうすけ/ @matsumotoryさんは、過去を振り返って、こう語ります。

多くのエンジニアの注目を集め、そして多くのエンジニアをインスパイアし続けるまつもとりーさんですが、アウトプットへと至る根源には、常に「現場で直面した課題」があるといいます。では、mod_mruby / ngx_mrubyといった広く使われるOSSの根源にあったものとは一体なんでしょうか。

オープンソースという概念すら希薄だったキャリア初期から、研究者として存在感を発揮する現在にいたるまで過程をご自身に振り返ってもらい、「まつもとりーを鍛えたもの」を伺います。

GitHub - matsumotory/mod_mruby: mod_mruby - A Fast and Memory-Efficient Web Server Extension Mechanism Using Scripting Language mruby for Apache httpd

GitHub - matsumotory/ngx_mruby: ngx_mruby - A Fast and Memory-Efficient Web Server Extension Mechanism Using Scripting Language mruby for nginx

自作パソコンにのめり込み、自宅はまるでサーバールーム

──松本さんは、大学時代からコンピューターに興味を持ち始めたとか。

松本 大学生の頃に、自作パソコンを作るようになったんです。大学入学のタイミングで親にパソコンを買ってもらったんですが、使い続けていると「どうも処理が重たいな」と感じることが増えてきます。でも学生でお金がなかったので、高いパソコンに買い換えることができなかったんです。

──そこで目をつけたのが、自作パソコンということですか?

松本 当時は2004年頃で、自作パソコンが非常に流行していましたからね。自分で作れば安くて性能のいいパソコンが手に入ることが分かったので、「これはいい」と思って、すぐに手を出したんです。

しかし、パソコンを自作すると、もともと持っていたパソコンが余ってしまいます。こうした余りを有効活用できないかと思って調べていくうちに、どうやら「サーバーというもの」に転用できることを知ったんです。サーバーを作れば、メールが自分で送れるようになるし、Webサイトだって立ち上げられるらしいぞ、と。

インターネット上で起きていることとか、携帯電話で実現されていることの一端を自分でも作り出せると感じたわけです。これはかっこいいぞと思って、自宅にサーバーを立てるようになったんです。サーバーの設定のためにシェルスクリプトなども書くようになり、プログラミングにも興味がわいてきました。

松本亮介さん:大学卒業後、ホスティング系企業でエンジニアとしての経験を積んだ後、京都大学大学院の博士課程に入学。インターネット基盤技術の研究に取り組み、数々のOSS開発を手がける。その後、GMOペパボ、ペパボ研究所主席研究員を経て、2018年よりさくらインターネット研究所で上級研究員を務める。

──パソコンの知識がない状態からサーバーを立てるまでに至るとは。すごい成長スピードですね。

松本 楽しかったから、ひたすらやっていただけなんです。小さいサーバーならば3,000円くらいで調達できたので、Webサーバー、メールサーバー、DNSサーバーとどんどん増えて、1年で8台くらいになったかな。サーバーが8台も稼働しているととにかく暑くて、エアコンは1年間ずっと点けっぱなしでした(笑)。

──まるでサーバールームのような状態ですね。

松本 そうですね(笑)。その後、サーバーの運用・監視にも手を出すようになり、MRTG(Multi Router Traffic Grapher)やNagiosなどを入れたり、外部からのアタックに気づけるようにシェルスクリプトやPerl、Cを使って検知用のソフトウェアも書いたりするようになっていきました。

大学ではプログラミングの授業でCを習っていたんですが、授業で扱うような内容はだいぶ簡単に作業できるようになっていましたね。でも、あるとき大学で出されたコンパイラ実装の課題で、大きな失敗をしてしまったんです。

──というと、どんな失敗を?

松本 僕はその課題をかなり早めの段階で終えていました。余裕があったのでクラスメートに教えていたくらいです。でも、成果物を教授に提出するとき、間違えて完成品ではなく過去のバージョンのものを出してしまいました。

──なんと……。

松本 当時はバージョン管理などの意識がまったくなかったので、ファイルやらディレクトリやら乱雑な状態で……提出するものを間違えてしまったんです。よりにもよって、その授業は落としたら必ず留年する、というもので、学年で僕だけ不合格になりました。相当ショックでしたね。親にも申し訳なかったですし。でも、その経験を通じて技術に取り組むスタンスは大きく変わりました。

──具体的には、どのように変化したのですか?

松本 何をするにも、すごく慎重になったんです。僕はけっこう自信家だったんですが、根拠のない自信を持たないようになりました。驕らずに、努力をした上で、出した結果を適切に評価してもらえるような生き方をしよう。必要以上に大きなことを言うのはやめようというスタンスに変わりましたね。

社会人になっても、運用・監視が楽しくてしょうがなかった

──大学卒業後、松本さんはホスティング系企業で3年働いた後、京都大学大学院の博士課程に入学されます。なぜこうした道を選ばれたのですか?

松本 大学卒業後、すぐに就職したのは留年というコンプレックスがあったことも理由の一つです。みんなより余計に大学に通っている分、早く社会に出て巻き返したいという思いがありましたので。もうひとつ、大学時代、アルバイトとしてホスティング系企業で働いていたんですが、実務を経験するうちに「学術研究で扱っている内容と企業で起きる課題の間には、大きなギャップがある」と感じるようになったからです。

研究者の方々が発表されている論文は素晴らしいものですが、論文内で扱われるトピックには、実社会の課題を解くことにすぐには直結しないものもあります。企業でアルバイトとして働くうち、むしろ実務で用いられているエンジニアリングの方が、より直接的に世の中の課題を解いているように見えたんです。

だから、そのまま研究者になるよりも、企業に入ってちゃんと社会を見てから、あらためて自分が本当に解きたい課題とは何なのかを見極めたかった。そこで、まずは就職をしようと思ったんです。

──就職後、企業で学んだ技術はいまの研究にも生きていますか?

松本 すべての経験が生きているくらいです。本当に多くのことを学ばせてもらいました。その会社では、入社後すぐ現場に入ってサーバーやネットワークの運用・監視などを担当しました。

当時はいまと違って、何かしらのアラートがあがったらすべて人間がコマンドを叩いてログなどを調査し、原因究明していたような時代でした。僕は「職場の誰よりも早く課題を解決するぞ」と意気込んでいて、アラートが鳴ったらすべて自分が対応するくらいの気持ちでやっていましたね。自分が休みの日でもやっていたくらいです。

その日に稼働している人がどんな運用をしているのか、休日に家でコーヒーを飲みながらチャットで確認するのが好きでした。楽しかったですね。

──もはや運用が趣味の一環だったんですね。

松本 「その職場で経験した運用の課題を、属人的な形ではなくもっと根本的に解決できないか」というテーマは、僕の現在の研究内容にも通じています。

それから、メンターだった先輩が、よくOSSやそのコミュニティについての話をしてくれました。UNIX哲学や『伽藍とバザール』など数多くのことを教えてくれましたし、一緒に本を読み合ったりもしました。それが、その後のOSSの取り組みにも大きな影響を与えたんです。

──その先輩エンジニアの方に会うまでは、オープンソースというものを意識されていなかったのですか。

松本 まったく意識することはなかったですね。自作パソコンにハマっていたころはLinuxを入れたりもしていましたが、その理由も「Linuxならタダじゃん」という程度でしたから(笑)。しかし、先輩の影響でリーナス・トーバルズの著作や思想、オープンソースの歴史に触れて、すごく感動したことを覚えています。

乗るしかない。mrubyのビッグウェーブに!

──その後、松本さんは博士課程で研究を始めますが、その頃からOSSへのコントリビューションも増えていきます。特に、mruby関連の開発において多大なる功績を残されていますが、なぜmrubyに興味を持たれたのでしょうか?

松本 僕が博士課程に入った4月に、ちょうどmrubyがリリースされたんです。当時は、すごいビッグウェーブが来たと思いました。「Matzさんがまた素晴らしいものを出した」と。せっかくなので、mrubyを使って何かを作りたかったんです。それがmod_mrubyの開発につながりました。

──mod_mrubyはWebサーバーであるApacheの拡張モジュールですが、このテーマを選んだのはどうして?

松本 もともと僕が企業で働いていた頃、よくWebサーバーの拡張ライブラリをCで書いていたという実装経験があったことでしょう。

さらに、当時は「mod_perl」や「mod_php」など同様のApache拡張モジュールもありましたが、それらのモジュールはWebサーバーのふるまいをコントロールする目的で使うには、機能の規模が大きすぎると感じていました。もっとコンパクトな機能のモジュールがあるべきだと。

そんなとき、Rubyの軽量版としてmrubyが登場してきたので「これで書けばいいじゃん!」と思ったんです。

松本さんによるmod_mrubyの初期コンセプト。

──mrubyのリリース後、すごいスピードでmod_mrubyを実装されたそうですね。

松本 当時はすごく焦っていたんですよ。なぜなら、「mod_perlやmod_phpのmruby版を作る」というアイデアは、絶対に世界の誰かがすぐ思いつくものですから。ならば、世界で一番先に実装して公開するしかないと考えたんです。mrubyがリリースされたのは2012年4月20日ですが、mod_mrubyを公開したのは2012年4月21日。つまり徹夜でコードを書いて、mrubyがリリースされた翌日にリリースしたんです。とにかく早く出さなきゃいけないという焦燥感から、まるで見えない敵と戦っているような開発でした(笑)。

──驚異的ですね……。mod_mrubyは何がきっかけとなって広がったんですか?

松本 Matzさんがシェアしてくれたことです。当時、僕はMatzさんによくmruby関連の質問をTwitter上でしていたんですが、だんだんと僕のことを気にかけてくれ、書いたブログをRTしてくるようになったんです。それをきっかけに色々な人がmod_mrubyのことを知ってくれ、同時に僕自身を知ってくれる人も増えていったんです。

mod_mrubyの開発に着手し始めた頃の、まつもとゆきひろさんとのコミュニケーション。

学術研究とOSS活動が融合し磨かれた、mod_mrubyの振る舞い

──その後、mod_mrubyの開発は松本さんの学術研究テーマとも結びついたそうですね。

松本 mod_mrubyのリリース後、Nginxもサポートしたいと思ってngx_mrubyという拡張モジュールを開発しました。それらの実装をどう揃えていくかを検討していたタイミングで、指導教員の教授が「松本さんがmrubyで開発している内容を、論文に書きませんか?」と言ってくれたんです。

当時の僕は、学術研究とOSS活動は全く別のものだと思っていました。でも、その教授はすごく理解のある方で「mod_mrubyもngx_mrubyも、内容をきちんとまとめたら論文になる」と言ってくださったんです。教授のアドバイスがあったからこそ、僕のキャリアはうまくいったように思います。

それを機に、論文執筆に向けてmod_mrubyやngx_mrubyの持つ長所や新規性について言語化していくようになったのですが、論文をまとめながら実装方法を見直していくことで、設計のクオリティーも徐々に上がっていきました。

──たとえば、設計においてどのような工夫がなされているのですか?

松本 ngx_mrubyとmod_mrubyでは、「同じようなmrubyのコードを書けば、それをngx_mruby、mod_mrubyのいずれに渡しても同じような挙動をすること」を大事にしていました。もちろん、それぞれのWebサーバーは内部的な仕組みが異なるのですが、その差分をmrubyのレイヤーで吸収するような実装をしていたんです。

それから、運用負荷を軽減できるような工夫も行っています。普通は、Webサーバー起動後に拡張モジュールのスクリプトを書き換えても、サーバーの挙動は変わりません。初期起動時にそれらの情報をメモリに読み込み、その後、再読み込みをしないからです。

ですが、拡張モジュールに「リクエストが来たタイミングでスクリプトのコンパイルをし、そのリクエストは新しく生成された実行可能ファイルで処理する」という機能を持たせることで、サーバー起動中でも挙動を変えられる設計にしました。

毎回コンパイルするので少しずつメモリ上にゴミが溜まっていくんですが、Apacheはその構造上、各プロセスが特定回数のリクエストを捌いたら、勝手にプロセスが落ちてくれます。それに伴ってメモリの状態もクリーンになるので、メモリリークの問題も発生しません。

──実用性が非常に高いですね。現場での運用を経験したからこその視点を感じます。

松本 さらに、その機能を、エンジニアの用途に合わせてオン・オフできるようにしました。性能を追求したい場合は設定をキャッシュでき、そうでない場合は設定を毎回読み込むようにできます。

越境するからこそ生まれる価値

──学術研究と企業での仕事をどちらも経験したことで、松本さんのキャリアにどのようなプラスの影響があったと思いますか?

松本 アカデミアの領域とは、研究や論文執筆などを通じて靄がかかっている領域を言語化・評価し、誰が論文を読んでも内容が客観的に理解できるようにしていく作業です。いわば、論文は思考のフレームワークのような側面があります。アカデミアの方法論の上でテクノロジーを扱うことで、進むべき道筋が言語化されていき、未来のことを予想しやすくなります。

それから、アカデミアの世界にいることによって、人類がこれまで築き上げてきた叡智をフルに活用できるのも大きいです。というのも、技術というのはらせん状に進化していて、特定の設計思想をベースとしたソフトウェアが、その後も必ず一定の周期で再登場してくるんですね。

──特定の業務にフォーカスしていると、技術のらせんに目を向ける機会は少ないかもしれませんね。

松本 「会社の業務」という範囲で研究をしていると、そうした過去の歴史を俯瞰的にとらえるのは難しいです。しかし、アカデミアは過去から現在へと至る知識を蓄積し続けています。いわば人類の叡智という面があるわけです。それらの知見を活かせるのは、アカデミア領域に携わるからこその強みだといえます。

でも、それだけでは不十分です。なぜなら、アカデミアの手法を用いることで「技術が進化する方向性は正しいか」「それがどう世の中に広がっていくか」は検証できますが、「技術が社会実装された際に、どんな実課題が出てくるか」を予想するのは難しいからです。そうした課題は、やはり企業のなかでサービスを開発・運用してみなければわかりません。

アカデミアと企業実務、両方の持つ特性をうまく使うことで、学術研究から社会実装までを含めた統合的な技術の正しさと広がりを検証できると考えています。大学での研究を終えた後、企業の研究開発の現場に戻ってきたのも、それが大きな理由です。

迷ったら、楽しい方を選べ

──日本におけるOSSの文化は、今後どう発展していくと考えていますか?

松本 ここ10年くらいの間、日本においてOSSを利用すること、貢献することが一般的になってきています。そのなかでも、特に若くてスキルの高い方が、日本だけに目を向けるのではなくグローバルな視点を持ってOSS開発やカンファレンス参加に取り組む事例が増えていると感じます。

僕もそれを見習って、今年はあえて国内のカンファレンスへの出席を減らしています。もちろん、国内だと居心地はすごくいいんですが、居心地がいいからこそ、自分ができることを当たり前にやっているだけのような感覚があるんです。若い人たちが積極的に世界に出ようとしているのだから、自分ももっと頑張らなくてはと思っているんです。

──向上心を持ち続けているのですね。最後に、記事の読者であるエンジニアの方々にメッセージをお願いします!

松本 僕の人生をふり返って考えてみると、いまもこうして情熱を持って研究開発に取り組めているのは、ずっと「趣味っぽく楽しくやっていたから」なんです。

「サーバーを立てるのは楽しい」とか「mrubyはすごい」とか。そういう単純な動機って、自分のためだからこそ夢中になって頑張れます。だから、会社やコミュニティのためよりも、まずは自分のために、“楽しい道”を選んでほしいです。それに、楽しいと思える領域でなければ、何かのスキルを極めるくらいに突き抜けた努力をすることはできません。

磨いた技術をどう会社や社会に還元するかという方法は、いずれ自然と見えてきます。だからこそ、まずは自分を信じて、楽しいと思えることを続けてほしいです。

関連記事

取材・執筆:中薗昴