まつもと

では、RubyPrizeの最終ノミネート者としてインタビューをさせていただきます。

ジェレミー

よろしくお願いします。

まつもと

ではまず最初に、ノミネートされてどんなお気持ちですか?

ジェレミー

選ばれたことを大変幸栄に思っています。最終ノミネート者に選ばれて、すごくワクワクしていました。他にノミネートされた皆さんは、全員Rubyにすごく貢献されていたので、その中に私も入ることができてとてもハッピーでした。

まつもと

キーワード引数を含めた最近の活動についてお聞かせください。

ジェレミー

そうですね。Rubyに深く関わりはじめたのは最近のことで、RubyKaigiが終わってからですね。特に、バグの報告をしていました。それから遠藤さん(遠藤侑介氏)がコミッターとして推薦してくださって、それをまつもとさんが許可してくれて、とても喜びました。以前からRubyコミッターになって、もっとRubyに携わりたいと思っていました。コミッターになった当初はRubyのバグに焦点をあてていました。Ruby管理用のRedmineがあるのですが、手を付けた時は約1,400件のバグがありました。バグの多くはとても古いものだったり、陳腐化したものですが、既に修正されているものや、クローズされた案件もあって、修正はそんなに難しくはありませんでした。そこで、修正できるバグは修正して、既に修正されているバグや古いバグをクローズしました。それが、たしか8月下旬頃なので、翌9月の開発者会議でキーワード引数に関する変更をまつもとさんが許可してくれました。

9月に入ってからは、ずっとキーワード引数の変更作業を行い、最初のパッチを作りましたけど、あまり包括的なものではありませんでした。今日の会議で内部関数が単純化してきていると言っていた人もいましたが、それがどれぐらい本当かは私にもよくわかりません。内部関数の中でも、複雑なものも多く、効率化のために処理が違っているものがあります。だからあるものは最適化され、異なる引数を取ります。だからRubyのメソッドを呼ぶ際に、全部同じC関数で処理できるわけではありません。C関数が沢山あって、それぞれ処理は違うし、defで定義されたメソッドは内部ではdefine_methodで定義されているメソッドと違う呼び方をするし、Cで書かれた関数、またSymbol#to_procで定義されているprocなど、元々考えられていなかったケースが沢山あって、キーワード引数が使われるケースを一つずつ全部検討する必要があって、それでRuby 3.0でやりたいことできるだけ後方互換性のあるやり方でRuby 2.7に展開することが課題でした。実際に使われている多くのケースについて、Ruby 3.0で壊れたり挙動が変わる場合は、Ruby 2.7ではメソッド呼び出し時に警告を出すようにしました。これが結構なチャレンジでかなり時間がかかりました。その二つのこと以外私がやっていたのは、グロバル変数$SAFEと、taint/untaintの削除に関する変更です。Rubyの組み込みクラスとライブラリの多くがそれを使っているためこの作業もかなり時間がかかりました。$SAFEは4つのレベルからスタートし、2つ、それから一つのレベルに削減され、もう完全削除に向かっているが、そうすると変更が必要な場所が非常に多くありました。特に標準ライブラリの場合、多くのライブラリがgem化されていて、gemの場合taintとuntaintが必要な古いバージョンをサポートする必要があるため大変でした。taintはそれほどでもありませんが、とくにuntaintの場合、untaintした値を返したいのですが、Ruby 2.7では警告が出てしまいます。でも古いバーションでは警告が出ないようにして、ただuntaintしておきたい。そういった後方互換性の問題というのはかなりのチャレンジです。これは私がコミッターになってから取り掛かってきた3つの大きな課題です。

まつもと

そうですね。コミュニティの関心を引くためにはRubyには進歩が必要ですが、こういう難解な問題もありますね。次の質問です。Rubyにどうやって出会ったのですか?

Jeremy Evans
ジェレミー

そうですね。Rubyを使い始めたのは2004にRailsが出て間もない頃でした。主にコマンドラインでRubyを試す前に、PHPとPythonを少しやったことがあって、その内Rubyについて耳に入りました。皆がRubyはすごく簡単だと言っていて、それでRubyを始めて試してみた時、私を惹きつけたのは、Pythonでは簡単にできないことや、当時は扱うことすらできなかったことが、Rubyでは非常に簡単にできたことでしたね。Rubyではbegin, rescue, ensureを組み合わせて使うことができます。PythonにもRubyのbegin, rescue, ensure相当のものはありましたが、rescueとensureを組み合わせて使うことはできませんでした。これはPythonで“with”文ができる前のことで、Rubyのようにトランザクション処理のようなことを行うこともできませんでした。Rubyだとブロックとensureを使うことで、トランザクションをオープンして、処理が終わったら確実にクローズすることができます。当時のPythonでするには非常に難しいことだったのがRubyでは簡単にできました。Rubyはコード書くという作業自体を単純化してくれて、もっと読みやすくもなりました。それが嬉しくて、書いていたコードを全部Rubyで書き直しました。私は政府の部署で19年働いていますが、その当時はプログラマーは私しかいませんでした。それでその時からコードは全部Rubyで書いて、今内部では完全にRubyで書かれたいくつもの大きなシステムがあります。私たちの部署は完全Rubyで自動化されています。それは結構すごいことだと思っています。今、私ともう一人のプログラマーしかいませんが、結構大きいプログラミングオペレーションのサポートを行っています。2人だけで大きいプログラミングオペレーションを支えて、機能性を保ち、リクエストがあればすぐ機能を追加できることはRubyの力の表れだと思っています。そういった点では他のどの部署よりも早いと感じています。そしてその原因はやはり我々はRubyを使っていて、他のところはJavaやC#等使っているところだと思います。

まつもと

プログラミングをどうやって始めたのですか?今、おいくつでしたっけ?

ジェレミー

びっくりするかもしれませんが、最近40歳になりました。

元々大学では数学を専攻していて、会計の勉強もしていました。ただ、その時点でプログラミングを自分のやりたい仕事とは考えていませんでした。今も働いている政府部署の監査人として採用されましたが、正直言って、あまり好きな仕事ではありませんでした。その後、コンピューター部門に空席ができ、私はパソコンのサポート経験があったので、そこで働き始めました。どんどん責任が増えていき、サーバーのサポート、その当時は全部Windowsのサーバーでしたが、ファイアウォールの構築も命じられて、UNIXの勉強をしてファイアウォールのメンテナンスを行っていました。そして、2003年に部署のウェブサイトの管理を任されましたが、それをするにはやはりプログラミングを習得する必要がありました。ウェブサイトが結構大きく、データベースの動作に支障が出ないようにしないといけなかったからです。それが初めてのプログラミングの経験で、その当時はPHPしかやっていませんでした。それから、少しの間Pythonを使っていて、プログラミングを始めて何年か経たないうちにRubyと出会い、以来Rubyをずっと使っています。プログラミングが楽しくて、問題解決するのが好きで、Rubyがそれをもっと楽しいものにしてくれます。これまでに使ったどのプログラミング言語よりもそうです。

まつもと

他のプログラマーと違って、幼いころではなく、大学を卒業してからプログラミングを始めたということですね。

ジェレミー

そうです。プログラミングを始めたのは23歳になってからです。幼いころからプログラミングをしながら育った人にとってプログラミングはもっと自然にできるかもしれません。私はそうだったかはよく言えませんが、ここまで来ることができて幸せです。

まつもと

そうですね。私も「卒業してからプログラミングを始めるのは遅いですか」とはよく聞かれます。

Jeremy Evans
ジェレミー

私は全く遅くないと思います。学校を卒業してからでも遅くないと思いますし、十分成功できます。ですから、どの年齢の人でもプログラミングをまだやっていない人で、プログラミングに挑戦してみたい人はやってみればいいと思います。プログラミングは、個人の仕事を自動化するのにも使っています。実際Rubyを始めてから個人用の会計システムを作りました。会計の勉強したこともあって、最初はQuickenを使っていましたがQuickenはWindowsでしか使えません。当時、私はWindowsでしか使えないプログラムはあまり好きではなくて、自分用の会計システムを作るときに、最初はRailsを利用したので、とりあえずそれでWindowsから逃れることができました。私が今使っているソフトのほとんどがオープンソースソフトウェアです。オープンソースソフトウェアを使って、自分でプログラミングできるようになったら、開発にかかる時間が減ってきて、他にやりたいことに時間を使うことができるようになりました。プログラマーではない人たちが、ずっと同じルーティンワークを繰り返しているのをみたことがあって、もしプログラミングができたら自動化ができて、長期的に見れば時間の節約になるのにな、と考えるときがあります。

まつもと

では最後の質問ですが、普段はどんな生活をしていらっしゃるか、支障ない範囲で教えていただけませんか?

ジェレミー

子どもがいるので、朝起きて子どもの準備を手伝います。子どもの手伝いが終わったら、仕事に行きます。残業はほとんどしないです。7:30ぐらいに出社して、16:00に帰宅します。

まつもと

ご自宅で働いているのですか?

ジェレミー

いいえ。政府の部署で働いています。そこでITマネージャーを務めています。プログラミングの業務とは別に、小さいチームの担当をしています。プログラマーとパソコンやサーバーを監視するサポートスタッフを担当しています。マネージャーという肩書ではありますので、そこまで好きな仕事ではないけど真面目に働いています。

私が本当に今も楽しんで続けているのは、プログラミングの部分であって、もう一人のプログラマーの仕事のチェックやもっと高度なプログラミングは自分でしています。最近は機能の追加をあまりやっていませんが、利用者から機能追加のリクエストがよく出ますので、それをもう一人のプログラマーが担当し、私は管理を行っています。

あとはRubyのコミッターとして、Rubyの改善にかなり時間をあてています。

まつもと

これまでのRubyへのご貢献に本当に感謝しています。10年前のRubyKaigiで講演していただきましたね?

Jeremy Evans
ジェレミー

そうですね。特にライブラリの改善にだいぶ長く携わってきました。Rubyにはじめてリクエストを出したのは確か2009年です。splat()を使用して配列を引数に展開する際に、直接to_aを呼ぶ代りに、単項マイナスや単項プラスのような単項splatメソッド(@)を用意しておいて、それを呼ぶようにするというフィーチャーリクエストでした。結局、そのリクエストは却下されましたが、5~6年間あのリクエストはオープンのままでした。それから2回目は、その当時速度が遅かったDateライブラリに関するリクエストをした時で、最終的にふなばさんが私のアイディアを取り入れて1.9.3のコードを書き換えたので、その後Dateのパフォーマンスが良くなりました。その後パッチを提出しながらRubyにもっと関わり始めました。

コミッターになるまでは外側からRubyに関わっていました。コミッターになってからできるだけRubyの改善ができるように活動しています。

まつもと

そうですね。もっと前にコミッターにするべきでした。

ジェレミー

それはどうでしょうね。もっと前だったら準備が多分足りていなかったかもしれません。Cのコードを書く経験もあまりなかったので、時間がかかったのが良かったかもしれません。コミッターになるための経験が得られたから良い選択だったと思います。結局うまくいきましたので本当に良かったと思います。

まつもと

ありがとうございます。改めておめでとうございます。

ジェレミー

ありがとうございます。まつもとさん。

糸柳茶蔵インタビューへ
辻本和樹インタビューへ