今回のセッションで伝えたいこと

角谷信太郎氏:みなさんこんにちは。角谷と言います。Rubyist-istをやっています。

Rubyist-istとは、Rubyistが好きな人のことです。この話は4年前に島根のRubyWorld Conferenceでして、YouTubeに動画とかもあるのでよかったら見てください。 いいカンファレンスで2021年もあるので、ぜひ3万円の松葉ガニを買って、一緒にカニを食べながら楽しみましょう。

『Polished Ruby Programming』というRubyの本がPacktから出たんですよ。この本の著者がJeremy Evansと言ってすごい人なんですけど、2年前に福岡で開催されたRubyKaigi 2019でKeynote speakerをやってくれて。bugs.ruby-lang.orgのチケットをめちゃくちゃ直して、2020年のRubyPrizeをにかっさらっていったすごい人です。

コミッターとしては新しめのRubyistですが、実はRubyKaigi 2009に登壇してSequelの話をしてくれた古参なんです。当時話してくれたデータベースアクセスライブラリのSequelとか、RodaというSinatraみたいなライブラリかのメンテナンスをゴリゴリやっている人です。そのDBアクセスライブラリのSequelとか、RodaというSinatraみたいなやつのメンテナンスをゴリゴリやっている人です。

『ラムダノート』という、とてもかっこいい理工書を出している出版社から、こういうすごい人が書いた本を、私こと角谷信太郎が訳して出します。「日本語で読めるようにするぞ!」というのを今日はみんなに言いに来ました! もうこれで決めちゃおうかなと思っています。邦訳タイトルはこれでいきます。『研鑽Rubyプログラミング』。

このためにキーボードのキースイッチを潤滑するのをやめて、訳文を研磨しているのでみなさんよろしくお願いします。刊行予定は2022年の春かな? ただ、ベータ版というかたちで2021年11月ぐらいから、まずは一部電子だけで売り始めることをやりたいなと思っています。

分量が多いんですよ。430ページぐらいあって、今までやった中で一番多いので、ちょっと時間をくださいという感じで。

それまでの間で、ラムダノート社のラインナップで『Rubyで作るRuby』という、遠藤さん(遠藤侑介氏)のこれは正気なのか狂気なのか、その狭間のいい感じの本であるとか、あとは『n月間ラムダノート』の既刊5巻セット、5冊まとめて4,500円ですが、これはとてもすごくて、辻本さん(辻本和樹氏)のパターンマッチの話とか、前提や“なぜ”みたいなことが書かれていたり。あとは関さん(関将俊氏)のRubyの話とか、遠藤さんのコルーチンとか継続とか、遠藤さんの正気の文章が読めるので、ぜひ買って待っていてください!

『Polished Ruby Programming』の翻訳をしている理由

今回は『Polished Ruby Programming』を翻訳しますが、動機というか目的というか、なぜやるのかをこの場を借りてみなさんに伝えしてみたいと思っています。

エクストリームプログラミングという考え方があります。「うまくいくのか」ということを、ケント・ベックが「XPの成功は優秀なプログラマーが増えるということにかかっている」と言っていて。僕はエクストリームプログラミング厨なので、優秀なプログラマーを増やしたいと思っています。

エクストリームプログラミングに関しては、XP祭り2019で基調講演をしたので、必要だったら聞いてください。この時の講演は先ほどのRubyWorld Conferenceの動画がなくて、写真だけ貼ってあるのと、断片的な字が書いてある背景画像しかなくてごめんな、という感じなんですが。

優秀なプログラマーを増やすために、この本をみなさんにお届けしたい。どんな本なのかということを、この間のRubyKaigi Takeoutの時にJeremyが「バックトレースを出すのを速くする」というトークをしていたのですが、「こんな本だよ」というのを言っていたので、引っ張ってきました。

「この本は、中級のRubyプログラマーに対して、Rubyプログラミングの原則と実装判断を下す際のトレードオフを教えることにフォーカスしている本です」と著者が言っています。

書籍の期待・推しポイント・注意点

翻訳するにあたって全部読みましたが、私の期待と推しポイントみたいなところと、注意書きみたいなところをザッと説明します。Jeremy(の言葉)を先ほど紹介しましたが、すごいRubyist、十全的実践者、Full Participation Practitionerかな、この言葉の意味はあとでわかるかもしれないし、わからないかもしれない。

コミュニティのつながりがある人からの、久々の大きい書籍かなと思っています。内容は3部構成になっていて、全部で17章あります。Ruby 3.0対応です! やったぁ! これでもしRuby3.0に対応していないと直さないといけないから、さすがJeremy。第1部は「Rubyの基礎」ですが、このJeremyという人は、異様にメソッド引数やキーワードパラメーターに詳しい。ここがとても長くて大変。

Rubyの基礎を踏まえて第2部で、「Rubyプログラミングの実践の“原則とトレードオフ”」をみなさんに余すことなく教えてくれます。第3部はおまけというか、書ききれなかったか悩ましかったのか、Jeremy気持ちというか主張が、off the Rails気味に。データベースやWebアプリケーション、セキュリティは、OpenBSDの考え方に近いのかなということが述べられています。エッセイみたいな感じです。

全体的には、福岡の時のJeremyのKeynoteを聞いた人になら伝わるかな。ビデオがあるので見てもらえるといいんですが、本がJeremyのKeynoteみたいな感じです。容赦なく進んでいく感じです。

分量は先ほども言いましたが434ページあって、文章とコードしかありません。図が1枚もない。ひたすら字が書いてあって、「そんなに図を書くのが嫌なのかな」という感じの気持ちで訳しています。

これも福岡の時の基調講演のJeremyの主張ですが、「Correct, Fun!…and Fast!!」みたいな感じの1冊になっています。さすがのJeremyなので、サンプルコードが非常に頼もしくて、頼もしすぎる気もする。

例えば、Hashのエントリに配列を格納する時に、エントリがnullの場合、空の配列で初期化してから要素を追加するという内容が、1行で書けて便利だということが、本文中でほぼ説明されていないので。

「これぐらいわかるでしょ」みたいなことが前提。ライブラリを作ること、superの使い方がすごく上手なのが印象に残りました。

AmazonにRuby上級者のレビューがあって、k0kubunという人が星5つつけていますが、「本書の気に入らない点は、だいたい知っていることが書かれているところ」と書いてあって、「それはそう」みたいな感じのレビューが載っています。

Amazon.comでYukiさん、これは西嶋さん(西嶋悠貴氏)じゃないかなと思っていますが、西嶋さんは優しくて「初学者の人は気軽に質問できる上級者を探すといいよ」と、優しいアドバイスを書いてくれています。

これは日本のAmazonのほうですが、「この人Rubyのコミュニティにめっちゃ詳しいな!」と思っていたら、ファニートという人がすごく長いレビューを書いてくれているので、Amazon.co.jpでぜひ探してみてください。

これは私の好みですが、コーディングスタイルがちょっと気になる。checkメソッドが何回か出てきて「ムムッ」と思うけれど、「そうなのかしら」と思いながら今やっています。あとは、do endからメソッドをつなげるのが気になっちゃうんです。僕はThe Weirich Convention派なので気になる。あと、JeremyがPodcastで言っていたんですが、ほぼリサーチしていないところ。

自分の経験と思索から出てきていて、情報源が省略されがちなので「ソースはどこ? 何番?」みたいに、探すのをどうしようかなと。若干ハイコンテキストなところもあります。Ruby 3.0対応ですが、RubyKaigiが好きそうな人たち向きの、ShinyなRubyの機能は、一切言及されていません。パターンマッチとか、Ractorとか、Refinementsも出てきません。

一方で、前提知識というか、実践の上での前提知識がすごく多いです。

慌てて補足ですが、The Weirich ConventionについてはRubyKaigi TakeoutのNickのRuby Archaeologyという考古学トークを見てください。

前提知識がすごく多いんですが、17章あってこのぐらい扱います。組み込みクラス、変数、メソッド引数、例外処理、独自クラスの設計。RuboCopとモジュール、メタプロとDSLと、テストとイディオマティックRubyがリファクタリングでデザインパターンを速くします、みたいな感じ。

「前提知識としてはこれぐらい必要ですね」みたいな感じのものが、なかなか手ごわい。癖のある1冊ですが、これを春までがんばる。潤滑をやめて、研磨をがんばる。

Rubyコミュニティの存続の4つの課題

やはり優秀なプログラマーを増やす必要があって、個人的な信念としては、エクストリームプログラミングの成功にはRubyが欠かせないので、Rubyのコミュニティっていう私の食い扶持としても非常に大事なんです。

Rubyコミュニティの存続の課題でもあるんですよね。Rubyコミュニティをこれからも続けていくとなると、だいたい4つぐらい課題があると思っています。

エコシステムの発展、コミュニティの新陳代謝、コミュニティ内での練度の向上と国内でのプレゼンス維持。このあたりが重要じゃないかなと思っています。

「Rubyコミュニティ」という言葉については、日本のRubyコミュニティ独自の用法というか気になるポイントがあって、ここでもおさらいしておきます。

「Rubyコミュニティは、みなさん一人ひとりのことです」ということを高橋さん(高橋征義氏)がRubyist Magazineの28号の巻頭言に書いているので、ぜひ読んだことがない人は読んでください。

これを踏まえて、一人ひとりのコミュニティというのは、Rubyコミュニティとしては地球には1つしかないというのが私の持論です。これをRails Girls GatheringのKeynoteの時に、グダグダになりながら説明しました。

今日は詳しくは割愛します。あとでスライドや文字を読んでもらえればと思います。Rubyコミュニティの存続の課題は、自分の食い扶ちという意味でも、Rubyistが幸せに暮らせる、ありのままでいられるオーセンティックでいられるようなエンジニアリング組織を求めて会社を辞めてから、日本のTech業界というか、ウェイストランドを1人ぼっちの個人事業主でサバイバルしているものの、なかなかたどり着けなくて会社辞めて8年ぐらい経ってしまったみたいな感じなので、もうちょっとがんばっていかないとなと思っています。

4つの課題について、順番にザーッと駆け足でいきます。Rubyエコシステムそのものの発展に関しては、ものすごく単純化していくと、コードを書いて英語で受発信して国際カンファレンスで自分の存在をアピールしていくことが欠かせないと思っています。

私自身はコード書くのもプログラミングも下手なので力及ばず、微力ながら日本Rubyの会の理事として、例えばRubyKaigiを国際カンファレンスのSeñor Organizerとして場を作ることをがんばっています。日本のRubyistのみなさんもさすがよくがんばっているというか、2021年もRubyConfのスピーカーにもたくさんの日本人が入っていて、頼もしいなと思っています。

新陳代謝に関しては、卜部さん(卜部昌平氏)がQuoraですごくいい答えを書いてくれています。QuoraのURLがわかりにくいですが、「Quora shyouhei Ruby 足りない」で検索してもらえると出てきます。「Rubyにとって決定的に足りないものは初心者だ。新参、流入というものが足りない」という話があって。

状況に埋め込まれた学習という正統的周辺参加の理論というものがあって、この周りからだんだん真ん中に向かってみんなが練度を上げていって、新参が古参になっていく、再生産のプロセスが大事なんだという話があります。

例えば今日のKaigi on Railsもそうだし、あと私個人としてはプログラミングスクールのFjordBootCampというものの顧問などもやらせてもらっていたりします。五十嵐さんが「こんな本もあるよ」みたいなものをスライドにまとめてくれて便利という感じです。

Rubyコミュニティ内での練度の向上、練度を上げていく必要があるということで、中級者になるために、前提知識がすごくいるけれど、優秀なプログラマーを増やしていかないといけないので、『Polished Ruby Programming』をがんばらないといけないと思っています。

これをつうじて、国内でのRubyプレゼンスの維持が、オーセンティックな組織を求めて、私のMADがMAXじゃなくなりたいと思っていますが、なかなかRubyの本も厳しくて。新刊ランキング1位! でも俺だけ、みたいな感じになっていたりとか。ジュンク堂でもなかなかPython先輩がまぶしい存在になっていて、厳しい戦いだなと思っています。

でもやはり日本国内だと日本語じゃないとリーチしないので、やっていくしかない。でもRubyの本でそんなに売れなくて、ハイエンドはそもそも売れなくて、この本はRubyのハイエンドの本だから、過去に私も2冊ぐらいやっていますがなかなか厳しい。

作戦としては、売れる本を書けば本は売れるので。(スライドを指して)こんな感じで、このあたりの3冊は売れているので、このハイエンドもがんばってほしいと思っています。

ということで、『研鑽Rubyプログラミング』をみんな買ってくれ! 優秀なプログラマーを増やして、コミュニティ存続のエンジニアリング組織でオーセンティックな存在で、みんな買ってくれ! 頼む! 以上です。ご清聴ありがとうございました!