見出し画像

翻訳者の角谷さんをお呼びして研鑽Rubyプログラミング読書会を開催しました

グロービスにて業務委託で勤務しています五十嵐(@igaiga555)です。グロービスではいくつかの読書会が開催されていて、2023年9月からは「研鑽Rubyプログラミング」の読書会が開催されています。今回は同書の翻訳者である角谷信太郎さん(@kakutani)をゲストにお迎えして開催された特別会についてのレポート記事です。
(ちなみに、この前に行われていた読書会では笹田さんのWEB+DB PRESSでの連載「Rubyのウラガワ」を読んでいました。そのときの笹田さんをゲストにお招きした会のテックブログ記事は こちら です。)
「研鑽Rubyプログラミング - 実践的なコードのための原則とトレードオフ」はJeremy Evansさん著(以降ジェレミーさん)、角谷信太郎さん訳で2023年4月にラムダノート社から刊行されたRubyの本です。「実践的なコードのための原則とトレードオフ」という副題が示すように、「こういうときはこう考えると良い」という原則と、「それぞれの方法にはこのようなメリット・デメリットがある」というトレードオフの参考となる知識が、ジェレミーさんの明快な文章で解説されています。
普段の読書会では前半の15分を読書パートとして、みんなでその日の範囲を読んで議論したいことを議事録ページに書いていきます。後半の15分でページに書かれた議論したいことを、それぞれ書いた人が説明しながら議論しています。
今回は翻訳者の角谷さんに質問したいことや議論したいことをあらかじめ議事録ページに書いておき、1時間の会でいろいろな話題について角谷さんを交えてみんなで話しました。
本記事では今回の会から抜粋して以下の話題について書いていきます。(細かい言い回しは読みやすいように編集してあります。)

  • SetとHashの速度比較について

  • 翻訳中に自分の好みと違う点はありましたか?

  • β版での書籍販売について

  • Structの初期化に2パターンある理由


読書会参加者で記念撮影

SetとHashの速度比較

質問(長井さんより)
「Setは内部でHashを使って実装されているので、基本的にはHashを直接使うよりも速度は低下します。(19ページ)」とありますが、SetはHashのサブセットのように思うのですが、遅くなる理由は何でしょうか?

角谷さん回答
Setオブジェクトのアロケーションが起こることだと思います。この辺のジェレミーの速い遅いは「Stringの一滴は血の一滴」という感じで、オブジェクトのアロケーションをどれだけ減らせるか、というレベルでの話ですね。ふつうのアプリケーションではそこまで気にする必要があるケースは少ないと思います。
そういえば、松田さんの鹿児島Ruby会議のRailsのオブジェクトアロケーションに関する講演も良かったですね。フレームワークやライブラリだと呼び出される機会数が全然違いますからね。

Rails7.1をn倍速くした話


長井さん

昔C言語でVMみたいなものを書いたときに「ここをインラインに、とか、このifをやめて関数テーブルにすれば」と考えたので、それを思い出すと、ライブラリだとメモリアロケーションにこだわる気持ちが分かった気がします。

翻訳中に自分の好みと違う点はありましたか?

質問(長井さんより)
翻訳中に自分の好みと違う点はありましたか?

角谷さん回答
それはなかったですね。そこまでやるのかって話はいろいろあったけれども。

長井さん
読んでて著者の主張にここまで違和感が少ない本はめずらしいなと思いました。

太田さん
私も同じ感覚で、読んでて「こういうことするといい、これをするとつらい」の感覚がすごく近くて共感できる、でもジェレミーさんはその先を行ってるなと読書会で感じてます。
(このあたりの感覚は、読書会に普段出ているメンバーはみんな近しい感想を持っているようでした。)

β版での書籍販売について

質問(松尾さんより)
この本は最初にβ版で書籍販売を開始していたと思うのですが、どうしてこのやり方を取ったのでしょうか

角谷さん回答
英語の出版社だといろんな会社でやってると思うのですが、私が最初に見たのはPragmatic Bookshelf で20年以上前にやっていたもので、私も1回やってみたかった。ただ、できていない本を、しかも電子版で売るのは、日本のメジャーな出版社でやると編集者さんに本作り以外のところで労力をかけてしまうのでためらいがあった。今回は旧知なラムダノートの鹿野さんとやるので、鹿野さんから「仕組み的にはできるから、やったことないけどやってみましょうか」と力強いコメントをもらったのでやらせてもらいました。

Structの初期化に2パターンある理由

質問(森谷さんより)
Structの初期化のコードが2パターン実装されているのは、プログラマに対する親切心なのか、それとも何か理由があるからでしょうか?

# 書き方1
Artist = Struct.new(:name, :albums)
artist = Artist.new('John Coltrane', ['A Love Supreme', 'Giant Steps'])

# 書き方2
Struct.new('Artist', :name, :albums)
artist = Struct::Artist.new('John Coltrane', ['A Love Supreme', 'Giant Steps'])

角谷さん回答
言われてみれば、なんででしょうね。構造体クラスの名前の扱い方に応じて2通りあるからだとは思うのですけど、もしかしたら「できるからやった」みたいな理由もあるのかも…「実装の都合により、クラス名の省略は後づけの機能でした」とのことなので、機会があったらまつもとさんに経緯を聞いてみるのがよさそうですね。Structの「構造体クラス」を生成する(クラスもオブジェクト!)、っていうのはおもしろいよね、というのは私も同感です。

まとめ

いろいろな話題で議論が弾み、あっという間の1時間でした。角谷さんの話はRubyの歴史や豊富な引き出しからのわかりやすい説明あり、ユーモアを交えた語り口でのたのしい話題もあり、角谷さんの魅力があふれる話をたくさん聞くことができました。
読書会は現在第2章を読んでいるところですが、早い段階で角谷さんに来ていただいての読書会ができてよかったです。角谷さんと相談して、本書が全3部構成なので合計3回角谷さんをお招きする回をやることにしました。次回の角谷さんゲスト回も、そしてそれまのでのいつも通りの読書会もたのしみです。

日本発、世界をリードするEdTechカンパニーを目指すGLOBISでは、一緒に働く、また、一緒に読書会でわいわいしてくれる仲間を募集しております!!

まずは、カジュアル面談を通して、あなたに合う組織かどうか確かめてみませんか?


この記事が気に入ったらサポートをしてみませんか?