チェリー本(プロを目指す人のためのRuby入門)を読んだ

-2018.09.21 -プログラミング
-

e-Navigator ※ の参加者が集う勉強会でもオススメされた通称『チェリー本』プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法までを読み終わることが出来ましたのでその感想を書いていきます。

※ 参考:Railsチュートリアル後にオススメ!e-Navigatorを完走しました!

スポンサーリンク

とにかく読みやすい!

①ターゲット読者層

読んでみた感想としては7割既知・2割分かっていたようで分かっていなかったこと・1割理解できていなかったこと、という具合です。サクサク読める部分と手を止めて写経してみる部分がちょうどよい塩梅でした。

ちなみに僕のRubyレベルはこんな感じです。

  • 仕事でのRuby・Rails歴は半年ほど(しかも兼務)
  • ProgateのRubyコース・Railsコース完走
  • TechAcademyのWEBアプリケーションコース受講
  • Railsチュートリアル完走
  • e-Navigator完走
  • 最近、Ruby Silver合格

ProgateやTechAcademyはテキストに沿って進めるいわば「座学」に近い形式なので、実戦経験としてはこの半年間のみと言って良いレベルです。そんな僕にとっては非常にためになった一冊でした。この点は書籍の冒頭でも触れられていて、プログラミング自体が初心者という人にはハードル高めだと思いました。「JavaやCの経験がある人はご存知の〜と似たメソッドです」のような記述も多く、プログラミングにまつわる基本的な概念の理解が出来ている前提の書籍です。

②語りかけてもらっているような文章

プログラミングスクールに行く前の独学時代はよく技術書を買って満足して積ん読してしまっていたのですが、チェリー本はとても読みやすかったです。450ページ超の割と分厚い技術書ではあるのですが、なんだかんだ土日で一気読みしたようなものです。その大きな理由に著者と対話して読み進める感覚を味わえるというのがあると思いました。
一般的な技術書だと「〜である」調が続くので途中で積ん読と化すことが多かったのですが、「〜だったらどうなるでしょう?」というような語りかけがふんだんにあるので、著者がそばにいて一緒に考えてくれている感覚になり安心して読み進められます。

③サンプルコードが豊富で躓かない

簡単なサンプルコードからきちんと掲載されていて網羅的です。文章体と相まってワンステップずつ丁寧にレベルを上げながら進んでいくので、技術書には珍しく「急に分からなくなった・・!」ということも一切ありませんでした。サンプルが適切であり親切だったというのもありますが、写経せずに済ませられた箇所も多くありました。

④Railsチュートリアルに似ている

Railsチュートリアルをやったことがある人は既に感じているかもしれませんが、文章体がチュートリアルに似ています。僕はRailsにチュートリアルから入っていった者なのであの訳し方は好きです。その体験があったからか、同じように読み進めることが出来ました。
加えて、全12章あるうちの3章にMinitestを用いたTDD(テスト駆動開発)について解説されています。各章には例題が掲載されているのですが、その例題の開発もTDDで行っていくスタイルなので、この構成もRailsチュートリアルを彷彿とさせました。

学びになった点

&演算子を利用した記法

Qiitaを漁っているとよく出くわす&記法。正確に理解できていなかったので勉強になりました。
&:メソッドでブロックをリファクタリングして省略することが出来ます。

['ruby', 'java', 'perl'].map { |s| s.upcase }
#=> ["RUBY, "JAVA", "PERL"]

['ruby', 'java', 'perl'].map(&:upcase)
#=> ["RUBY, "JAVA", "PERL"] 上と同じ結果だが、省略してシンプルに書ける

どうしてそう書けるのか?を理解できずに使っていました。。
&演算子を用いればprocオブジェクトをブロック引数の代わりにメソッドに渡すことができます。上の例は、:upcaseというようにシンボルの形で渡しています。シンボルクラスはto_procメソッドをもつのでProcが実行されて同じ出力結果になるという仕組みだったのですね!

また、&.メソッドでnilの可能性がある変数でも安全に呼び出せます。

a = nil
a.upcase
#=> NoMethodError: undefined method `upcase' for nil:NilClass

a&.upcase
#=> nil(エラーにならない)

正規表現のキャプチャ機能

正規表現に「キャプチャ機能」なるものがあったのは知りませんでした。。
メタ文字を()で囲むことでキャプチャ機能が使えます。matchメソッドで生成されるMatchDataに連番でセットされるので配列で取り出すことが出来ます。

text = '私の誕生日は1990年8月12日です'
m = /(\d+)年(\d+)月(\d+)日/.match(text)
#=> MatchData "1990年8月12日" 1:"1990" 2:"8" 3:"12"
puts m[0] #=> 1990年7月17日
puts m[1] #=> 1990
puts m[2] #=> 8
puts m[3] #=> 12

またキャプチャには【?<~~~>】で名前をつけることができ、シンボルで呼び出すこともできます。

text = '私の誕生日は1990年8月12日です'
m = /(?<year>\d+)年(?<month>\d+)月(?<day>\d+)日/.match(text)
puts m[:year] #=> 1990
puts m[:month] #=> 8

キーワード引数もそうですが、他人がわかるように命名しておくことはチームで開発する場合には親切で良いと思いますし、あとで見返した時に自分でも何の変数だったかわかりやすくなるので積極的に使っていこうと思いました。

まとめ

技術書は買って満足して積まれていく経験が多かったのですが、本書は良かったです。今のレベルに合致した難易度の書籍を手にとることが一番身になることを学べた良い機会でもありました。
あと、中だるみすること無く気合い入れて一気読みしたのも良かったかもしれません。

WEBでググるのが情報の収集速度の点ではメリットがありますが、やはり体系的に学ぶという意味では技術書を読むほうが頭が整理される感覚があって良いですね!

ちなみに、本書の著者は技術書の内容が難しい場合、無理に技術書をすべて理解しようとするのではなく頭の中に索引を作っておき、いざという時に本を開けるような状態を目指してもよいのでは?とブログで語っており、そういった読み方も良いかもしれません。
技術書、最初から完全に理解するか、頭の中にインデックスを作るか? 〜 #チェリー本 が後半から難しくなる問題を考える

          
    

スポンサーリンク

  
Scroll Up