RubyPrize2019 最終ノミネート者 辻本和樹/Kazuki Tsujimoto Interview

Placeholder image

何となく「パターンマッチ担当者:辻本」みたいな・・・・・・。


まつもとひろゆき
まつもと
どうもおめでとうございます。
辻本和樹
辻本
ありがとうございます。
まつもとひろゆき
まつもと
島根まで来ていただいて、ありがとうございます。
辻本和樹
辻本
いえいえ。
まつもとひろゆき
まつもと
今回はパターンマッチが評価されて選ばれたわけなんですけれども、多分、辻本さんのこと御存じない方も、読まれる方の中にはたくさんいらっしゃると思うので、まず直近の活動、特にパターンマッチを中心にお聞きしてもいいでしょうか?
辻本和樹
辻本
そうですね。直近だと、Ruby Prizeのノミネートの直接のきっかけになる活動として、Ruby 2.7で新しく入ることになったパターンマッチという言語機能の文法のデザインと実装をやらせていただきました。他には、以前からコミッターとして活動はしていて、例えばpower_assertっていうRuby本体に標準でバンドルされているライブラリの開発をさせていただいていたりしてますね。
まつもとひろゆき
まつもと
でも、ライブラリとしてのpower_assertとパターンマッチっていう言語機能そのものの拡張ってのは、デザインのこともそうですし、実装のこともそうですけど、やっぱりだいぶギャップがあるじゃないですか。その辺の背景を聞かせてもらっていいですか?
辻本和樹
辻本
両方とも、メタプログラミングといったRubyの持つ言語特性をうまく使うところからスタートしたっていう意味で共通しているかなと思いますね。まずパターンマッチについてですが、パターンマッチ自体を是が非でもRubyに入れたかったから開発に着手したという訳ではなく、メタプログラミングの機能を使うとライブラリレベルでもそれなりのものが作れるのが分かったので、それを公開したというのがきっかけです。[参考] Rubyってマクロがないですけど、method_missingとかを組み合わせることで、例えば変数のエミュレートっぽいのができたりするとか、そういった話ですね。一方、power_assertは、通常、他の言語とかでは、ASTトランスフォーメーション(抽象構文木変換)を使ってやることが多いと思うんですけど、Rubyにはその機能はないので、TracePointを使ってやっているんですね。
まつもとひろゆき
まつもと
なるほど。パターンマッチをライブラリとして提供するっていうのは、辻本さんの他にも海外の人がメタプログラミングを活用して作っているのとかがあったりして、みんなが欲しいと思っていましたよね。けれど、いざ言語の組み込みで実装しようと思うと明らかに大変じゃないですか。それを最後までやり切るっていうのはなかなかできることではないなと思ったんですけどね。
辻本和樹
辻本
ああ、そうですね。
まつもとひろゆき
まつもと
モチベーションとかありましたか?
辻本和樹
辻本
自分自身パターンマッチがあるといいなと思っていたということもありますが、やはりライブラリを公開したことをきっかけにパターンマッチについて折に触れて話をさせていただいた結果、例えばRubyKaigiの『Ruby Committers vs the World』とかでパターンマッチについての質問が来ると私が受けるようになっていって、何となく「パターンマッチ担当者:辻本」みたいな……。(笑)
辻本和樹
まつもとひろゆき
まつもと
コミッターの中でも、明確な決まりではないけど「私、これ担当」みたいなのありますからね。
辻本和樹
辻本
はい、何となくそんな感じの、暗黙のコンセンサスができ上がってきて、「あっ、これやらないとな」っていうふうにちょっと思ってて。あと、笹田さん(笹田耕一氏)に、Egisonをやられている江木さん(江木聡志氏)とかとパターンマッチをどういうふうに入れるかみたいなミーティングをセットアップしていただいたりもしまして。ある意味、外堀を埋められる感じでちょっとやらないとなっていう形になって、結局、最終的なところまでこぎつけられたかなと思ってますね。
まつもとひろゆき
まつもと
私自身は、パターンマッチについては、あれば欲しいなって思ってるのと、ライブラリで実現するよりは言語本体で実現すべきだろうなというのと、2つのことだけは思っていました。ただ、じゃあ、自分でやるかっていうと、なかなかそれもねって思ってて。だいぶ壁は高いなと思ってたところに、辻本さんがコアで実装してくださったんで、これはすごいなっていうふうに思ったんですけど、そういう背景があったんですね。
辻本和樹
辻本
そうです。確かに、皆さんから欲しい欲しいって声はずっと上がっていて、ただ、結局あんまり具体的に、本当に実用までいけるような提案っていうのは多分なかったかなと思っていて。たまたまうまく今回提案したような文法が閃いたので、よかったなとは思っていますね。
まつもとひろゆき
まつもと
すばらしいですね。本当にRuby 2.7の目玉機能と言ってもいい偉業だと思いますね。
じゃあ、辻本さんがRubyに最初に触れるようになったのと、それから、その後Rubyのコアコントリビューターとしてかかわるようになった経緯についてちょっと聞かせてもらってもいいですか?

このままだと自分のプログラミングスキルが失われちゃうんじゃないかな、って

辻本和樹
辻本
まず、そもそもRubyに触れたのがいつ頃かという話ですが、私が多分、大学1年生とかそのぐらいのタイミング、2000年代前半ぐらいだったんですけど。
まつもとひろゆき
まつもと
Rails以前ということですね。
辻本和樹
辻本
Rails以前ですね。多分、Rubyの1.6.8とか。何でRubyにそのタイミングで触れたかっていうと、何となく日常使いできるようなスクリプト言語を探していて、そのとき候補に残ったのがRubyとPythonだったんです。両者をちょっと触ってみたところ、Pythonってやっぱり純粋なオブジェクト指向っていうのとはちょっとずれてるな、Rubyのほうがしっくりとくるなと感じてRubyをメインで使い出したというところから始まってます。それが何でコミッターになったかというと、今、仕事でいわゆるSIer企業にいるんですが、このままだと自分のプログラミングスキルが失われちゃうんじゃないかな、っていうような危機感みたいなところがありまして。それで、意識的にコードに触れるようなことをやっていこうと、CRubyのソースコードに手を出し始めたっていうところがきっかけですね。なので、会社に入ってから、多分5年目とか6年目ぐらいでそういったことを始めてコミッターになった感じですね。
まつもとひろゆき
まつもと
それで、いろいろな機能を実装してしまうっていうのは、だいぶ、出世したんじゃないかなっていう感じがしますね(笑)。
辻本和樹
辻本
そうですね。
最初は本当にバグフィックス系のちょこちょことした修正ばっかりだったんで、思えば遠くに来たもんだという感じですね。
まつもとひろゆき
まつもと
すごいですよね。ありがとうございます。
じゃあ、辻本さん自身が、最初にプログラミングに触れられたのはどんな感じなんですか?

父に教わる形でBASIC に触れたのがプログラミングを始めたきっかけです。

辻本和樹
辻本
多分、最初に触れたのは小学生のときで。
まつもとひろゆき
まつもと
小学生!!
辻本和樹
辻本
父がITをやっていたので、家にノートPCがありまして。
まつもとひろゆき
まつもと
お父さんかぁ〜。
辻本和樹
辻本
はい。そうして父に教わる形でBASICに触れたのがプログラミングを始めたきっかけです。
まつもとひろゆき
まつもと
小学生。低学年ぐらい?
辻本和樹
辻本
多分、そうですね。3、4年生ぐらいかなと思います。
まつもとひろゆき
まつもと
3、4年生ぐらい!!だいぶ早いですね。
辻本和樹
辻本
そのPCって、1986年ごろにリリースされた東芝のJ-3100という本当に古いものなんですよね。当時から見ても10年ほど前に販売されていたような、機能自体は全然プアなPCです。面白いなとは思ったんですけど、やれることが限られるので別にずっとやってたわけじゃなくて。その後プログラミングを再開したのは、多分高校生ぐらいになってWindowsのPCを買ったときだったんで、ちょっと時間が空いています。それをきっかけにもう一回再開して、さっきの話でRubyをメインで使うように至るみたいな、そんな感じの経歴です。
辻本和樹
まつもとひろゆき
まつもと
なるほど。
そういう感じでプログラミングを始めて、Rubyに出会って、コミッターになって、とうとうパターンマッチまで実装してしまったっていう感じで来たわけですね。
普段、Rubyコミッターじゃない辻本さんは、差し支えない範囲でいいんですけど、どんな感じの生活をしていらっしゃるんですか?
辻本和樹
辻本
多分、世間一般的に「ああ、SIerの人だな」というふうに思われるであろう仕事をしていると思っていただいていいです。
まつもとひろゆき
まつもと
お客さんのニーズを聞き出して。
辻本和樹
辻本
そうです。聞いて、主にExcelとPower PointとWordと、そういうのを使って。
まつもとひろゆき
まつもと
もう業務として、コードを書くことはだいぶ減った時期ですね?
辻本和樹
辻本
はい。なので、仕事ではプロダクションコードとしてRubyを触るみたいなことはないです。でも、ログの解析とかでRubyを便利に使わせていただくっていうのは日常的にやっているんで、仕事とRubyの活動が全然切り離されているわけではないですね。
まつもとひろゆき
まつもと
もうマネージャーになりなさいみたいになる世代ですかね?
辻本和樹
辻本
そうですね。立場的には、もうプロジェクトのマネージャーとかっていうのをやっているような感じなので。
まつもとひろゆき
まつもと
なるほど。じゃあ、もう本当に二面性というか、ばりばりコードを書く自分と、仕事としてマネジメントもしてリソースアサインとかもするっていう。
辻本和樹
辻本
はい。低レイヤーまである程度わかるような人がマネージャーもできるっていうこともあって、その二面性が結構役に立っている部分はありますね。

「Ruby のパターンマッチは最終的にこうしよう」っていう完成度を上げるっていうのを、まずはやっていきたいなとは思ってます

まつもとひろゆき
まつもと
辻本さんは、今回偉業を達成されて、もうすぐパターンマッチもリリースされるわけですけども、今後、どういうことをしたいとかイメージはありますか?
辻本和樹
辻本
今回いろいろディスカッションもさせていただいて、Ruby 2.7にパターンマッチを入れるんですけど、まだ完成にはなってないと思っています。少なくともここ数年、数年も引っ張るかどうかは微妙かもしれないですけど、実際にRuby 2.7がリリースされてから、ユーザーさんのフィードバックも受けて、「Rubyのパターンマッチは最終的にこうしよう」っていう完成度を上げるっていうのを、まずはやっていきたいなとは思ってますし、フォーカスを当てていきたいなと思っています。
それ以降については、現時点でまだこうしたいなっていう思いはあまりないんですけど、コアをいじるのはやっぱり好きなので、例えばTracePoint周りとかの改善であったりとか、そういったところは引き続きいろいろやっていきたいなとは思っていますね。
まつもとひろゆき
まつもと
そうですね。現時点ではTracePoint、笹田さん1人で引き受けていらっしゃいますからね。私も、パターンマッチについては、配列の中からパターンにマッチする一要素を見つけるという機能についてどういうノーテーションがいいのか、っていうのを考えてるんですけども。そういうのも含めて、今後も、よろしくお願いします。
辻本和樹
辻本
はい、お願いします。
まつもとひろゆき
まつもと
パターンマッチがあったらいいなって思ってからでも10年はたっていると思うので。私にとっても、正直10年前にできると思ってなかったもので、すごい偉業を達成されたと思います。本当に感謝してます。

今日はどうもありがとうございました。
辻本和樹
辻本
ありがとうございました。
辻本和樹
糸柳茶蔵インタsビュー
Jeremy Evansインタビュー