『研鑽Rubyプログラミング 実践的なコードのための原則とトレードオフ』を読んだ。ちょっとブームに乗り遅れたけどまぁ、本なんていつ読んでもいいものなので気にせず感想を書く。
想定読者層はあらかじめ示されているとおり中級〜上級で、Ruby初学者には厳しめ。RubyやRailsでのアプリケーション開発にそこそこ慣れてきた自称中級者が読むと知識の広がり幅が大きくて良さそう*1。
同じようなレベルの層に対してよく推薦される図書として『メタプログラミングRuby』があると思うのだけど、そちらよりは平易かつ実践的な内容が多いと感じた。
具体的にはDSLやプラグイン機構の作り方など、ふだんのWebアプリケーション開発業務でしょっちゅう書くわけじゃないけど、書き方を知っているとライブラリの中身をすいすい読めたりして便利、という知識がふんだんに詰まっている。
このあたりは僕のぜんぜん知らないテクニックもたくさんあって学びが多かった。
互換性への考慮、ソフトな移行などは単一コードベースを触っている場合(というか実装者と利用者が同じ場合)だとあまり気にせずエイヤとやってしまうこともままあるが、ライブラリ設計者としてはそうもいかない、というあたりも当たり前なんだけど良かった。また、使いやすいインタフェースに心を砕く重要性も伝わってきた。
こういう"ライブラリ作者や言語設計者の目線や頭の中"をのぞける書籍はあまり読んでこなかったかもしれない*2。
いろんな方の感想を先に読んでいるときに議論を呼ぶコードスニペットへのツッコミとか、こんな最適化するか?といった是非への言及が見受けられたので、"極端な内容"なのか...!? とどきどきしていた。
が、蓋を開けるとタイトルの通り原則とトレードオフの解説が丁寧で、良い意味で期待を裏切られた。
いろんな選択肢を示しながらも、経験の浅いプログラマに「これが最速なのか、よっしゃ真似したろ!」みたいな特攻をさせないようブレーキがかかっていたり。
RubocopのくだりとかはRubyKaigi 2022の@nay3さんの発表 "The Better RuboCop World to enjoy Ruby" を思い起こさせるものだった。
RuboCop が「あなた自身よりもよくわかっている」と想定してデフォルトの恣意的な制限をそのままにするのはやめましょう。あなたのコードの API にど んな意味があるのかを判断するのはあなたです。
ここに限らずコードの良し悪しを自分で判断できるようになりましょう、というメッセージが通底しているのが響いた。
だいぶ最初のほうだけど「Structはもっと評価されるべき」はかなり同意した。今のRuby 3.2だとだいたいDataクラスになるけど実務でもよく使う。ビジネスロジックやアルゴリズムを簡易に表現できるようなデータ構造を見出せたときの気持ちよさはすごい。
雑感は以上。改めてまえがきを読んで以下の一節に一層の真実味を感じる。
「どんなトレードオフがあるかを知る」ことは最重要なプログラミングスキルのひとつなのです
本書は、内容について読み手が意見を表明したり議論する価値が大いにあるタイプの本。読んで終わるだけでなく、そのような活動を通じて読者やコミュニティが価値基準と判断力を獲得していくだろう...というあたりまで狙っているとしたらすごいですね。
(2023-06-11 追記) というわけで他の方々の感想も是非。
*1:僕じゃん
*2:『APIデザインケーススタディ』ぐらいか