【書評】『プロを目指す人のためのRuby入門 改訂2版』&チェリー本輪読会番外編

こんにちは、チェリー本のおかげでRubyチョットワカルいっしーです。

今回はRuby 3.0に対応した『プロを目指す人のためのRuby入門 改訂2版』(通称チェリー本2)を少しずつ読み進めています。また、本書に登場するサンプルコードに手を加えたものも少しだけご紹介します。

※【書評】と銘打ってますが、『改訂2版』については隅から隅まで精読できておりませんすみません🙏

チェリー本のよいところ

初心者におすすめ

Ruby初心者のみならず、プログラミング初心者にとてもおすすめできます。筆者は本書の第1版を、1周目は通読し、2周目は輪読会に参加して数ヶ月かけて読み込みましたが、そのおかげでプログラミングの地力が相当ついたと思います

フィヨルドブートキャンプ内で開催されたチェリー本輪読会についてはコチラ↓

isshi-hasegawa.hatenablog.com

「プログラミングの地力がついた」というのはちょっとフワッとした表現ですね。もう少し具体的に述べると、未知のコード(Ruby以外の言語でも)に出会った時に、どれがキーワードで、どれがレシーバで、どれが引数で、コード全体の構造がどのようになっているかなどを冷静に観察できるようになりました。

説明文もコードも読みやすい

入門書として何より大事ですが、説明文が読みやすい日本語で書かれています。また、サンプルコード中に書かれているコメントも過不足なく、そのコードで何が起きているのか理解しやすくなっています。

Rubyを体系的に学べる

「こういう書き方は避けてこのように書くほうが良い」 「こういう書き方は不具合の原因になります」 というふうに、「何が大事で、どのように書くべきか」がキッチリ監修されています。

ただ単にRubyの仕様が知りたいのなら公式リファレンスなどを黙々と読めばよいですが、本書なら伊藤さんというフィルターを通し、Rubyをトピックごとに体系的に学ぶことが出来ます。

テスト駆動開発を実践できる

要件を満たすコードを書く際にどのようなアプローチをとればよいかを手軽に学べます。

例題に取り掛かるセクションでは、

  1. テストコードを記述する
  2. 実装する
  3. テストが通るのを確認する
  4. リファクタリングする
  5. テストが通るのを確認する

というのが基本的な流れになっています。

まるで本書を通じて伊藤さんとペアプロしてるかのような体験です。

読んでいるうちに感じた疑問は、少し先を読めばだいたい書いています。

チェリー本輪読会番外編

フィヨルドブートキャンプでは、早速この改訂版を手に入れた現役生で「チェリー本輪読会番外編」が開催されており、筆者も参加しています。フィヨルドブートキャンプ内で5〜9月に開催されたチェリー本輪読会の、文字通り番外編的なものです。

例題がリニューアルされた8章(モジュール)と、新設された11章(パターンマッチ)をみんなで読もうという趣旨で行っています。

リニューアルされた8章の例題:rainbowメソッド

8章の例題がリニューアルされ、ターミナル上で文字色を変更して出力できるプログラムを作成するというものになっています。

完成品はこんな感じ。 ruby-book_–_rainbowable_rb.png

ANSIエスケープシーケンスという出力形式を利用して、文字色を変更しています。

他にも、背景色を変更したり下線を引いたりすることもできるようです。

ANSI_escape_code_-_Wikipedia.png

輪読会のみんなで改造

せっかくなので、輪読会のみんなと一緒に手を加えてみました。 要件は以下のとおりです。

  1. 背景色も変更される
  2. 色変更の順番は固定でなくランダム
def rainbow
    to_s.each_char.map.with_index do |char, count|
      color = 31 + (0..5).to_a.sample % 6
      bg_color = 41 + (0..5).to_a.sample % 6
      "\e[#{color};#{bg_color}m#{char}"
    end.join + "\e[0m"
  end

おっと、RubyMine(IDE)にペーストしたコードの方はRuboCopに色々怒られています。

ruby-book_–_rainbowable_rb.png

それに、文字色と背景色が被ってしまうと文字が見えませんね。

ruby-book_–_rainbowable_rb.png

もう少し改造

  1. 文字色と背景色が被らないようにする
  2. RuboCopを通す(Warningも対応する)
def rainbow
    to_s.each_char.map do |char|
      ary = (0..5).to_a.sample(2)
      fg_num = 31 + ary[0]
      bg_num = 41 + ary[1]
      "\e[#{fg_num};#{bg_num}m#{char}"
    end.join.concat "\e[0m"
  end

これで完成したと思いきや、被っているように表示されてしまいました。 ruby-book_–_rainbowable_rb.png

どうやらIDEのカラースキームの影響のようです。

プラグインの適用を外すと、うまくいきましたね。 ruby-book_–_rainbowable_rb.png

ちなみにiTerm2ではこんな感じ。問題なく動作しています。 1__irb.png

その他の改訂部分について

もちろん、8章と11章以外の改訂部分も、より表現がわかりやすくブラッシュアップされています。

書籍全体を通しての詳細な差異はシモカワさんの書評を参考にさせてもらってます。

めちゃくちゃ詳しいです↓

aim2bpg.com

また、フィヨルドブートキャンプ卒業生のふーがさんがこの度主催される輪読会メインのコミュニティ「りんどく.rb」でも改訂版の輪読会が企画されています。

詳細はコチラ↓

fuga-ch85.hatenablog.com

チェリー本2はこれから何度も読書会の機会がありそうですね。

映画のディレクターズ・カット版を観るように、差分を楽しみながら他の部分も読みたいと思います。