最近家で読書する習慣が薄れてたのですが *1 頑張って研鑽Rubyプログラミング(以下:研鑽Ruby)を読みました。
研鑽Rubyプログラミング ― 実践的なコードのための原則とトレードオフwww.lambdanote.com
雑感
リファクタリング:Rubyエディション と メタプログラミングRuby 第2版 をgemの開発やメンテナンス方面に特化させたような感じ。(2冊とも読んだのが結構前になるので厳密には違うかもしれない)
バージョンアップ時になるべく非互換を防ぐような機能開発を行ったりdeprecation warningを仕込んだりするのはgemに関係なく他の言語のライブラリ開発でも普通に参考になります。
僕は10年以上gemを開発してますが終始「わっかる~」って頷きながら読んでました。
そんな自分でもちょいちょい知らないこともあって紛れもなく中級者~上級者向けの1冊
読書中のメモ
- ISUCONで使えそうなパフォーマンス改善ネタがちょいちょいあった
- バックトレース無し例外とか
Array#first
やArray#last
をArray#[]
に置き換えてパフォーマンス改善するやつはrubocop-performanceへのPRネタとしてもよさそう- sequelやsinatraなどの有名所のgemのDSLの実装方法が解説されていてむっちゃ参考になった
- 今まで自分が何気なくやってきた作業の流れ(機能追加のPRを入れる前に、機能追加しやすくするためのリファクタリング系のPRを先にmainにマージする)に関して「系統的アプローチ」って名前がついてるの助かる
- 名前がつくことで他の人に伝えやすくなる
- パフォーマンス改善に関してトレードオフも提示してるのが好印象
- 「Rubyでこんな書き方はしないだろーw」と思いつつも年1~2回くらい必要に迫られそうなので、また必要に応じて読み返しそう
宣伝
2023/5/11(木)~13(土)に開催予定の RubyKaigi 2023 に「Fix SQL N+1 queries with RuboCop」というタイトルで発表予定です。
研鑽Rubyを読みながらちょいちょい「これ、RubyKaigiの発表資料に書いたやつだ~」「この発表資料をそのまま出すとPolished Rubyist *2からツッコミが入るから補足入れないと」ってのがあって焦りました。
実は今回の発表資料は2年前の社内勉強会の発表資料がベースになってるので研鑽Rubyの影響は受けてないです。 先に研鑽Rubyを読んでたらもっと違う形になってそう。
5/12(金)に僕のトークを聞きに来てくれる人は予習として研鑽Rubyを読んでるとそういった一致点を見つけられて面白いかもしれないです。