Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

『研鑽Rubyプログラミング』は英語版を買った人も買うべき

『Polished Ruby Programming』(Jeremy Evans著)を角谷信太郎さん(@kakutani)が翻訳した『研鑽Rubyプログラミング ― 実践的なコードのための原則とトレードオフ』(以下研鑽Rubyプログラミング)が4月13日に販売されました 🎉

ラムダノートのサイトでは紙版に加えてPDF版も公開されました↓。こちらで紙版を購入するとPDF版もダウンロードできます。β版PDFの販売は終了していますが、既にβ版PDFを購入済みの方は更新することで表紙を除いて正式版相当のPDFを取得できるそうです。

販売: 『研鑽Rubyプログラミング ― 実践的なコードのための原則とトレードオフ』 – 技術書出版と販売のラムダノート

早くも同書の感想が出始めています。

そして私も、訳者の角谷さんからかたじけなくも同書のPDF版書籍を献本いただきました。ありがとうございます! 🙏 🙇。

売れ行きも好調なようで何よりです。

Scrapboxページ

購入方法などの情報が訳者の角谷さんによるScrapboxページにまとめられています↓(随時更新)。

参考: WelcomeVisitors - 『研鑽Rubyプログラミング』

『研鑽Rubyプログラミング』の特徴

原著『Polished Ruby Programming』については既に以下の記事でいろいろ述べましたが、それにぜひ付け加えておきたいことがいくつかあります。

『Polished Ruby Programming』(Jeremy Evans著)を読みました

1. 基本的に「Rubyを既に知っている人がトレードオフを学ぶ」本

上の過去記事ではあまり言及しませんでしたが、日本語版はサブタイトルで"実践的なコードのための原則とトレードオフ"と強調されているとおり、Rubyで普段からコードを書いている人が、どんなときにどんなトレードオフがあるかを学ぶのに最適な本です。内容を凝縮した良いサブタイトルの付け方の見本だと思います。

それでいて、過去記事でも書いたように「高速だけどRubyらしくない書き方」といった裏技や黒魔術的な記述はかなり控えめです。扱っているトレードオフの多くは、基本的にRubyらしい書き方の中でのトレードオフです。「最適化を早まるな」「今のRubyは最適化しなくてもたいてい速い」が合言葉です。

これも過去記事で書きましたが、Jeremy Evansさんが多くのライブラリの作者であることもあって、主にライブラリを作るときの事例が豊富です。もちろんRailsアプリケーションのコードを書いたりするときも役立ちます。

そういうわけで、同書はRubyを既に知っていることが前提となっています。

2. Ruby 3.2の最新情報を訳注でキャッチアップしている

日本語版で最大にありがたい点がこれです。

英語版はRuby 3.0を対象としていますが、現在のRuby 3.2では今ぱっと思いついただけでも以下の点が大きく強化されています。

そして『研鑽Rubyプログラミング』では、Ruby 3.2までのそうした強化点を含む技術的に有用な訳注が多数追加されています


同書PDF版p36より(画像は編集部で切り詰めています)

私はDataクラスが登場するまではStructに密かにシンパシーを感じていて、英語版を読んだ後でこっそりStructのアクセサメソッドのベンチマークを取ってみたりしていたこともあって、この訳注4の情報だけで感激してしまいました。

参考: class Struct (Ruby 3.2 リファレンスマニュアル)

こうした情報の充実は、訳者の角谷さんの尽力はもちろんのこと、β版でRubyコミッターを含む多くの方々からフィードバックが寄せられたことも大きいと思います(なお上の訳注4はRubyコミッターのko1さんから寄せられた情報だそうです)(追記2023/04/20: この#5131の改修もko1さんによるものでした)。

そういうわけで、既に『Polished Ruby Programming』を買った人であっても、『研鑽Rubyプログラミング』は買う価値が大きいと思います。

なお、原著のサンプルコードもじわっと更新されていました。角谷さんのプルリクもいくつか反映されていますね。

PacktPublishing/Polished-Ruby-Programming - GitHub

 Chapter01/00-album-database-2-hash.rb      |  2 +-
 Chapter01/01-album-database-nested-hash.rb |  2 +-
 Chapter01/03-album-database-array-hash.rb  |  2 +-
 Chapter01/04-lookup-by-artist-array.rb     |  2 +-
 Chapter01/05-lookup-by-artist-hash.rb      |  2 +-
 Chapter01/06-lookup-by-artist-set.rb       |  2 +-
 Chapter01/chapter-01.rb                    |  2 +-
 Chapter02/07-liskov-subsitution-max.rb     |  6 +++---
 Chapter02/chapter-02.rb                    |  6 +++---
 Chapter11/03-test-complexity.rb            |  4 ++--
 Chapter11/chapter-11.rb                    |  4 ++--
 README.md                                  | 13 +++++++++++++

改めてじっくり読んでいるところですが、クラスインスタンス変数や定数の探索周りのややこしさを再び痛感しています。

関連記事

Ruby 3.2の新機能Data.defineについて(翻訳)

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


CONTACT

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