プロを目指す人のためのRuby入門[改訂2版] (チェリー本) を読みました

11/29に発売されたプロを目指す人のためのRuby入門、通称チェリー本の第2版を著者の伊藤淳一@jnchitoさんからご恵送賜りました (ありがとうございます!)
遅くなりましたが、本書を読んだ感想を書かせていただきます。

まえがき: チェリー本とわたし

チェリー本といえば、第1版が発売されたのはちょうど4年前の2017年11月25日でした。
当時のわたしはプログラミングというものを学び始め、自分にとっての初めてのプログラミング言語であったRubyにも出会ったばかり。
タイミングの良いことにチェリー本の発売日とまったく同じ日、当時住んでいた福岡にて、地域RubyコミュニティFukuoka.rb主催の地域Ruby会議である福岡Ruby会議02が開催されていました。
右も左も分からない状態で福岡Ruby会議02に参加したわたしは、わからないなりにこのカンファレンスの空気に気持ちを昂らせ、そして昂った気持ちのその勢いで帰り道にチェリー本を購入したのでした。

そうして出会ったチェリー本をまずは一読し、まだまだ理解には及ばなかったために後日再読し、更にプログラマに転職してからもTama.rbチェリー本輪読会でも今一度再読し、あと別の機会にももう一回読み直した記憶があるような…もちろん通読するばかりでなく、働き始めてしばらくの間は辞書代わりに手元に置いて、必要な局面が訪れるたびに開いていました。

チェリー本を読んでプロ (グラマ) になった人は沢山いると思います。わたしもそのうちの一人です。
そうやってお世話になってきたチェリー本の第2版を、今度は職業Rubyプログラマの立場で読むことができ、とても嬉しく思っています。

改めてありがとうございます! > 伊藤さん

チェリー本はどんな本?

…についてはすでに公式・非公式問わず、たくさんの紹介があります。

また、第1版との比較については、@aim2bpgさんのブログにて (伊藤さんも驚かれるほど) 詳細に解説されていました。

aim2bpg.com

感想

さすがに最近はチェリー本にお世話になる機会が減っていたので久々に通読したことになります。

本文中で紹介されている構文やメソッドのうち多くは普段から馴染みがあるものなので、自然と以前読んでいまいちピンと来なかったところや、以前は頭に入りきらなかったところに意識が向くことになります。
そうすると、まるで復習をしているように「そうそう、これってこういうこと!」と現在の自分の理解を確かめる場面があったり、あるいは全くの新しい発見に出くわす場面があったり、4年前とはまた違う新鮮さを覚えながら読み進めることができました。

例えば、「2.12.3 式(Expression)と文(Statement)」(P74)

ここでは式と文の違いを「値を返し、結果を変数に代入できるものが式」「値を返さず、変数に代入しようとすると構文エラーになるものが文」と定義します。 このような分類で指揮と文を区別すると、Rubyのif文やメソッド定義は文ではなく、式になっています。なぜならif文やメソッド定義が値を返すからです。

について、「メソッド定義が値を返す」ことについては今回読んでいて初めてちゃんと認識しました。
(REPL環境でメソッドを定義するとメソッド名がシンボルで返ってくるので、言われてみればそれはそう…!という感じなのですが)

解説そのものが第1版よりもさらに丁寧にわかりやすいよう改善されていることも大きいと思います。
特に以前読んだ時に難しく感じた第10章「yieldとProcを理解する」は、処理順が図示されていたり、そもそものyieldやProcの用途について踏み込んだコラムが追加されており、これなら初めて読む人でもyieldとProcの概要を掴むことができるのではないかなと思いました。

もちろん復習だけでなく、新しい解説も追加されています。

第11章「パターンマッチを理解する」では、パターンマッチの作者である@k_tsjさんをして「世界トップレベルと言っていい」と評されるほど丁寧な、具体例を交えた解説がなされています。

自分自身ではまだ本格的にパターンマッチを活用する機会を得ていないのですが、サンプルコードを動かし演習をするだけでもその気持ち良さを試すことができます。
使いどころがあればぜひ使いたい!…し、その機会が来たときにはまたもやチェリー本を傍らに実装を検討することになりそうな気がしています。

新機能といえば他にも第12章「Rubyデバッグ技法を身につける」では、もうすぐリリースのRuby3.1から導入される新しいデバッガ debug.gem の基本的な使い方が紹介されています。
debug.gemは非常に多機能で、公式のREADME.mdもとてもとても充実しているのですが、とりあえずチェリー本で紹介されている機能だけでも頭に入れておけば迷わずスッと使い始めることができそうです。

更に第13章「Rubyに関するその他のトピック」の中には、typeprofsteepの概要と使い方について、型入門者向けの絶妙な塩梅での解説が含まれていたりします。

個人的にチェリー本の一番の特徴は、その網羅性と実用性にあると思います。
だからこそ、第1版を読んでいた当時から時間をおいて今、改めて第2版を読むことによって、この4年間の総復習と新機能についての実務を前提にしたキャッチアップをすることができるのではないかなと感じました。

最後に

Rubyプログラマとして働いている今、チェリー本はプロを目指す人々のためだけの本ではないなあ、と思っています。
チェリー本 第2版を読み、自分のこれまでを振り返り、今現在とこれから将来のRubyとのお付き合いを考える時間を持つことができました。
特にわたしと同じく第1版を読んでプロ (グラマ) になった皆さん、年末年始休暇のお供にいかがでしょう?