「ビビっているだけが一番良くない。ここ一番で勇気を出しながらやっています」-東京大学大学院 情報理工学系研究科 伊藤友気(mururururu)氏
この連載では、「Forkwell Jobs」の開発にも関わるフリーランスエンジニアの後藤大輔(@idesaku)が、さまざまな企業で働くエンジニアとリレー形式で対談を行っていきます。
前回のアカツキ島崎清山氏からご指名のあった第5回のゲストは、伊藤友気(@mururururu)氏です。 このリレーインタビューでは、基本的に企業に勤めていらっしゃるエンジニアの方にお話しを伺ってきたのですが、今回登場する伊藤氏は現在、東京大学の大学院生です。自身の研究を行うかたわらで、日本屈指のErlang/OTP、Elixirのエキスパートとしても知られ、さまざまな企業からの仕事も受けておられます。今回は、伊藤氏がプログラミングを始めたきっかけや、今後の進路についてお話しを伺いました。
伊藤さんご指名のリレー相手は、インタビューの最後でご紹介します!
さらに今回は Erlang、Elixirの人材採用を完全無料で行えるキャンペーンのお知らせもありますよ!
「ヒマだったから始めてみた」プログラミングが人生を変える転機に
後藤
島崎さんからのご紹介で、今回は伊藤友気さんにお話しを伺います。よろしくお願いします。
伊藤
よろしくお願いします。
後藤
前回の島崎さんは、インタビューを受けて下さることが決まった段階から、次の指名相手として伊藤さんを考えていらっしゃったそうです。島崎さんとは、お仕事で知り合われたんですか。
伊藤
はい。1年半ほど前から、島崎さんの前職場である時雨堂さんからお仕事を受けていまして、そこで知り合いました。
後藤
島崎さんは「Erlangで難しいことがあったらmururuに投げる」みたいなこともおっしゃっていましたが。
伊藤
時雨堂では、自社製品にErlangを使っていまして、主な部分は「Voluntus」さんが書かれるんですが、ちょっと複雑な部分だったり、パフォーマンス的にErlang自体にパッチを当てないとツラいと判断された部分だったりを、僕のほうでやらせてもらっています。
後藤
たしか、以前の時雨堂は、自社製品開発と受託開発の両輪でまわしていらっしゃったと伺っています。島崎さんは主に受託のほうを担当されていたとのことでしたが、接点はあったんでしょうか。
伊藤
僕は社員ではないのですが、規模が小さい会社なので、あまり担当の区分は明確でなかったですね。基本的にはリモートで受託するのですが、島崎さんとは、たまに打ち合わせで一緒になったり、会社が用意してくれる昼ご飯を一緒に食べさせてもらったりという感じでお話しさせていただいていました。
後藤
伊藤さんは現在、大学院生ということなんですが、具体的にはどんな研究をされているんでしょう。
伊藤
所属は東京大学大学院の情報理工学系研究科で、研究分野としてはHPC(High Performance Computing)になります。僕はその中でも、ネットワーク寄りのことをやっていて、非常にざっくりとまとめると、並列計算を行う多数のノードをどのように接続すれば、よりパフォーマンスが出せるかというようなことをテーマにしています。
後藤
現在、企業から受けていらっしゃる仕事の内容とも、一応関係があるという理解でいいんでしょうか。
伊藤
「並列分散処理」という大きなくくりで見ると、関係していると言えるかもしれません。ただ、この分野の中にもいくつかテーマがあります。結果計算のパフォーマンスを出すために、多数のノードをどのように並べて処理をするかという部分に特化したテーマもあれば、より一般的な実運用の観点では、障害が起きた場合のフォールトトレラントなどをどう実現するかといった考慮も必要です。僕の場合、研究でやっているのが前者で、仕事でやっているのが主に後者です。ですから、直接関係するというわけでもないんです。
後藤
なるほど。何となく、学術計算でスパコンをガンガン回すという分野だと、言語としてはFORTRANあたりがまだまだ現役のようなイメージもあるのですが。
伊藤
FORTRAN、バリバリ現役ですね。
後藤
ちなみに、学部生のころから情報系でいらっしゃったんですか。
伊藤
いいえ。学部の時は材料系をやっていました。シミュレーションなどで、むしろスパコンを使う側の立場でしたね。そのためにFORTRANをちょっと書いてみるといったことはしていました。
後藤
そんな伊藤さんが、プログラミングをやろうと思った、そもそものきっかけはなんだったんでしょう。
伊藤
まだ学部の3年生だったころ、5年前くらいですかね、ものすごくヒマを持て余していて。…まぁ、学生なので勉強はしていたんですけれど、それでもあまりにヒマそうにしていたら、情報系の学部にいたサークルの先輩が「ヒマならプログラミングでもやってみたら?」とC++の教本を1冊くれたんです。マンガを読むくらいの感覚でパラパラ見ながらちょこっと動かしてみたのいうのが、最初のきっかけですね。
で、実際にC++で書いたプログラムが動くようになると、それが楽しくなってきました。そのうち、家でひとりで動かしていても面白くないなと感じるようになって、仕事なり、アルバイトなりでプログラミングの技術を使えるようになりたいと思ったのが、本格的にやるようになった動機です。
そのうち、知り合いのつてで、Ruby on Rails(RoR)でWebサービスを作るスタートアップを紹介してもらい、そこでインターンをやるようになりしました。それからしばらくは、ずっとRoRを使っていましたね。その結果、若干学業がおろそかになって、同じ学年を何度かやったりもしたんですが。(笑)
後藤
「ヒマだったから始めてみた」というのはスゴイですね。最初はC++から入られたということだったんですが、その後RoRをやるにあたっては、Web系のアーキテクチャも含めて、すべて勉強し直されたということですか。
伊藤
そうですね。いろいろ調べていくうちに、C++だとカジュアルな求人なども少ないことが分かってきまして、より手軽に役立てられる技術を知りたいということでRoRを選んだという感じです。
コミュニティに貢献しつつ、実地で理解をさらに深めた「Elixir」と「Erlang」
後藤
そうやって勉強し、興味を深めていくうちに、大学院では本格的に情報系をやってみようと考えるようになったんですね。伊藤さんは本業の研究でも、企業から受託している仕事でも「分散処理」に関わっていらっしゃるわけですが、「分散処理」というものに興味を持つようになったのは、どのタイミングなんでしょう。
伊藤
RoRを使っていろいろとやってみる中で「Elixir」を知ったのが直接のきっかけです。このリレーインタビューにも登場されたmizchiさんとか、当時Aimingで現在はペパボにいらっしゃる@udzuraさんあたりが、Elixirを触ってブログ記事を書かれていた時期がありまして。4年くらい前ですかね。それを見て、自分も試しに触ってみたというのが最初です。
当時のElixirはバグだらけだったんで「せっかくだから」という感じでバグを直してみたり、Elixirを理解するためにはErlangについても知る必要があるので、そちらも触ってみたりということをやっているうちに、面白さを感じるようになりました。
そうやって覚えてはみたものの、ElixirやErlangは、Rubyなどと違い、それを使って自分でツールを作ったりするための言語ではないんですよね。でも、せっかく覚えたのだから何とか仕事に使いたいなと思っていたところに、Voyage Groupのアドテクユニットにいらっしゃる@ajiyoshiさんと、たまたまお会いする機会があって「Erlang書いているの? じゃ、バイトで来てみる?」と声を掛けていただいたのが、仕事として関わるようになった経緯です。
そもそも「分散処理」自体、個人としてやる機会はあまりないので、実際の仕事の中で、それが必要になる場面に触れながら、理解や興味を深めていったという感じです。
後藤
C++から入って、RoRに行き、ElixirからErlangと、次々に間口を広げていかれたんですね。学んだことを「仕事」に生かしたいという目的意識を原動力に、突破口を作って次に進んでいる感じがします。
伊藤
技術への興味に関しては、ある意味で「飽きっぽい」ところがあるのかもしれません。わりとすぐに次のことをやりたくなってしまうんです。
後藤
でも、一度興味を持つと非常に深くまで入れ込むイメージもあります。特に「Elixir」に関しては、本当に初期からたくさんのプルリクエストも投げていらっしゃいましたし、日本では1番貢献しているんじゃないですか。
伊藤
そうですね。作ったモジュールは標準ライブラリの一部にもなっていますし、日本からはあまり定期的にコミットしている人がいないというのもあって、コミット数で言えば、そのくらいのレベルかもしれません。頻繁にパッチを投げていたころに、Elixirの作者José Valimから「今度Ruby会議で日本に行くから会わないか?」とメッセージをもらって、会ったこともありました。当時、日本できちんとElixirを触っていたのが僕くらいだったというのもあると思いますが。
並列分散処理における「Erlang」の使いどころ
後藤
ちなみに、大学院での研究では、Erlangは使っていないんですか。
伊藤
まったく使っていません。研究室でErlangの話をしても「名前くらいは聞いたことがある」くらいの人が多いですよ。メインはC言語です。
先ほど、僕の研究分野では「計算をどれだけ速く実行するか」がテーマになっていると話したんですが、基本的にErlangは「遅い」んです。もともと、エリクソンが電話の交換機向けに作った言語ということもあって、スループットは低い一方で、レイテンシをコントロールする方法に対しては、非常にロバストな仕様になっています。並列分散処理という方法は一緒なのですが、僕が研究室でやっているものとは、求める結果が異なるので「使わない」ということになります。
後藤
最近、リアルタイムWebの文脈で、Elixirのフレームワークである「Phoenix」なども話題になっていると思うんですけれど、こういった用途には向いているんでしょうか。
伊藤
ElixirやErlangは、並列分散処理にあたって大量のコネクションを張りっぱなしにした場合でも、1コネクションあたりのリソースコストが非常に小さくなるように作られています。その点で、Web上でコネクションを維持しながら、リアルタイムに何かをやりたいといった用途には、非常に向いていると思いますね。そうしたことをRoRでやろうとするとわりと大変なんじゃないでしょうか。
一方で、コネクションを張りっぱなしにしない、httpでリクエストを受けて投げるといった通常のWebアプリであれば、今のところ、あえてErlangを使う強い理由はないかもしれません。
後藤
島崎さんから伺った話によると、ドワンゴではニコニコ生放送の基盤をErlang使って刷新し、その適用範囲を広げていっているようなのですが、そういう使い方には向いているということですね。
伊藤
そう思います。次々飛んでくる細かいデータを遅延なく流していくという用途でErlangを使っているところは、ドワンゴ以外にもいっぱいありますね。要は、バックエンドでどのようにデータを流したいかという部分がカギで、Erlangは、ため込んだデータに対してがっつりと大きな計算をするよりも、由来どおり「電話の交換機」的な使い方のほうがよりフィットします。
後藤
データの流れが「止まっているように見えない」ということが重要な分野はErlangに向いている、ということなんですね。
「学業」と「仕事」のマルチタスクを早く解消したい
後藤
研究と仕事で、使われている技術分野がまったく違うということはよく分かったのですが、それぞれに勉強する時間を工面するのは大変じゃないですか。
伊藤
去年あたり、だいぶつらい思いをした時期があったのですが、今では、まぁ、たまにスプラトゥーンで遊ぶ時間がとれる程度の余力は作れています。
後藤
今回も出ましたね「スプラトゥーン」(笑)。
伊藤
たしか、あのゲームが出たのが去年の5月だったと思うんですが、中学時代以来じゃないかと思うくらいどっぷりハマりましたね。僕だけでなく、多くのエンジニアの方が、発売から半年くらい、GitHubのアクティビティがなかったりするんです(笑)。さすがにヤバいなと思って、今では控えているんですが。
後藤
あのゲームは、日本のエンジニアの生産性を相当落としていたんですね(笑)。
ちなみに現在は、複数の企業からお仕事を受けていらっしゃるんでしょうか。
伊藤
今は、時雨堂が中心ですね。やっていること自体が新しくて面白いという理由もあって引き続き関わっています。あとは、アカツキの新規事業に関連して、Elixirの仕事を受けているくらいで、ほかにはやっていません。
後藤
大学院生の立場で、社会人に混じって仕事をしていて、面白かったり辛かったりすることはありますか。
伊藤
辛いこと…というのとは、ちょっと違いますが、学業と仕事を並行してやっていくにあたって、どうしてもマルチタスク的に処理せざるを得ず、どちらか一方にだけ集中できる状況が作りづらいところに、ストレスを感じることはありますね。もうちょっと腰を据えて何かをしたいというか。今、修士課程の2年なのですが、そういう意味では、早く大学院を修了したいと思っています。
後藤
研究職を目指しているわけではないんですね。
伊藤
ええ。今、海外も視野に入れながら就職活動をしているところです。できれば国内ではなく、海外で仕事ができたらなぁというのが今の希望です。
英語でのコミュニケーションはツラいけれども、それ以上に「楽しいこと」がある
後藤
海外で仕事をしたい希望があるということは、英語はわりと得意なほうなんですか。
伊藤
いいえ、全然。受験英語は勉強しましたし、辞書を使いながら論文を読む程度のことはできますが、英語を話す友人がいたわけでもありませんし、そこまでのレベルでした。ですから、最初オープンソースのコミュニティに英語で参加するときには、ものすごくドキドキしていましたね。Google翻訳で何度も確認しながら「こんな文章で大丈夫かなぁ」と思っていました。
後藤
今回ようやく親近感の沸く言葉が聞けて、ホッとしています(笑)。
伊藤
今でも英語そのもののスキルに関しては、あまり進歩していないんですよ。ただ、あまり良いことではないかもしれませんが、自分の英語に細かい間違いがあるかもしれないことを「気にしない」能力はついたかもしれません。ソフトウェアの世界は、ある程度コンテキストが共有されているので、文章に多少の拙さがあっても、あまり不都合は起こらないんですよね。
後藤
プルリクエストなんかは、それほど英語が堪能でなくても読み書きできるレベルの文章で十分ですしね。
伊藤
最初のころは、プルリクエストで英語を学んだ部分も多かったと思います。
後藤
文章でのやりとりはともかくとして、実際に人と会ってコミュニケーションするのは大変ではなかったですか。たしか、米国であったErlangの大きなカンファレンスにも参加されたんですよね。
伊藤
今年の3月にサンフランシスコで開催された「Erlang Factory」というErlang関連では最大のカンファレンスに参加してきました。時雨堂のVoluntasさんから「時雨堂の宣伝も兼ねて、代わりに行ってきてよ」と言われまして。
後藤
参加されただけじゃなくて、ライトニングトークもやってきたとか。
伊藤
ええ。会場で「本日のLT、参加者募集中」みたいな呼び込みをしていたので、「せっかくだからやっとくか」みたいな感じで、飛び入りで。
後藤
飛び入りでLTですか。それはスゴイ。
伊藤
特に準備もしていなかったんですが、当日最初のセッションでErlangの次期バージョンのハイライトについての話があって、そこでちょうど自分がパッチを書いた改善内容が紹介されていたので、これについてもう少し詳しい話ができるかなと。そうした解説をしつつ 「今、学生で就職活動中だから仕事くれ」みたいなことを適当な英語で話してきました。
後藤
自分の売り込みもしてきたわけですね。でも、これだけErlangに貢献していて、セッションも持つくらいであれば、引く手は数多なんじゃないですか?
伊藤
そうだといいんですけれどね。もし米国で雇うのであれば、技術的に同じレベルの人なら米国人のほうが雇いやすいですよね。言語が同じでコミュニケーションしやすいし、ビザの取得という面倒とも無縁です。もし僕が、そこに入り込もうと思ったら、それらを超える何か飛び抜けたものが必要になると思うんです。なかなか、思った通りにパッと進むというものでもないですよね。あ、ビザのサポートしてくれる企業を絶賛募集中です(笑)
後藤
なるほど。そこはたしかに難しいところですね。でも、そこで「自分は英語ができないから」と尻込みしてしまわないところは、素晴らしいと思います。
伊藤
本当は僕、コミュニケーションがものすごく苦手なんですよ。勉強会なんかに出ても、あまり人と積極的に話さなかったりしますし。
後藤
でも、OSSのコントリビューターをやっていると、英語で議論やコミュニケーションをしなくてはいけない場面も出てきますよね。
伊藤
基本的に、質疑応答的なコミュニケーションが中心で、議論にまで発展することは多くないんですが、たまにそうせざるを得ないことになってしまうと、まぁ、ツラいですね。もちろん、飛び入りでLTに出ることを決めたときにも、まったくためらいがなかったわけではないんです。ただ、そういうツラさに耐えてコミュニケーションすれば、その後により面白いものが待っているという経験もしてきているんです。
たぶん、一番良くないのは「ビビったままで何もしないこと」で、要所で少しずつ、勇気というか、度胸というかを振り絞って何かをやってみるというのが、大事だと思いながら、ここまできています。
後藤
「とりあえずやってみる」という感覚はすごく大事だと思います。日本でオープンソースに関わっているエンジニアの中でも、ソースコードを見ながら「ここをこうしたらもっといいのに」と思いながら、英語やコミュニケーションにビビってしまって、何もできていないという人は多いのだろうと思います。そこで勇気を振り絞って、プルリクエストなんかを送れば、そこから新しい世界が開けることもあるかもしれないですよね。
伊藤
GitHubが出てきて変わったことと言えば、メーリングリストなどに比べて、コミュニケーションコストが大幅に低くなったことじゃないでしょうか。極端な話、コードさえ書ければ意思疎通ができる、良い時代になっていると思いますよ。
「今やっていることを今後もやり続ける」ことにこだわりはないんです
後藤
卒業後には、職業エンジニアを目指されると思うのですが、分野としては、今やっておられるErlangやElixirのような技術に関連したところを目指しているのですか。
伊藤
うーん、実のところを言うと、その分野をやり続けたいという思いが、非常に強いわけでもないんですよね。
後藤
飽きましたか?(笑)
伊藤
いやいや、まだ飽きるほどやれていないので、そういう意味ではないです。ただ、自分が今やっていることを、この先もやり続けることに強いこだわりはない、ということです。もちろん、今の自分が持つスキルセットを考えると、その延長線上でやれることを突き詰めて仕事にしていく可能性は高いだろうと思っています。ただ、僕は何でも、始めるとすぐ楽しくなってしまうタイプなんで、その意味では自分の人生設計と、求めてくれるところとがマッチするのであれば、どんなテーマでもいいと思っているんです。
僕の場合、最初からコンピュータに強い興味があったわけではなくて、たまたま使えるようになったら、楽しいし、お金にもできるしといった理由で続けているという部分があります。もし、コンピュータ以外の分野で、同じように興味が持てて、お金が頂けるものが出てくれば、そちらに進んでいく可能性もあるだろうと思います。
後藤
ちなみに、自分で起業するという考えはありませんか。
伊藤
それはないですね。今の自分には起業してまでやりたいと思うことがないんです。僕は自分でアイデアを出すのが苦手で、どちらかというと、人が描いたイメージに合わせて物事を進めていくほうが得意だと思っています。もし、他人が出したアイデアに、僕も心から共感できて、そこで自分のスキルが役に立つということがあれば、一緒にやっていくことはあるだろうと思います。今のところは、そんな自分を、うまく使ってくれる人と仕事をしていきたいという思いが強いですね。
後藤
今後、伊藤さんが興味を持てそうな技術や、伸びると思っている分野などがあれば教えて下さい。
伊藤
これは難しいですね…。今のところ、プログラミング言語やフレームワークのような要素技術が注目されることも多いですけれど、近い将来、そうしたケースはどんどん減っていくんじゃないかと思っています。そのレイヤが成熟することで注目されなくなり、より上のレイヤというか概念で語られるケースが増えるというか。今の流行でいうと「人工知能」みたいなくくりで専門性が求められるようになるというか。
例えば、今、僕は「Erlang書けます」「Elixirやっています」という言語やフレームワークのレベルで話をして、それが仕事につながっているわけですけれど、早晩そういう状況はなくなってくるんだろうと思っています。なんか、あいまいな答えになってしまってすみません。
次回のゲストは「ニュートラル」で「不思議」?
後藤
そろそろお時間のようです。では、恒例で次のゲストの方をご紹介いただけますでしょうか。
伊藤
Voyage Groupの鈴木健太さんを指名させていただきます。僕がErlangを本格的に使い始めるきっかけになったのがVoyage Groupでの仕事だったのですが、その時同じプロジェクトでお会いして、強烈な印象を受けた方です。技術的なレベルは極めて高いエンジニアでありながら、パッと見、技術系の人に見えないというか、「ギーク感」がないというか、実に「ニュートラル」な雰囲気を持った不思議な方です。前々から、鈴木さんの人生的なビジョンというか、「今後どこを目指しているのか」といったことに関心を持っていたので、そのあたりも含めて、ぜひ話を聞いてみたいです。
後藤
そうなんですね。個性的な方のようで、お目にかかるのが楽しみです。本日は長い時間、ありがとうございました。
執筆:高橋美津
ここで運営からの宣伝です!
今回の伊藤さんへのインタビューをきっかけに、エンジニア特化の求人メディアForkwell Jobsにて、Erlang、Elixirの人材採用を完全無料で行えるキャンペーンを開始することとなりました!
Erlang、Elixir でお仕事されている皆さん、この機会にぜひ仲間を探してみませんか?!
詳細は下記のリンクをご覧ください!
http://press.forkwell.com/post/146924164752/elixir-anniversary