見出し画像

まつもとゆきひろと考えるデータ処理の未来 RubyからStreemへ〜Ruby開発者 まつもとゆきひろ(Matz)さん【データ×まつもとゆきひろ】

ソフトウェア技術者のまつもとゆきひろ(Matz)さんが開発したRubyは、1995年のリリースから現在まで世界中のユーザーに愛され、開発に利用されてきたプログラミング言語です。一般財団法人Rubyアソシエーション運用のもと、オープンソースの言語として2012年にISO/IEC規格を取得。クックパッドやスタディプラス、huluなどのメジャーなサービスの開発に採用されてきました。実は、primeNumberのtrocco®もRubyで作られたサービス。『Ruby biz Grand prix 2022』では、ビジネスコネクション賞を受賞しました。取り組みを評価いただいた勢いで審査委員長の“Rubyのパパ”まつもとゆきひろさんに対談をお願いし、Rubyとデータ処理の関係や可能性、ご自身や業界のこれからなどについてお伺いしました。

まつもとゆきひろさん(ソフトウェア開発者)
1965年大阪府生まれ、鳥取県で育つ。1990年に筑波大学を卒業し、システム開発会社の日本タイムシェアに入社。在籍中の1993年よりプログラミング言語Rubyの開発に着手する。1994年にシステム開発企業トヨタケーラムへ転職し、翌年Rubyを正式にリリース。コミュニティの拡大とともにRubyの認知度も上昇し、1997年にはネットワーク応用通信研究所 主任研究員(現在はフェロー)に就任し、島根県松江市に移住する。移住後もRubyの開発を続け、2012年に国産プログラミング言語初のISO/IEC規格としての承認を得る。現在は一般財団法人Rubyアソシエーション理事長のほか、多くの企業の技術顧問を務める。

■中学生が胸に秘めたプログラミング言語への想いとRubyの誕生

田邊:まつもとさんはRubyの生みの親として世界中で知られていますが、改めてRubyが誕生した頃のことを少しお話いただけますか。

まつもと:ぼくがプログラミングを始めたのは中学生で、当時はBASIC*1が動くポケットコンピュータというマシンを使っていました。40年以上前なので本体の性能はプア。実はBASICも機能制限版で、ユーザー定義関数もなければ変数は1文字だけ、かつプログラム全体で26個しか使えなかったんです。でも、最初のプログラミングだったので、プログラミング自体が制限がキツくて使いづらくて大変なものだと思いこんでいて。それが高校生になり、書店でPascal*2の本と出会ったことで、これまでの不満は使っている言語の都合で違う言語を使えば楽になるんだ、と気づいたことでプログラミング言語をつくることに興味を持つようになりました。1980年代前半の頃です。 

まつもとさんのポケットコンピュータ
Pascalの本

田邊:任天堂のファミリーコンピュータが出る前の話ですよね。 

まつもと:そうですね。当時のパソコンの言語はBASICだったので、自分のコンピュータでBASIC以外を使って開発しようと思うとコンパイラから用意しないといけませんでした。ソフトウェアはみな商品の時代なのでフリーソフトもありません。CP/MというOSが5万円、そこに乗せるC*3やPascalのコンパイラが20万円。高校生の小遣いでは買えないので、本を読みながらぼくに言語がつくれたらと夢想する日々でした。手が届かないとなると、気持ちって余計に盛り上がるでしょ? そんな想いを胸に秘めて大学でプログラミングの知識や言語の書き方を学び、就職先でプログラマーのスキルを身につけた後に、あるきっかけで生まれたのがRubyだったんです。

田邊:あるきっかけとは?

まつもと:就職した頃はバブル崩壊前でとにかく景気がよかったんです。配属先の社内システム開発チームでは新卒でも大きな裁量を持てたし、自由度も高くて環境は最高でした。でもバブルが崩壊した途端にチームは解散となり、よかったのか悪かったのか、ぼくはメンテナンス要員として留まることになりました。新規開発は禁止なので何もやることはなく、たまに来る電話に「再起動してください」と答える程度。ただコンピュータはあるし時間もあるし、マネージャーもずっとはいない。まあ、暇だったんですね。いっちょやってみようかとつくり始めました。 

田邊:ご自身の胸に秘めた想いがあり条件が整ったから、今こそやってみようと。その延長線上にRubyの誕生があったのですね。

まつもと:そういうわけです。 

田邊:とはいえ、言語の開発はそうそう簡単にできるものじゃないのでは、と思いますが。

まつもと:最近だとコンピュータサイエンス専攻の学生だと授業中に言語をつくることもありますし、特別センスが必要なものではないですよ。ちょっと勉強すればとりあえずのものはできますから。 

田邊:RubyはCでも実装されていますが、当時、全体で見ても1万数千行に収まっていたことに驚きました。できることの幅広さや生み出してきた価値やサービスの数から考えると、そんなにシンプルな構造だったのかと。

まつもと:そうですね。今は数十万行ありますが、最初のバージョンでは確かに17,000行ほどでした。基本部分はそう複雑ではないんです。パフォーマンスを向上したいとか、ユーザーの要求水準が上がる中で何十倍にも増えていったので。

■“うかつ”な開発者を助けてくれたユーザーコミュニティ

左:田邊、右:まつもとさん

田邊:そういった改良や成長にも大きな力となっているのがRubyのユーザーコミュニティですよね。最初はご自身でメンバーを集められたのですか。それとも自然発生的に?
 
まつもと:ぼくはだいぶ“うかつ”なプログラマーなんですよ。Rubyの公開にあわせてメーリングリストも始めたのですが、1通目が友達からの公開おめでとうメールで、2通目が早くもコンパイルエラーの報告。3通目にその対処のお返事をしたら、4通目はまた別のバグ報告……といきなりバグ対応の往復が続いてしまった。ネットニューズ*4で見て参加してくれた人たちが、ぼくのそんな様子を見て「自分でもできるかも」と思われたんでしょうね。だんだん、たくさんの人がすばやく対処方法を出してくれるようになり、自然と情報交換も活発になっていきました。

田邊:取り組みに価値を感じて、と本当なら言いたいところだけど、実はうっかりさんをみなさんがフォローしてくれたことで生まれたと。 

まつもと:そうそう。今だと「開発の民主化」なんてかっこいい言い方もされますが、当時プログラミング言語は使うもので作るものではないと考える方が大半でした。そんな時代に、面白そうなのに自分の手が届くところがいっぱいある言語だ、と感じてくれたのでしょう。 

田邊:その敷居の低さもあってか今では世界中に広がり、さまざまなサービスやアプリケーションがRubyで開発されています。開発者としてはどう感じていますか。 

まつもと:うーん。「ご自由にお使いください」というスタンスなので、特にぼくから縛るようなことはないです。イチローのお父さんのような感覚に近いかな。自分の成果じゃないけど、世界で成功して大活躍する息子を見ているような感じ。ぼくの作ったRubyが世界でがんばってるなって。

■シンプルな言語から生まれる大きな楽しみ

trocco®、データ転送部分のアーキテクチャ図

田邊:まさに気持ちは“Rubyのパパ”ですね。弊社のtrocco®というデータ統合自動化サービスもRubyを使っていますが、Rubyを選んだ理由は複数あるんです。たとえば、プロダクトの立ち上げ段階に素早いリリースとユーザーさんからのフィードバックを得たかったこと、Ruby on Rails*5などツールが豊富でいろいろな要素を組み合わせて開発できること、ユーザーや文献も多いので解決策が見つけやすく開発のスピードアップが見込めることなどです。また、メタプロ*6を使えば独自にDSL*7が定義できるので大人数のチームでも読み手にわかりやすくDRY*8なコードが書ける柔軟性も魅力的でした。こうしたRubyの魅力は、どうして生まれたんですか?
 
まつもと:そうですね。プログラミングの本質ってクリエイティブで楽しいものだと思うんです。でもコンピュータに正しく情報を伝える上での面倒さもあります。ぼく自身もプログラマーですから、Rubyはプログラミング上の面倒をなるべく減らし、楽しさにフォーカスできる言語にしたいと設計していました。 “面倒な作業はRubyに任せて応用を楽しめる”構造が、結果としてシンプルな見かけと作りやすい表現、開発期間を短縮できる生産性の担保へと繋がったのではと思います。 

田邊:primeNumberでも、開発過程でプログラムのボリュームは増えていますが、エンジニアのキャッチアップは速いです。言語の特性とも相まってなのかなと。 

まつもと:本来のRubyの楽しさが感じられるのは、アーリーステージやプロトタイプフェーズではあるんです。実行速度よりも使いやすさを優先した分、処理データが大量にある場合だとRustやGo*9には負けちゃいます。でもデータ処理の部分をCやC++で書いてパイプラインのコンピュテーションをRubyでやり、CやRustで書いた中をパイプラインが流れる構成にすれば、ボトルネックにはなりません。実際に多くの方がそうデータ処理されていますし、工夫の仕方もいろいろありますしね。 

田邊:データ分析やデータサイエンスの分野だとPython*10やR*11を使う開発者が多いですが、こうした分野とRubyの関係はいかがでしょう。Rubyは実行速度よりも使いやすさを優先したと仰いましたが、他の言語と役割分担するお考えですか。

http://sciruby.com/ より

まつもと:いえいえ、Rubyでデータ処理をするSciRuby*12 プロジェクトでは活発に開発活動が行われています。PythonのSciPy*13プロジェクトと比べると規模が全然違うのでキャッチアップの難しさはありますけどね。それにデータ交換フォーマットのApache Arrow*14を使うプロジェクトも立ち上がっています。Apache Arrowを通せば、たとえばPythonやRubyで処理したデータを別の言語に書き出すことができるので、エンジニアは各自得意な言語で記述することができます。データ交換のリンガフランカ、いわば共通言語化する取り組みですね。そのコミュニティリーダーはRubyコミュニティの日本人なので、データ交換という新たなアプローチとしてRubyコミュニティでも積極的にサポートしています。 

田邊:なるほど。そのお話からすると、データの分野でもRubyが選ばれてほしいというメッセージと捉えてもいいんでしょうか。

まつもと:難しいところですね。残念ながら、エンジニアが言語を選ぶ時は純粋な技術視点では決まりません。機械学習やデータサイエンスにPythonの人気が高いのは事実ですが、それは必ずしも言語の特質ではないと思います。たとえば、先輩や研究室がPythonを使っていたからというのはよくあることだし、開発に適した言語か否かは重視されにくい。でもそこは自分たち言語の開発者にはコントロールできないので、精一杯いいツールを提供し、Rubyを使わない理由を減らすことに注力していくだけです。 

田邊:言語そのもので言うと、汎用言語という立ち位置なのですね。
 
まつもと:プログラミング言語はわりと簡単に汎用言語になるんです。ぼくたちコア言語の開発者も汎用言語としての制御を常に考えていますしね。そこから分野に対する得手不得手が出るのは、言語の機能ではなくライブラリの量です。確かにRubyコミュニティには、Ruby on Railsの存在もあってWeb開発者の方が多いですし、ライブラリが豊富なのでWeb分野の開発効率が上がる傾向が強いです。同じようにPythonはデータサイエンスに便利な記述ツールがあるので開発者も多く、ライブラリが豊富になる傾向があるというだけです。設計時からWebを意識したPHP*15のようなスクリプト言語ももちろんありますが、あくまでRubyは汎用言語として考えています。 

■もっといろいろな分野でRubyを活用してほしい

田邊:昔から変わらないテーマではありますが、昨今は特にデータをビジネスに活用しようという潮流がありますよね。そんな時代に活動するRubyエンジニアに向けて、データと付き合う時のアドバイスなどはありますか。

まつもと:二つあります。まず、データ分野のみなさんもデータ構成や大量のCPSデータ*16の前処理などにRubyを積極的に使っていただけたらと思います。Ruby bizグランプリの参加作品もどうしてもWeb分野が多くなるので、ぼくとしては新しい可能性を切りひらくチャレンジは応援していくつもりです。ですから、primeNumberさんがデータ処理ツールで参加された時は内心「やった!」と喜んだんですよ。ぜひいろんな方にRubyの応用範囲やアプローチを広げるチャレンジをしてみてほしいです。
もう一つは言語の選び方です。ソフトウェア開発では、処理速度や特性よりも雰囲気で技術や言語を選びがちです。コミュニティ内ではパフォーマンスに影響しそうな点はとにかく計測しなさいと伝えていますが、みなさんにもデータに基づいた技術的判断をしてほしいですね。 

田邊:データ交換という新たな観点でもRubyのコミュニティに動きがあるというお話が先ほどありましたが、そちらはいかがですか。
 
まつもと:データ処理分野において、Rubyが言語的に不向きだという要素はあまりないと思います。ツールの少なさとコミュニティにWeb以外の応用が少ないだけなので、発展する余地はあります。Rubyの進歩って、コミュニティ内でここがもっと便利になってほしいという発言がきっかけになることが多いんです。なので、primeNumberさんからもRubyの気になる点や改善してほしい点をぜひフィードバックしてください。データ処理分野から「この処理が遅い」「同じ処理でもPythonのほうがずっと速い」なんて投稿があれば、開発コミュニティが一生懸命改善すると思いますよ。データ処理はもちろん機械学習に取り組む方たちからも、活発な提案をいただけるとありがたいです。

■まつもとさんが考えるこれからのこと

田邊:60歳になったらRubyの開発は一旦お休みする計画があるとどこかで拝見したのですが、言語デザイナーとして新たな言語の設計をするご予定などは? 数年前にはStreem*17をリリースされていましたね。

Streem開発の過程を紹介する書籍『まつもとゆきひろ 言語のしくみ』(日経BP社)

まつもと:汎用言語はたくさんあるのですが、特殊な目的の言語はこれから作る余地があるんじゃないかと思って、データストリームを管理するための言語、Streemを作りました。でもやっぱり、新しいものをゼロから作るのはわりと大変なんです。Rubyもそうで、自分だけで作っている時は途中でやめても誰にも迷惑はかからないけど、その時でも技術的な困難は山ほどありますから。コミュニティのお陰でその時代を抜けられたとはいえ、長い開発の中でやろうと思ってできなかったこともたくさんあります。Streemも出した直後からRubyの仕事が忙しくなってあまり触れられてないですしね……この先は乞うご期待って感じです。
ちなみに、LinuxというOSを作られたリーナス・トーバルズさんは、1990年代からその開発を続けながら、2005年にもGitというソフトウェア管理ツールをリリースしています。1人の開発者が世界中で使われるツールを2つも作るのはめったにないことです。そう考えると、ぼくは世界中で使われているツールをまだ1つしか作ってないから、2つ目もできるといいなと。そんな未来の目標も心の片隅にはあります。

田邊:2つ目をつくる目標があるとは! すばらしいですね。 

まつもと:思うだけはね(笑)

田邊:今後が楽しみです。未来のお話にも関わるかと思いますが、Rubyとソフトウェア業界の10年後はどうなるとお考えですか。
 
まつもと:残念ながら、僕は長期予測をしないことにしてるんです。この業界って本当にわからなくて、10年前を考えるとこんなに進歩するとは思わなかったということが多い。コンピュータが人間顔負けの絵を描く時代が来るなんて、みんな思わなかったでしょう? でも逆に、OSなどソフトウェア開発の基本環境は30年前から変わっていません。30年一緒なら次の10年もそうだろうとも思うわけです。つまり、何を言ってもはずれる気がするので、先はあまり考えずにその場その場で最適解を選ぶようにしています。ただ、コンピュータの能力とできることが増えるのは間違いないと思いますから、自分の仕事が楽になる方向でそれを最大限に利用しつつ、自分の仕事がなくならないようにバランスを取りながら生きていきたいです。楽になり過ぎると仕事がなくなっちゃうのでね。

田邊:ありがとうございます。最後は、取材したみなさんに伺っているご質問です。まつもとさんにとってデータとはどんな存在ですか。

まつもと:判断とか決断をする時の立脚すべき基礎ですかね。それから、KPIってあるでしょう。Key Performance Indicatorのことです。ぼくはいろんな会社の技術顧問をしているので、ソフトウェア開発のKPI設定についても相談されることがあります。でもその時には、ソフトウェア開発とKPIはなじまないものだと答えています。成果指標である以上は仕事の進度に沿って伸びる数値が必要になりますが、開発にはそういう数値はありません。その理由の一つは、作業の粒度が均一でないこと。たとえばタスクで数えたとして、1行書くのが1日でできる時もあれば一週間かかることもあります。そこで無理にKPIに設定してしまうと、必要以上に細かくタスクを切るといったモラルハザードが起きます。ある行の一文字の間違いを探すのに3カ月かかったということは開発ではよくありますが、生産性で見ると「一文字に3カ月?」という認識になりますよね。だから、それを隠すために大量な書き加えやコピペなどのモラルハザードがさらに引き起こされていくのです。
この業界だけではないでしょうが、現実には誤って使われているデータがとても多いです。データは本当に大切だけど、正しく使わないと開発とKPIのようにかえって悲劇を招いてしまう。ぼくは、データが持つそんな怖さも意識しておくべきだと思います。

Rubyとデータ処理の話題からユーザーコミュニティとサービスを育てる手がかり、Rubyが秘める可能性、そしてまつもとさんの思いがたくさん伺えました。エンジニアとして、サービスの担い手として勉強になることが随所に散りばめられ、Rubyが楽しいと感じられる理由も垣間見ることができた気がしています。Rubyに興味ある方、そしてRubyを使った開発に興味あるみなさん、ぜひRubyアソシエーションのWebサイト(https://www.ruby.or.jp/ja/)やtroccoⓇ(https://trocco.io/lp/index.html)の紹介もご覧ください。

(註)
*1 BASIC:beginners' all-purpose symbolic instruction code(初心者向け汎用記号命令コード)を意味するプログラミング言語。1964年に開発され、1970年代から90年代頃までプログラミング初心者に広く利用されてきた。代表的な派生言語にVB(Visual Basic)やVBAがある。
*2 Pascal: 1970 年にスイスで発表された教育用プログラミング言語。名前は哲学者のブレーズ・パスカルから。
*3 C:1972年にアメリカでUNIXの移植性を高めるために開発されたプログラミング言語。C++やJava、スクリプト言語のJavaScriptやPHPなども影響を受けており、現在も業務用開発や組み込みシステムなどに利用されている。
*4 ネットニューズ:複数のサイトが協力して作っていた不特定多数に向けた情報交換のための場。各サイトの運営者が配信されたメッセージを管理し、協力サイトへの共有と配信を行っていた。
*5 Ruby on Rails:Rubyを応用したWebアプリケーション開発のためのフレームワーク。アメリカで2007年にオープンソースソフトウェアとして発表され、商用Webサービスでも多く採用されている。 https://rubyonrails.org/
*6 メタプロ:メタプログラミング(metaprogramming)。プログラミング技法の一種で、別のプログラムを出力するためのプログラムを書くこと。手書きソースコードや手書き作業の重複を避けるなど、プログラムをシンプルにする工夫の一つにもなる。
*7 DSL:特定作業の実行や問題の解決のためにつくられたコンピュータ言語。特定用途のプログラミング言語やマークアップ言語、モデリング言語などを指す。
*8 DRY:「DRY (Don't repeat yourself/繰り返しを避けるべし) の原則」。プログラムの透明性や変更しやすさを保ち、不一致を生む可能性を減らす考え方としてコンピューティング分野で重視される。
*9 RustやGo:Rust_Mozillaの公式プロジェクトとして開発されたオープンソースのプログラミング言語。安全性、速度、並行性に注力している https://www.rust-lang.org//Go_ 2009年にGoogleがリリースしたオープンソースのプログラミング言語。Google社内でのソフトウェア開発の生産性や拡張性のために開発された https://go.dev/
*10 Python:1990年頃から公開されているプログラミング言語。優れた科学技術計算ツールとして機械学習やデータサイエンス分野の開発で人気を得る一方、汎用言語としてシステム管理やツール・アプリケーション開発、Web開発などにも広く利用されている。 https://www.python.jp/
*11 R:1993年にリリースされたオープンソースの統計解析向けプログラミング言語 https://www.r-project.org/
*12 SciRuby:http://sciruby.com/
*13 SciPy:https://scipy.org/
*14 Apache Arrow:データ交換フォーマット。C, C++, C#, Go, JavaScript, Python, R, Ruby, Rustほか多くの言語に対応している。 https://arrow.apache.org/
*15 PHP:Hypertext Preprocessor。Web開発に適したオープンソースの汎用スクリプト言語。HTML に埋め込むことができ、サーバーサイドで動的なWebページを作成する機能を多く備える。 https://www.php.net/
*16 CPSデータ:Cyber-Physical System。現実世界(フィジカル空間)にある多様なデータをセンサーネットワークなどで収集し、コンピュータなどの仮想空間(サイバー空間)で大規模データ処理技術等を駆使して分析/知識化を行い、創出した情報/価値データ
*17 Streem:「日経Linux」連載として2014年4月から2年8カ月をかけて開発されたデータ処理専用言語。開発の過程は書籍『まつもとゆきひろ 言語のしくみ』(日経BP社)にまとまっている。

文 木村早苗
写真 HARAデザイン