Masataka Pocke Kuwabara インタビュー
進行:まつもとゆきひろ委員長
英語吹替
※インタビューの内容を一部編集・補足しています。
最終ノミニー受賞おめでとうございます。
ありがとうございます。
Pockeさんのことをご存知ない方もいらっしゃると思うので、最初に簡単に自己紹介をしていただいてもいいですかね。
Pockeといいます。本名は桑原仁雄といいます。
今回のRuby Prizeには、Ruby3から同梱されているRBSという型周りのライブラリの開発に私が参加して、その実績が認められてノミネートされました。
RBSではどんなことをやっているかっていうのを簡単に話すと、主にRBSの言語自体というよりかは周辺ツールに手を入れていて、ちょっと前だとRubyのコードからRBSを生成するっていうところだとか、直近だとRBS向けのBundlerみたいなツールを作っていました。
今はちょっと無職の期間で、来月の中旬から仕事を再開するんですけど、基本的にはRailsを書くような仕事をしています。
ありがとうございます。
最初にプログラミングを始められたのは、いつ・どんな感じだったかお聞かせいただいてもいいですか?
多分中学生ぐらいのときに、JavaScriptをちょっと触ったんですけど…
ちょっと待ってください、中学生でJavaScript?
はい。
すいません、年寄りがびっくりしてしまいました(笑)
はい(笑)でもその時は本当に、静的なウェブサイトを自分のローカルで動かすとか、ホスティングされたブログサービスで動かすみたいなことしかしていなくて、プログラミングっていうよりは「見様見真似でちょっと書いてみた」みたいなレベルでしたね。
もうちょっとプログラミングっぽいことをやったのは、もともと高専にいたんですけど、その時の授業でC言語の授業があって、それに触れて「なんか結構自分に向いているな」と思って始めたのがきっかけです。
今ちょっとジェネレーションギャップでクラクラしています(笑)私が中学生のときはBASICとかだったから。
Web触るのは楽しいし、高専の授業でCをやって「自分は向いているかな」っていうふうに思ったという感じで、高専を卒業されたらソフトウェア関係の職業に就かれたんですか?
いや、その辺は結構ゴチャッとしていまして。
高専はもともと電気系の学科に通っていて、でも学校が合わなかったので3年次でやめてしまって、そのあとにプログラミングの勉強を独学でやったり基本情報技術者認定試験を受けたりして、1年ぐらい経ってからプログラミングのアルバイトを始めつつ通信制の大学に通って、そのあと就職して今に至る、みたいな感じですね。
そのキャリアっていうのは、ソフトウェア関係のキャリアではあったと。
そうですね。
なるほど。そうなんですね。
今は仕事はやめておられるんですけど、前の仕事はソフトウェア開発でRubyを使うこともあったんですかね?
そうですね。基本的にはずっと仕事はRubyをメインでやっていて、ここ最近はずっとRuby on RailsでWebアプリを作ったり。でも前職はTypeScriptでフロントを書いていることも結構多かったですね。
JavaScriptやTypeScriptはフロントに書いて、バックエンドはRubyで書くっていうのはよくある組み合わせではありますね。
じゃあ、PockeさんがRubyに最初に触れて使うようになった経緯というのは、どんな感じなんでしょうか。
Rubyは高専をやめた後くらいに使い始めて、その時には手元のマシンをLinuxで使っていて、そのマシンで使うTwitterのクライアントでmikutterっていうものが当時あって、それを使っていたんですけど、mikutterがRubyで書かれていて、mikutterのプラグインもRubyで書けるっていう特徴があって、「自分でも何かプラグインを書いてみたいな」って思ったのがきっかけです。
もう1世代前だと、例えばtDiaryっていうアプリのプラグインを書くためにRubyに入門しましたって人もいたので、『Rubyのアプリケーションのプラグインを書く』というのは実は入門用にはすごくいいのかもしれませんね。
「機能そのものはアプリケーションが提供してくれる、それをちょっと拡張する」っていう、「何か面白いことさせる」っていうモチベーションもあるのですごくいい。
(当時)どんなプラグインを書かれましたか?
多分何かをちょっと便利にするやつとか、あとは完全にジョークなやつだと…なんか、全然覚えてないですね(笑)
でも、結構ジョーク系のプラグインを何個か作ってたような気がします。
楽しいですよね。ああいうのね。
そうやってRubyに出会って、仕事もRuby on Railsのものが結構あるという状況の中で、結果的にRubyのコントリビュートをするようになったたわけですよね。それまでの経緯はどうだったのでしょう?
そうですね。
一番多いのが、RBSについてなんですけど、RBSはもともと松本宗太郎さん(@soutaro)という、去年のRuby Prizeの最終ノミニーに選ばれていた方が作っていて、宗太郎さんとは前にアルバイトしていたSideCI、今はSiderっていう名前なんですけど、宗太郎さんがもともとSideCIのCTOをやっていて、その時に宗太郎さんと知り合って、RBSを触り始めたのは私がSiderをやめた後だったような気はするんですけど、「何かやってるな」って思ってちょっと触ってみたっていうのがきっかけです。
最終的にはRBSに対するコントリビューションでRuby Prize最終ノミネートっていう形になるけども、宗太郎さんとの出会いがきっかけという理解でいいんですかね。
そうですね。RBSに関しては、元上司が面白そうなことやってるからちょっと見てみるか、みたいな感じで始めました。
RBSというのは、Rubyの言語の外でRubyの型を表現するための型表現言語だけれども、それだけではデータがないので、RBSで書いた型情報があって初めて型チェックができたりとかするわけです。
Pockeさんはその型情報をそろえるために非常に大きな貢献をしていただいたんですけども、そのモチベーションというのはRBSに関わってきたからということなのか、それとも別のモチベーションがあるんですかね?
一つは「なんか楽しいから」っていう単純な理由でもやっているんですけど、あとはWebのフロントでTypeScript書いていて凄く「体験がいいな」っていうのは思っていて、その体験をRubyにも活かせないかな、というのはずっと思っているところではあります。
そうですね。最近のTypeScriptで開発していると、JSコードか何かでポップアップがいっぱい出てきたりとか互換してくれたりとかして凄く体験が良くなっているのに、Rubyは昔ながらのエディタで打つだけみたいな感じになりがちなので、それを改善したいっていうのは非常にはよくわかるモチベーションです。
Pockeさんの尽力もありますし、あと松本宗太郎さんや、遠藤さん(@mametter)の尽力によって、例えばVSCodeで型を埋めるとか色々できるようになってますし、去年リリースのRuby3.1ではirbでもダイアログが出るようになったりとか、非常に改善されているのはやっぱり「負けちゃいかん」っていうか、「いいとこは真似しよう」っていう態度だと思うんですけども、そもそもデータがないと補完のしようもないので、pockeさんにそういうのをやっていただいたのは、本当にありがたいです。
Rubyで「ツールが大事」っていう講演をしたのはもう3年ぐらい前?になるんですけども、私がKeynoteで話すことに対して皆さんが非常によく反応していただいて、pockeさんも含めて、体験を随分改善されてきたのは本当にありがたいなと思っています。
今回Ruby Prizeの最終ノミニーということになったのですけれども、pockeさんの今後の予定とか抱負があれば聞かせていただけるといいなと思います。
RBS周りだと、今はBundlerみたいなやつでライブラリ管理をやっていたんですけど、そこがまだまだ未成熟なので、もうちょっとちゃんとしていきたいなっていう思いはあります。
例えばRailsアプリはgemがたくさん依存してると思うんですけども、gemのRBSを1個1個ダウンロードしてくるっていうのが、ちょっと前までは必要でした。
gemのRBS置き場みたいなものがGitHubリポジトリとして用意されているんですけども、それをgit submoduleで追加して、人間が依存関係を手で解決して必要なライブラリを列挙して、その設定をSteepの設定ファイルとかに書く、ということが必要で、結構大変だったんですね。
なので、そこをBundlerみたいな仕組みで、一気に全部解決できるようにするっていうことをここ半年〜1年ぐらいやってみました。
RBSについても、gemの依存関係を一つにまとめてSteepの設定ファイルに書き込んであげるっていう。
はい、そうですね。
なるほど。(開発の)規模が小さいと手でやってもあんまり問題ないけど、規模の大きなRailsアプリケーションみたいにgemが凄くいっぱいあるとなると、そういうのがどうしても欲しくなるって思いますね。それを今後も改善していきたいっていうことですね。
そうですね。
他に何かやってみたいこととかありますか?
そうですね。実際のRailsアプリケーションで型がちゃんとつくようにしたいっていうのは、ちょっと大きめの目標として考えています。
なので、そのためにライブラリの周りを整備したりとか、もうちょっとgem自体の型を書いていくとか、自動生成をした型と人間が手で書いた型をどうやって共存させていくかとか、色々と問題はまだたくさんあるので、それに手をつけていきたいなっていうのは思っています。
ありがとうございます。なんか、希望が持てそうな話ですね。
ちょっとテクニカルな話になりますけども、例えばActive Recordみたいなものに関してはどういうふうな感じのイメージがあるんですかね?
そうですねActive Recordに関しては、RBS Railsっていうプロジェクトを自分がやっていて、DBのカラムに対するモデルのメソッドみたいなものは自動で生成するようにしています。
なるほど。
ただ、そこで自動で生成してしまうと、実際はちょっと型が違うとか、アプリの方でメソッドを上書きしているみたいなケースがちょこちょこあって、そういうところで、現状だとあんまりまだサポートしきれていなさそうなので、その件をいい感じにできたら良いかな、っていうのはちょっと思っています。
アプリケーションが上書きしてるやつは見つけるのは難しいですね(笑)どうしたもんかなあ。後付だとどうしてもそういうことが起きてしまうわけです。
でも、これからもやることがいっぱいあって、それが解決したら、何か明るい未来が見えそうな感じがしますね。
ありがとうございます。
今回の受賞が励みになるといいなと思います。あと、余計なお世話かもしれませんけども、最終ノミニー取ったからといってRuby Prize取れないわけではないので(笑)2年連続受賞みたいな人もいますので。
ぜひ今後も活躍していただいて、今度はPrize本体を取られるといいなというふうに思っています。私だけが決めるわけではないので、何ともならないんですけれども、期待しています。
はい。ありがとうございます。
あとは、このインタビューを聞いたり読んだりされる方がたくさんいらっしゃると思うんですけれども、中にはpockeさんよりもさらに若い方は、(pockeさんを)ロールモデルみたいに思われる方もいらっしゃるんで、そういう方をイメージしつつ、何かコメントがあればお願いしてもいいですかね?
そうですね。「若い方に向けて」っていうのはなかなか今まで言う機会がなかったので…
大体一番若い感じでしたもんね(笑)
(笑)難しいんですけど…そうですね、私はどういうふうに成長してきたかって考えると、結構オープンソースに関わってきた方かなと思っています。それで良かった点としてはオープンソースに関わるっていうのは、年齢について相手方に意識されずに関わることができることが多いかなと思っていて、特に海外の人とかだと、私について何も知らないけど「なんかプルリク投げてきたな」みたいな感じになるので、事前の評価が何もなしに評価してもらえるっていうのは、ある意味励みになるし自信になってたかなと思っています。
なので、「ちょっとコードを読んでみるみたいなところから手をつけてみる」のは、自分はそうやってきたし、それが合う人には凄くお勧めできるんじゃないかなと思っています。
この世界は先入観みたいなものを無しに、おじいさんとか、男性・女性とか、そういう属性関係なしに関わることができるっていう、そういういいスタイルだと思いますね。
Rubyコミュニティっていうのは、最後の最後は私が強権を振るうことはたまにあるんですけど、それ以外はフラットなコミュニティだと自認しているので。何だったら私がポカすると「コミット権奪うぞ」みたいなことが平気で言われるようなコミュニティであって、それはそれで素晴らしいことだと思っているので、ぜひpockeさん以外の多くの人たちも、オープンソースコミュニティ、特にRubyの素晴らしいコミュニティで活躍していただければと思います。
今日は私の唐突な質問にも丁寧に答えていただいてありがとうございます。
さっきも言いましたけれども今後さらなる活躍に期待していますので、同じコミュニティの仲間としてよろしくお願いします。
はい。よろしくお願いします。