『プロを目指す人のためのRuby入門[改訂2版](以下、チェリー本)』を読んだので感想と自分がどのように読み進めたかを紹介します。
この本の概要
実務で最低限必要となるRubyの知識が詰まった本です。これ一冊読んでおけば、日々の業務で困ることはまずないかなと思います。
ぼくはRuby on Railsを使ってポートフォリオを作り転職したのですが、特定のプログラミング言語を深く勉強したことはありませんでした。なので、今の会社に内定をもらってから入社までの期間でチェリー本を買って、とにかく手を動かしまくってました(笑)
同じように、はじめて深く学ぶプログラミング言語がRubyという方は、この本をぜひ買うと良いですね。
また、著者の伊藤 淳一さんは外部発信にも積極的です。とくに伊藤さんのQiitaは駆け出しエンジニアにとって本当に有益なので、こちらも併せてご確認ください。
読んでみて思ったこと
読んでみて思ったことをまとめます。
よかった点
実務で必要なRubyの知識が一通り学べる
Rubyの言語仕様がくわしく学べます。そして読みやすい。特にRubyはいろんな書き方が出てくるので、読みながら「こんな書き方もできるんだ〜」と感心していました。
また実務のコードであまり見慣れない記述が出てきた時には、この本を見返すとだいたいが解決します。
サンプルコードが豊富
サンプルコードが豊富です。しかも写経しやすい単位で記載されています。おそらく著者も手を動かしながら読むことを想定して執筆してくださったんじゃないかなと思います。
ぼくはサンプルコードをひたすら写経して読み進めました。
Ruby ≠ Railsが理解できる
恥ずかしながらぼくはポートフォリオを作っている際は、プログラミング言語のRubyとフレームワークとしてのRuby on Railsをろくに区別せずに勉強していました。この本を読んでRailsではなくRubyの勉強をしっかりしたことで、結果的にRailsを使う際のクオリティも向上させられたと感じています。
とりあえずRailsを使ってポートフォリオを作ったは良いものの、土台となる基礎力が不足している、って方はRubyをしっかり学ぶとよりパワーアップできると思います。
テスト駆動開発の初歩が学べる
各章には例題があるんですが、これはテスト駆動開発で進んでいきます。テスト駆動開発とは、まずテストコードを書き、そのテストが成功するような実装をしていく、という進め方です。
この本ではRubyに標準搭載されているminitestというテストフレームワークを用いてテスト駆動開発が実践されています。テストコードの記述は実務では必須なので、ここでその基礎を学べるのは一石二鳥だと感じました。
悪かった点
プログラミング未経験にはむずかしい
この本はあくまでも「Rubyの入門書」です。まえがきにも書かれているように、プログラミングの入門書ではないため、「変数とは」「配列とは」といった基礎知識は解説されていません。なのでプログラミングに全く触れたことがない人がこの本に手を出すのは、まだ早いです。
個人的には、ぼくのように「とりあえずRailsでポートフォリオは作ったけど、見よう見まねで深くは理解できていない」と感じている人にうってつけの本なんじゃないかと思います。
第6章以降はかなりむずかしい
著者も本の中で言っているように、6章以降はハイレベルなトピックも多数あつかわれています。いきなり全部をカンペキに理解しようとすると心が折れるかもしれません。ぼくは、今でも理解できていない箇所があります、、。
そういうところはとりあえずサンプルコードだけ写経してみて「ふーん」と思うぐらいでドンドン先へ進めていました。むずかしくてよく分からないところは、とりあえずサラッと読んで、実務で出てきた時に思い出せるようになっておけばOKかな、と思います。
こんな人におすすめ
- 他のプログラミング言語の経験があるエンジニア
- Ruby on Railsでポートフォリオを作ってとりあえず転職できた駆け出しエンジニア
- 手を動かしながら網羅的にRubyを学びたいエンジニア
上記に当てはまる方にはとても有益なんじゃないかな、と感じました。
おまけ:Rubyならではの特徴
最後に自分用メモとして、Rubyというプログラミング言語ならではの特徴をまとめます。
メソッドの戻り値にreturnをつけなくてもOK
Rubyではメソッドの戻り値にreturn
をつける必要がありません。最後に評価された式が返り値となります。
def add(num1, num2)
num1 + num2
end
add(10, 20) #=> 30
ぼくの会社の環境ではreturn
は基本的に書かれてていません。ただしメソッドを途中で脱出したいときは、次の例のように意図的に使います。
# num が奇数か偶数か判定
def odd_or_even(num)
# return を書かないと返り値が "odd" になってしまう
return "even" if num % 2 == 0
"odd"
end
odd_or_even(4) #=> "even"
odd_or_even(7) #=> "odd"
メソッドの丸カッコを書かなくていい
Rubyの場合、メソッドを呼ぶ際に最後の丸カッコを書かなくてもOKです。次のように、書いても書かなくても出力結果は同じとなります。
"こんにちは".length #=> 5
"こんにちは".length() #=> 5
これは定義するときも一緒です。メソッド引数がゼロ、または1つだけの場合は、カッコを省略して定義できます。
# メソッド引数が0
def greet
"こんにちは"
end
# メソッド引数が1
def greet name
"こんにちは" + name + "さん"
end
ただし引数が2つ以上あるときは、さすがに省略できません。
# メソッド引数が2つ
def full_name(first_name, last_name)
first_name + last_name
end
if文が値を返す
Rubyではif文が返り値を持ちます。そのため、if文の結果をそのまま変数に代入可能です。
num = 25
result = if n % 3 == 0 && n % 5 == 0
"FizzBuzz"
elsif n % 3 == 0
"Fizz"
elsif n % 5 == 0
"Buzz"
else
num
end
result #=> "Buzz"
これはわりかし便利です。
インデックスにマイナスが使える
Rubyの場合、インデックスにマイナスの値を指定すると「うしろから数えてn番目」の要素にアクセスできます。
array = [1, 2, 3, 4, 5]
array[-1] #=> 5
# 以下のように書かなくていい
array[array.length - 1] #=> 5
競プロなどのコーディング問題を解くときなどは重宝しますね。
すべてをオブジェクトとして扱う
Rubyでは数値やnil(他言語におけるnull)、クラスなどすべてがオブジェクトとなっています。プログラミング言語の中にはプリミティブ型かそうではないかを意識するケースもありますが、Rubyではそういった考慮はしなくてOKなんです。
おわりに
この記事では、チェリー本を読んだ感想と、ぼくがどのように読み進めたかを紹介してみました。
Rubyを触るエンジニアにとってはバイブル的な1冊なので、まだお持ちでない方はぜひ読んでみてほしいと思います。