RubyPrize2018 受賞者 国分崇志/Takashi Kokubun Interview

まつもとひろゆき、国分崇志

国分さんを経由して、Ruby3はだんだん現実化していく。
(まつもとゆきひろ)


まつもとひろゆき
まつもと
国分さんって去年もノミネートされた。
国分崇志
国分
そうですね、去年もノミネートいただいて。
まつもとひろゆき
まつもと
かぶるよね、内容的に。どうしようかな。
国分崇志
国分
柴田さん(Ruby Prize 2014受賞者)さんのときはどうしたんですか。
まつもとひろゆき
まつもと
柴田さんのとき、どうしたっけな。忘れた(笑)。
柴田さんのときは、去年のことは何も考えないで話そうって言って、結局同じ話をしたような気がするな。
じゃあ、どうもおめでとうございます。
国分崇志
国分
ありがとうございます。
まつもとひろゆき
まつもと
去年もノミネートされたわけですが、今回はとうとうPrizeを受賞。
去年も聞いたような気がするんですけれども、いつプログラミングを始められましたか?
国分崇志
国分
プログラミングを始めたのは、2011年に大学入ってからですね。
C言語を書くようなアルバイトを始めて、そこで2年くらいやった後に、次にObjective-CでiPhoneアプリを書き始めたんですけど、半年くらいやったら、Objective-Cを書くのがつらくなって、何かRubyっていう良い言語があるらしいみたいなのを知って、そこからにクックパッドに移って、Railsアプリを書くっていうのをやってきました。
まつもとひろゆき
まつもと
へえ〜。いきなりアルバイトでCを??
まつもとひろゆき、国分崇志
国分崇志
国分
何か初心者でも入れてもらえるプログラミングのアルバイトを探したんですよ。別にそんなすごいことはやらないんですけど、探していたら、たまたまその会社にヒットして、そこがCをやっていたので、何か授業とかでも、C言語やるし、そこでやるかということで始めた感じですね。
まつもとひろゆき
まつもと
プログラミングのアルバイトを探したのは、プログラミングをやりたくて?
国分崇志
国分
はい。
高校の時点でちょっとだけプログラミングをする機会があって、その時点でおもしろいなとは思っていたので、大学ではプログラミングをやろうとは思っていました。でも、学生のときにそんなにお金がなかったし、いずれにしてもアルバイトをしたくて。そこで、時間効率を考えて、アルバイトでプログラミングをしたいなということで探したんですね。
まつもとひろゆき
まつもと
それは大学の若い1年生とかに?
国分崇志
国分
1年の5月なんで、もう1カ月後にはもうやり始めた感じですね。
その会社が、最初の1カ月とかで、研修でC言語を教えてくれるんですよ。そこで学んで、結構いろんな課題を解いたりとかして、C言語はそこで覚えたっていう感じですね。
まつもとひろゆき
まつもと
親切、丁寧な。
世の中にそんなアルバイトもあるんですね。
国分崇志
国分
給料もらってC言語を学べるっていう。
まつもとひろゆき
まつもと
僕、プログラミングのアルバイトしたことあるけど、もうちょっと悲惨な感じだった。「ここにマシンがある。おまえはやれ!」とかいう感じだった(笑)。
そのときは、プログラミングそのものを全般的に学びたくて、とりあえずCだという感じだったの?
国分崇志
国分
まあ、そうですね。何となくプログラマーになりたくて、でもそんなにプログラミングを知らなかったので、何となくよく名前を聞くC言語かなみたいな。
まつもとひろゆき
まつもと
ああ、そうなんだ。後に大学で授業とかで?
国分崇志
国分
授業でもやりますけど、授業は何か黒板に書いたやつを板書してノートにプログラムを書くみたいなそういう微妙な授業なんで。
まつもとひろゆき
まつもと
それはそれでつらそうな。
国分崇志
国分
余りそこでは学ぶことはなかったんですけど、授業でも一応CとJavaとSchemeをやるっていう感じではありますね。
まつもとひろゆき
まつもと
何か、CとJavaとSchemeっていうのは、どうも飛び抜けた感じが。
それで、アルバイトと大学でちょっとやって、でも情報系の学科ではなかった?
国分崇志
国分
一応、情報工学科に。
まつもとひろゆき
まつもと
情報工学だったのね。そこを卒業して、最初は?
国分崇志
国分
クックパッドに新卒入社しました。
まつもとひろゆき
まつもと
新卒でクックパッドに。
国分崇志
国分
はい。
まつもとひろゆき
まつもと
その国分さんといえば、Hamlの高速化といい、何かこう最近だとMJIT、途中LLVM…YARV−LLVM?
国分崇志
国分
YARV-MJITっていう名前にしたんですけど、その前、LLVMのやつは、LLRBっていう名前にしたんですけど。
まつもとひろゆき
まつもと
何かパフォーマンス系の業績が非常に目立つんですけども、もともとそういう関心というわけでもないんですよね?
国分崇志
国分
クックパッドに入ってから、たまたま遅いプログラムを目にすることが多くなって、それは多分、高速にいろんなサービスをいっぱい出している会社だったからだと思うんですけど、技術的負債が結構たまっちゃうんですよね。なんで、単にサービスをどんどん出していたら、いつの間にか規模が大きくなっちゃって、どんどん遅くなってしまったっていう状況を、たまたまどうにかする係になったので、最適化をやることが多かったなっていうのと、あと単純にたまたまテンプレートエンジンを書いていたころに、「Haml遅いよね」みたいなのがちょっと流行っていて、松田さんとかもちょっと「やるぞ」みたいなこと言っていたんですけど、僕もそれをやって、何かたまたまこう、うまくいったみたいな感じですね。
国分崇志
まつもとひろゆき
まつもと
自分的にはたまたまだと思っているんですか?
国分崇志
国分
やってみたら面白かったので、うまくいったっていう感じですね。ちょっと興味を持ったことにさわってみて、たまたまうまくいったみたいな。
まつもとひろゆき
まつもと
なるほど、なるほど。
そうすると生まれながらのパフォーマンスの人というよりは、そういう仕事の割り当てがきっかけっていう感じなんですかね?
国分崇志
国分
Hamlのほうが、仕事よりは先なんですけど、一応仕事でもRailsアプリケーション、チューニングすることはありましたけど、どうなんでしょうね、わかんないですね。やっていると、だんだん相乗効果でどんどん楽しくなってくるというような感じで。
まつもとひろゆき
まつもと
まあ、確かに確かに。
じゃあ、今はRuby関係ではMJITのことをやってもらって、あとはパフォーマンスも随分改善しましたけれども。
国分崇志
国分
そうですね。
まつもとひろゆき
まつもと
期待を僕が煽っているんですけど(笑)。
犯人は俺だっていう感じなんですが、その国分さん的に、何か今のフォーカスみたいなところはやっぱり、Rubyコミュニティ時代にJIT、その上でまだいろいろあるだろうけど。
国分崇志
国分
そうです。
Ruby的には、僕は去年だんだん低レイヤーに移ってきたので、そのRubyのVMのコアとかJITコンパイラを開発するほうに興味があって、触らせてもらっているんですけど、JITで開発している中だと、一応Optcarrotっていうベンチマークがあるんですけど、それが、CPUを主に使うベンチマークで、全くオブジェクトをアロケートしなかったりとか、GCは動かないし、メモリは全然使わないワークロードなんですよね。それで一応2.6の時点で、大体2.5倍ぐらいは速くできそうな状態まで来てるんで。
まつもとひろゆき
まつもと
3倍近い。
国分崇志
国分
そこは、一段落したかなと思ってて、その後は、エスケープ解析とかをして、オブジェクトをスタックに張りつけるみたいなメモリのワークロードを軽くするような改善をしていきたいなと思ってるっていう感じです。
まつもとひろゆき
まつもと
なるほどなるほど。
じゃあ、国分さんを経由して、Ruby3はだんだん現実化していく。
すごいよね、僕が適当にこう旗を振ったら、みんながやってくれる、いい世の中になったもんだって感じです。ありがとうございます。
国分崇志
国分
いいえ、こちらこそ。
とてもおもしろい思いをさせていただいてるんで。
まつもとひろゆき
まつもと
知的チャレンジを提供し続けるのが私の使命らしい。
じゃあ、今後もその、低レイヤー、今はエスケープ解析等、オブジェクトアロケーションの話をしましたけども、そういう感じの方向性を追求していこうかなと?
まつもとひろゆき、国分崇志
国分崇志
国分
そうですね。
今のところ僕は、JITコンパイラが全然完成しているとは思ってないので、それをまず自分が満足できるところまでは持っていきたいなと思ってます。既存の処理系のいいところをもらってくるのがまだ必要かなと思っていて、Javaとかが、スタックベースのVMでいうと、一番進んでるJITかなと思っているので、HotSpotとかを自分で使ってみて、何か工夫してるポイントとかを真似して、そのJavaの性能を100%Rubyで再現するのはすごい大変だと思うんですけど、その8割くらいだったら、何かその2割くらいの労力でいけるんじゃないかなっていうのをちょっと思っていて、そこまではいけるといいかなっていう感じですかね。
まつもとひろゆき
まつもと
じゃあ、とりあえず低レイヤーとパフォーマンスについて。
国分崇志
国分
そうですね。
まつもとひろゆき
まつもと
今後も、頑張りますという、所信表明ということでいいですかね。
国分崇志
国分
そうですね。
まつもとひろゆき
まつもと
例えば、VladとかMIRみたいなものやったりとか、ちょっとテクニカルな話になりますけども、あの辺についてライバルっていうポジションと言ってもいいのかもしれないけれども。
国分崇志
国分
一応、僕が今年やっていたのは、ポータビリティーとかあとはバグ、デッドロックとかSEGVをするような場所を直すっていうところをなるべく見るようにしていて、一応彼とは、敵対にならないようにしてるんですよ。なんで、今年はWindowsでもちゃんとJITは結構動くようにしたんですよね。 プレビュー3の段階で2では全然動いてなかったんですけど、3で。
まつもとひろゆき
まつもと
MSYSでの難しいバグもとったとかいう話を。
国分崇志
国分
そうですね。
何かこの前までは、ベンチマークを動かしているCIがあるんですけど、それでJITのバージョンだと結構ランダムで落ちてしまうみたいな、ぐちゃぐちゃのグラフだったんです。それが、最近直した段階で真っすぐになったので、それも直ってて、レースコンディションが1個、潰せた状態なんですけど、それを直したら直したで、潜んでいたバグが発覚して、何かやっぱりCコンパイラを起動してるんで、それをRubyのプロセスが起動しているプロセスなのか、JIT用のプロセスなのかっていうのを管理しないといけないんですよね。なおかつ、MJITのワーカーは、そのRubyの本体のスレッドのパフォーマンスに影響しないように、GVL外して動いてるんで、レースコンディションが起きちゃう場所があるんですよね。何で、適切に今ロックを入れようとしてるところなんですけど、そこがデッドロックするか、何か変なアクセスをしちゃうかっていうのに、結構バグが残ってて、そこをEric Wongとかが結構さわってくれてるんで、一緒に直してるところなんですけど。
まつもとひろゆき
まつもと
悩ましいとこではありますね。
国分崇志
国分
はい。
まつもとひろゆき
まつもと
コンカレント・プログラムを書くと必ず頭痛くなるです。
国分崇志
国分
もう、スレッドの頭が痛いところいっぱい受けてるっていう感じですね。
まつもとひろゆき
まつもと
なるほど。
国分崇志
国分
なんで僕としては、それが基盤が構築するところに結構注力してるつもりなので、その上でまた、MIRとかが速くしてくれるのであれば、どんどんウェルカムっていう感じですね。僕からしたら。
まつもとひろゆき
まつもと
まあ、MIRっていうか、あれだよね、RTL MJITの。
国分崇志
国分
そうですね、も、ありますね。
まつもとひろゆき
まつもと
なるほど。
国分崇志
国分
あれに関して言うと、もともとOptcarrotで大体僕のマシンで83fpsぐらい出るっていうのがGCCでの性能なんですけど、RTL MJITの性能で、僕が最近その本体で開発してるJITコンパイラも86fpsぐらい出るんですよ。
まつもとひろゆき
まつもと
大体同じぐらいに。
国分崇志
国分
来てるんで、今のところそんなに置きかえるメリットは単純にVMの設計が変わるぐらいでしかないと思うんで、今はそれだけだと置きかえるメリットがないと思うんですけど、1st tierのもっとコンパイルが速いJITコンパイラが入ってくれる分にはとてもいいかなとは思ってます。
まつもとひろゆき
まつもと
RTLよりはどっかっていうとMIRのほうに、こう。
国分崇志
国分
まあそうですね。
まつもとひろゆき
まつもと
Firefoxとかも二段階のJIT積んだりとかしてるし。
国分崇志
国分
Javaもクライアントコンパイラとサーバーコンパイラっていう、コンパイルの速いやつと遅いやつがあると思うんですけど、それがやっぱり適したアーキテクチャなのかと思っているので。
まつもとひろゆき
まつもと
なるほどなるほど。ありがとうございます。
何か、後半大分テクニカルな話になりましたけれども、じゃあ今後トレジャーデータ的には国分さんの扱いはどんな感じになってるんですか。
国分崇志
国分
僕は、去年ここで話した時点では、Railsアプリケーションエンジニアだったんですけど、本当はバックエンドのエンジニアとして雇われたかったんですよね。Rubyじゃなくて、バックエンドのJavaとかのシステムのほうに興味がちょっと移ってきたんですけど、「でもまあ君Rubyしか書けないよね」みたいなことで、1年くらいずっとRubyを書いてたんです。そのあとはバックエンドに移ろうとしてたんですけど、僕が前職でインフラとか、開発基盤をメンテしたのがあって、今それをやるようなチーム、SREっていうチームにいて、サービスをデプロイする基盤とかをつくっているっていう感じですね。
まつもとひろゆき、国分崇志
まつもとひろゆき
まつもと
それは、クックパッドもSREっていう名前使ってたの?
国分崇志
国分
クックパッドにもSREっていうチームあるんですけど、一応クックパッド的にはインフラをやってるSREっていうチームと開発基盤の開発環境のインフラをメンテするチームがあって、僕はその開発基盤の方だったので、SREではなかったんですけど、やってることは結構似ているっていう感じですね。
まつもとひろゆき
まつもと
なるほどなるほど。 じゃあ、トレジャーデータの中でも、Rubyの人として認知されている。
国分崇志
国分
そうですね。デプロイの基盤をやるとき、大体Rubyで書かれているサービスを保守していくことが多いですけど、ほかのインフラメンバーは、Rubyを書けない人がいたりするので、僕がそこを担当しています。
そこで、やっぱりRubyが安定してほしいんで、Rubyの開発をやってる中でも何かなるべく安定しないような破壊的変更がないかどうかを結構チェックしたりとか、CIを整備を整理したりとか結構してますね。
まつもとひろゆき
まつもと
希望が通ったら、何か古橋くんの弟子にっていう筋に。
国分崇志
国分
そういうような開発が一応希望ではあります。
まつもとひろゆき
まつもと
なるほど。
国分崇志
国分
来年あたりから移るような話もあるんですけど、今年中は、大体インフラのメンテです。
まつもとひろゆき
まつもと
わかりました。
今後ますますの御活躍を期待しておりますということで、ありがとうございます。じゃあ、新人は上がったということで、続きは。
国分崇志
国分
新人は上がっちゃいました。
まつもとひろゆき
まつもと
今度は次のアワードを目指していただければと、まだまだ用意しておりますので。
国分崇志
国分
そうなんですか。
まつもとひろゆき
まつもと
ありがとうございました。
国分崇志
国分
ありがとうございました。