Tech Racho エンジニアの「?」を「!」に。
  • ライフ

Ruby: "今この時期に"プログラミング言語の進化に参加することについて(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

日本語タイトルは内容に即したものにしました。写真はすべて元記事からの引用です。

Ruby: "今この時期に"プログラミング言語の進化に参加することについて(翻訳)

前回の記事もご覧ください

毎年12月25日には、Rubyの新しいバージョンがリリースされます。2022年にはバージョン3.2に達しました

私は2018年(Ruby 2.6)以来、毎年Rubyのリリース後にRubyChangesで網羅的なchangelogを公開しています。ここには、Ruby言語の主な変更点の説明に加えてコード例やリンクも盛り込まれています。

これは決して小さな作業ではなく、たいてい数週間もしくはそれ以上を要しています。また、新機能や振る舞いやドキュメントの小さな不具合に気づいて修正することもしばしばです。

これは、私がRuby言語の開発に携わる形のひとつにすぎません。

昨年、私はこうした関わりについていくつかの記事にまとめました。これらの記事では、私がやっているchangelogのまとめ作業やその作業で落胆した話、かつて私が言語のあり方や成長について落胆した後にコントリビュータとして参加し、最終的にRubyコアチームの一員になった話を書きました。

  1. プログラミング言語のChangelogを書くだけで学べること(英語)

  2. プログラミング言語の進化を追いかけて個人的に得たこと(英語)

  3. プログラミング言語の進化: それでも私たちは飛び続けている(英語)

あれから1年が過ぎました。

そして先週、新たにRuby 3.2のchangelogを公開しました(1か月遅れですが事情はお察しください)。本記事では、私とRuby言語との関わりを振り返ることでこのchangelogに花を添えたいと思います。

ただし(見え見えの)ひとひねりを加えています。

🔗 私が過ごした2022年

上の記事を公開した後、別の個人的な趣味プロジェクトに少しばかりかまけた後に、Rubyを書くことを深く追求する決意を固めていました。

私はさまざまなプランやアイデアを温めていました。その中には本の執筆計画までもが含まれていたのです(前回の"changelog"記事で堂々とお知らせしています)。しかしそのときの私は、最も差し迫っている2つの活動に直面していました。1つは、私が手掛けているバージョン単位のchangelogをより高度なものにする作業、もう1つは、Rubyのドキュメント作成プロセスのコントリビュータ・レビュアーとしていっそう積極的に関わることでした。

もとより楽な仕事だとは思っていませんでした。Rubyのドキュメントを整備する初期段階で、ドキュメントの品質の目標や方法論についてコアチームの他のメンバーと熱心に議論を重ねていて、これについて公開の場で誠心誠意議論する予定でした。

あれは2月23日の夕方でした。

その翌朝5時に、私は妻からの電話で叩き起こされました。ロシアが8年間続けてきた「ハイブリッド」戦争がたった今、全面的な侵略に転じたというのです。ロシア軍が多方面から侵入して、私の住む街も含む多くの街が無差別爆撃され、(私の住む街も含めて)それらの街のいくつかは遠からず陥落してもおかしくないような状況でした。

奇しくも、そのときの私はクレタ島に数日滞在していたのです。

航空機2便、列車1便、地下鉄1便、そしてタクシー2台を乗り継ぎ、相当な費用をばらまき、かなりの強運も使い、たっぷり50時間かかってようやく家族のもとに駆けつけました。到着するまでの間、さらに多くの街が爆撃されたという続報も入り、妻は子どもたちを連れて地下室に避難したと苛立った声で様子を伝え、自宅に着いてもそこがまだ前線に飲み込まれずに済むかどうか、そもそも自宅が残っているかどうかすら定かではありませんでした。

家族との再会直後。この写真は他の記事で何度も公開しているが、この時期の他の写真はほとんど公開していない。

家族との再会直後。この写真は他の記事で何度も公開しているが、
この時期の他の写真はほとんど公開していない。

ありがたいことに、ウクライナ軍は敵におめおめと街を占領させるようなことは決してありませんでした。

自宅と地下室を往復する生活が2週間続いた後、私の地区が最も激しい空爆を受けた夜、ついに私たちは避難を決意しました。ボランティアからの支援を受けつつ、今度も強運に恵まれて、家族一同はポルタヴァ(Poltava)に移りました。悲観的に見れば戦場から十分離れているとは言えないかもしれませんが、それでも今はこれでよかったと思えました。

翌日私は、何らかの人道支援のボランティアに参加したいと思ってハルキウに戻り、ボランティアの口はすぐに見つかりました。

春の間、私は食料や医薬品などの必要な物資を徒歩で自分の地区全体に運搬して回りました。1日4〜5時間はかかりましたが、そうしている間は自分が役に立ったという実感がありました。

私の「お得意さんたち」。需要の高い時期には週に50〜60件は回った。

私の「お得意さんたち」。
需要の高い時期には週に50〜60件は回った。

街は定期的に砲撃されていましたが、あの最初の2週間に比べれば、私の住むところへの砲撃は激しくありませんでした。1〜2日に一発かそこらのロケット弾が飛んでくるだけで、その日に攻撃を受けた家屋に住んでいた人以外は誰も話題にしませんでした。

春の間はほとんど、以下のように前線がかなり接近していました。こんなに近かったとは。

2022年4月頃のDeepStateMap。3月のデータはないが、3月はもっと近かったと思う。

2022年4月頃のDeepStateMap
3月のデータはないが、3月はもっと近かったと思う。

3月末までには、戦争前にやっていたソフトウェア開発業務を再開できる程度には気を取り直しました(私の所属する会社の名誉のために言っておくと、ありがたいことに、私がろくに仕事できない間も給与の大半を支払い続けてくれました)。

その間の私は、"Ruby Evolution"プロジェクトを何とかして完成させようとしていました(今となってはそこまでのめり込んだ理由は思い出せませんが)。この当時は、空襲警報が発令されては近所で爆発が起き、マリウポリが殺戮部隊によって陥落し、世界中の指導者たちがこのデリケートな状況について議論を繰り返しているという状態でした。そんな中で、私はよりによって「Hashクラスに新しいメソッドが出現するタイムラインはどう表現するのがベストなのか」という課題を自らに課していたのです。

そして6月に入ってようやくRuby Evolutionを完成させ、公開しました。その頃のハルキウは多少なりとも安全度が増していました(前線までの距離が10kmから15kmに広がりました)。長女もボランティアに復帰し、妻はハルキウとポルタヴァを往復しながら下の2人の娘の面倒も見つつ、さらにハルキウ人権保護グループ(Kharkiv Human Rights Protection Group)と共に戦争犯罪の記録活動に従事していました。

8月以降、私のボランティア活動は変わりました。街がより安全になって商店も開くようになり、州の財政支援制度も機能するようになったので食料を配達する必要性が減ったのです。それ以来、もっぱらハルキウ(秋に危険度が増した)やその周辺地域(まだかなり危険)からの避難の支援活動に取り組みました。

障害を持つ高齢女性をハルキウの病院まで移送するため
私が救急車に乗せたところ、クプヤンシクにて。

それから年末までの私は、Ruby言語の開発にそこそこ参加し、今や既に有名になった新しいDataクラスや、Timeクラスでのパターンマッチングのサポートという重要な機能を2つ設計し、実装しました。その他にも、細かな機能についての議論、ドキュメントの改善、教育的な記事の執筆、今後出版されるツルハシRuby本のアルファレビューといったもろもろの作業に携わりました。

🔗 Rubyに参加する理由

Ruby Evolutionのリリースを特集した過去記事で、私は以下のように書きました。

この結果は、おそらく皆さんからの注目に値するでしょうし、ぜひそうあって欲しいと思っていますが、自分では判断がつかないのです。今となっては、この仕事が重要だと強く信じていた理由がなかなか思い出せないのですが、仕事が完了して「難しい宿題」から解放された気分になれたのはやはり嬉しかったですね。それだけです。

...

とは言うものの、Ruby Evolutionのリリースに合わせて机上の空論のような回想録記事を書く気にはまったくなれません(私の#RubyFriends😍の関心を惹きつけられなかったことでまだ落ち込んでいます: 当分この気持が続きそうです)。

全面的な侵略が開始される前の私は、自分がRubyコミュニティの一員であるという喜びを満喫していました。このコミュニティは人道的で共感力があり、技術的トピックのみならず、不平等や偏見や人類一般の苦しみを和らげるためにも、記事を出したり議論を重ねたりカンファレンスで取り上げたりするだろうという幻想に喜びを見出していたのです。

言ってみれば、最もわかりやすい形で落胆したのでした。

2月から3月にかけての私は、あの全面的な大量殺戮戦争に対して皆が動揺しないはずはない、コミュニティの何百人ものフォロワーや個人的な知人が無関心でいられるはずがないというかすかな望みを抱き続けていました。自分が個人的に知らなくても、あらゆる善を支持するRubyistたちから声明が発せられるだろうと期待していました。私はブログ記事を書き(12)、最新情報や重要なニュースの翻訳や個人的な見解をほぼ毎日ツイートし、ヨーロッパのジャーナリストたちと直接対話までしました。

私はおおむね間違っていたようです。コミュニティの何人かは私が助けを必要としているときに支持を表明してくれましたが(偶然なのか、その多くは東欧の人たちでしたが)、ほとんどは(少なくとも公には)無反応でした。砲撃にさらされている街からリツイートを求めるツイートの下にある「リツイート」ボタンを押すにも至りませんでした。

(極めつけは、3月上旬に全米のRuby Twitterが、とあるフレームワークの作者である"恐ろしい子"1がしでかしたいくつかのことについて強い口調で非難した一方で、あの全面的な大量虐殺に関するツイートが見当たらなかったことでした)

その後も、何度も苦い思いをしました。たとえばEuRuKo(European Ruby Conference)の動画(参加不可能になる前の私はEuRuKoに参加して登壇するのが夢でした)を視聴しても、登壇者の誰一人として現在進行中の戦争に言及しないのです。その年のEuRuKoはフィンランドでの開催でした。フィンランドは何十万人ものウクライナ難民を受け入れています。


それでも私はコミュニティに戻りました。コミュニティに参加するためでないとしたら、Ruby言語そのものに参加するために。

死と破壊をものともせずに。元同僚の1人が9月にバフムート(Bakhmut)で殺されたことを知り(彼は私を「先生」と思ってくれていたということだけを後になって聞きました)、他にも多くの人が死に、多くの建物が廃墟となり、多くの街が陥落し、武器の調達が致命的に遅れ、国際的な干渉が行われているにもかかわらずです。

このような状況でRubyに参加するというささやかな活動に携わるのは、相当現実離れしているように感じます。しかしそれでも私は参加します。その理由は何なのか。

🔗 "共感"はやはり重要

私はこれまでの人生で、言語と文化について深く考えを巡らせてきました(なお、私は"たまたま"プログラミング言語でも文章を書く物書きであるともっぱら自負しています)。

この戦争を引き起こしたロシアの植民地主義における文化学的研究については触れません。私がロシア語を話す家庭で育った理由についても割愛します(父はドンバス出身の鉱山労働者で、その両親の母国語はウクライナ語であり、母方の祖父はイディッシュ語2を母国語とする靴職人だったにもかかわらずです)。

嘘で固めた言葉、卑劣なプロパガンダ、「キーウのナチ政権から地域住民を解放する」などというジョージ・オーウェルを地で行くようなナラティブについて長々と語るのもやめておきます。

私がお伝えしたいのはこうです。私は今ほど言語というものの重要性を痛感したことはありません。言語の明瞭さと誠実さは、自らを説き明かし、他者を理解しようとする率直な試みなのです。

それはプログラミング言語であっても同じです。

卓越した表現力と「開発者を幸せにするために設計された」というモットーを備えたRubyは、明瞭さと誠実さを盛り付ける素晴らしい食器になれるのです(強力なツールがえてしてそうであるように、意図的に、または無意識に、意味を取り繕ってぼかしたりするのに使われることもあったりしますが、そこは重要ではありません)。

それこそが、私がRubyに参加する理由なのです。「人間とコンピュータをつなぐ言語」の"人間"の部分のためです。コミュニケーションを容易かつ明確にする表現手段の進化に参加する機会。私はその機会に恵まれたことを心底感謝しています。

そしてこれは大きな難題でもあります。

言語のAPIやドキュメントを改善してより表現力を高め、かつアクセスしやすくする作業は、エンジニアリングというよりは文化活動に近いものです。何が正しいのかを証明することは困難ですし、言語に新機能を取り入れるには相当な忍耐力と粘り強さが必要です。

そして他者への共感も必要です。共感とはすなわち、生まれ育った背景や理論付けの異なる多くの人々がコードをどんなふうに書いたり読んだりすることを好むかを具体的に思い浮かべ、どうすれば人々の生活や相互理解が向上するかについて想像を巡らせることなのです。

私の言語に対する取り組み方が元で、細部に必要以上にこだわりがちな面倒くさい人物という評判が(コアチームの内外で)立っているであろうという自覚はあります。しかし少なくとも私の活動によっていくばくかの有意義な変更がもたらされる限りにおいて、甘んじてその評判を受けたいと思います。

もしかすると、巨悪と闘う力のない無念をプログラミングへの情熱に転嫁しているだけなのかもしれません。ひょっとしたらそうなのかもしれませんね。

今後について

私がRuby関連でやっておきたい作業は、まだまだ大量に積み残されています。

大小の話題を扱ういくつかの記事や、例のいまいましい本3の執筆。他にも、著名なソフトウェアを"説明的に書き直す"(explanatory rewrite)いくつかのプロジェクトがあります(私の『スペルチェッカーの再構築』や『山水画の自動生成』のように: ただし今回は私の愛する言語のパワーを存分に活用しています)。

私は、公式の言語リファレンスの表現を改善する作業に取り組める状況になることを今も切望しています。また、今後のRuby向けの新機能や改良機能に関するアイデアをいくつも抱えています。いくつかは送信済みですが、まだ構想段階のものもあります。

ただしそこまで楽観しているわけではありません。

ついに私も軍に入隊する番が回ってきました。あと数週間もすれば(私に割り当てられる専門分野の再訓練コースに空きができて)、おそらく自分の本業やオープンソース関連に割ける時間はかなり減ってしまうでしょう。いずれにしろ、今後数か月分にわたる長期計画を立てても意味はないでしょう。

しかし、それでも私は書くことをやめないでしょう。


お読みいただきありがとうございます。ウクライナへの軍事および人道支援のための寄付およびロビー活動による支援をお願いいたします。このリンクから、総合的な情報源および寄付を受け付けている国や民間基金への多数のリンクを参照いただけます。

すべてに参加するお時間が取れない場合は、Come Back Aliveへの寄付が常に良い選択となります。

🔗 「zverok on lucid code and open data」へのサポートをお願いします

著者: Victor Shepelev(zverok) - 1年前に立ち上げ

世界を理解して、より良い形で表現する — 開発者として

支援ページへのリンク

関連記事

Ruby 3.2のData#initializeがキーワード引数も位置引数も渡せる設計になった理由(翻訳)

Ruby: パターンマッチングをカスタムオブジェクトで実装するときの注意点(翻訳)


  1. "enfant terrible"は、コクトーの小説とその映画『恐るべき子供たち(Les Enfants Terribles)』になぞらえています。 
  2. イディッシュ語 - Wikipedia 
  3. 訳注: 原文の言い回しは、"That damn book"という扇情的な書籍のタイトルをもじったようです。 

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。