何となく「パターンマッチ担当者:辻本」みたいな・・・・・・。
どうもおめでとうございます。
ありがとうございます。
島根まで来ていただいて、ありがとうございます。
いえいえ。
今回はパターンマッチが評価されて選ばれたわけなんですけれども、多分、辻本さんのこと御存じない方も、読まれる方の中にはたくさんいらっしゃると思うので、まず直近の活動、特にパターンマッチを中心にお聞きしてもいいでしょうか?
そうですね。直近だと、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に最初に触れるようになったのと、それから、その後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コミッターじゃない辻本さんは、差し支えない範囲でいいんですけど、どんな感じの生活をしていらっしゃるんですか?
そういう感じでプログラミングを始めて、Rubyに出会って、コミッターになって、とうとうパターンマッチまで実装してしまったっていう感じで来たわけですね。
普段、Rubyコミッターじゃない辻本さんは、差し支えない範囲でいいんですけど、どんな感じの生活をしていらっしゃるんですか?
多分、世間一般的に「ああ、SIerの人だな」というふうに思われるであろう仕事をしていると思っていただいていいです。
お客さんのニーズを聞き出して。
そうです。聞いて、主にExcelとPower PointとWordと、そういうのを使って。
もう業務として、コードを書くことはだいぶ減った時期ですね?
はい。なので、仕事ではプロダクションコードとしてRubyを触るみたいなことはないです。でも、ログの解析とかでRubyを便利に使わせていただくっていうのは日常的にやっているんで、仕事とRubyの活動が全然切り離されているわけではないですね。
もうマネージャーになりなさいみたいになる世代ですかね?
そうですね。立場的には、もうプロジェクトのマネージャーとかっていうのをやっているような感じなので。
なるほど。じゃあ、もう本当に二面性というか、ばりばりコードを書く自分と、仕事としてマネジメントもしてリソースアサインとかもするっていう。
はい。低レイヤーまである程度わかるような人がマネージャーもできるっていうこともあって、その二面性が結構役に立っている部分はありますね。
「Ruby のパターンマッチは最終的にこうしよう」っていう完成度を上げるっていうのを、まずはやっていきたいなとは思ってます
辻本さんは、今回偉業を達成されて、もうすぐパターンマッチもリリースされるわけですけども、今後、どういうことをしたいとかイメージはありますか?
今回いろいろディスカッションもさせていただいて、Ruby
2.7にパターンマッチを入れるんですけど、まだ完成にはなってないと思っています。少なくともここ数年、数年も引っ張るかどうかは微妙かもしれないですけど、実際にRuby
2.7がリリースされてから、ユーザーさんのフィードバックも受けて、「Rubyのパターンマッチは最終的にこうしよう」っていう完成度を上げるっていうのを、まずはやっていきたいなとは思ってますし、フォーカスを当てていきたいなと思っています。
それ以降については、現時点でまだこうしたいなっていう思いはあまりないんですけど、コアをいじるのはやっぱり好きなので、例えばTracePoint周りとかの改善であったりとか、そういったところは引き続きいろいろやっていきたいなとは思っていますね。
それ以降については、現時点でまだこうしたいなっていう思いはあまりないんですけど、コアをいじるのはやっぱり好きなので、例えばTracePoint周りとかの改善であったりとか、そういったところは引き続きいろいろやっていきたいなとは思っていますね。
そうですね。現時点ではTracePoint、笹田さん1人で引き受けていらっしゃいますからね。私も、パターンマッチについては、配列の中からパターンにマッチする一要素を見つけるという機能についてどういうノーテーションがいいのか、っていうのを考えてるんですけども。そういうのも含めて、今後も、よろしくお願いします。
はい、お願いします。
パターンマッチがあったらいいなって思ってからでも10年はたっていると思うので。私にとっても、正直10年前にできると思ってなかったもので、すごい偉業を達成されたと思います。本当に感謝してます。
今日はどうもありがとうございました。
今日はどうもありがとうございました。
ありがとうございました。