キモく生きよう

自己顕示欲の塊がキモくても個性出していくためのブログ

【書評】プロを目指す人のためのRuby入門

伊藤淳一さんというRuby/Rails界隈で有名な方が執筆された「プロを目指す人のためのRuby入門」を読みました。 その書評記事(・・・というよりは感想)です。

はじめに

僕のプログラミング経験は以下の通りです

  • プログラミング歴:大学時代含めると5年(うち業務1年)
  • Ruby/Rails歴:独学で1年、業務1年
  • コードを書くタイプの技術書で1冊きちんとやるのはこれが2冊目

きっかけ

リーダブルコードしか技術書を買ったことがない僕がこの本を手にしたきっかけは、執筆者の伊藤さんの以下の記事です。

blog.jnito.com

記事の内容を簡単に説明すると「絶対に書評を書く人、1名(3名になった)に本書の見本誌をプレゼントします!」です。

僕は軽い気持ちで応募しました。 しかし、アンケートフォームにはきちんと理由を書いたおかげ?か、なんと当選しました。

上の記事見返すと応募要件にこれがありますね。

本の到着後、1~2ヶ月以内に書評を書いてもらえると嬉しいです。

届いてから4ヶ月経っているので申し訳なさしかないです。

総評

先に総評を書いておきます。

この本はRuby初心者に非常におすすめです。 初心者におすすめなのですが、とても実践的です。 テスト自動化、正規表現にまるまる一章割いていることからわかります。

他にも

  • こういう書き方はあまりしない
  • これは非常に分かりづらい不具合の原因になるので使わないでください

といったことが書かれており、あまり使わない書き方にはその旨記載があります。 例えば6.5.4で「正規表現にマッチした結果は組み込み変数を使うよりMatchDataオブジェクト使おう」といった内容があります。 僕は業務でもろに組み込み変数を使って書いていた経験があり、コードを直したくなりました。


正直、プログラミング未経験者も、どうでもいいようなことを教える入門書をやるより本書をやった方がいいと思いますが、本当の未経験者には難しいかもしれません(まえがきにも書いてあります)。

僕は、Rubyを学び始めた大学3年の頃にこの本で学べていたら、もっとRubyのスキルが上がっていて、もっとRailsの理解が早まっただろうなーと強く感じました。

そして、初心者だけでなく、ある程度Rubyを書いたことがある方にもおすすめです。 僕は独学と仕事合わせて2年ほど書いていますが、知らない内容が結構多かったです。 10章のyieldとProcはいまだにしっかり理解していませんでしたが、本書のおかげで理解が深まりました。 テスト自動化やテスト駆動開発に至っては、知識は合ってもテストコードを書いたことがなかったので、そこだけでもかなりためになりました。


あとがきに

  • 本を読んで終わり、ではなく、自分の手と頭を動かして学習効果を高める。
  • 豊富なサンプルコードやていないな説明で、わかりやすい本を目指す。
  • 高度な話題ほど後半に配置して、学習の負担を少なくする。
    もしみなさんが「そう言われると、そんな気がする」と感じてくれたら、筆者の狙いは大成功です。

とあり、僕は正に「そう言われると、そんな気がする」となりました。 この本はそんな本です。

知り合いで「Rubyを学びたい、学び直したい」という人には、本書をおすすめしたいですね。

良かった点

僕が思う本書の特に良かった点は以下です。

  1. テストを学べる
  2. 正規表現がある
  3. 例題でリファクタリングをする
  4. わかりやすい/親切

テストを学べる

これは本書の入門書としての一番の特徴ではないでしょうか?

12章のうちの3章でもう「テストを自動化する」という最高の内容でした。

今の職場がテスト書かないということもあって、僕は今までテストコードを書いたことが一度もありません(Railsチュートリアルではテストを無視しました)。 そんな僕のテストコードに対するイメージは、このようなものでした。

  • 絶対にやるべき
  • 書くのめんどい
  • 誰か教えてくれ
  • 職場にテスト自動化文化を作ってくれる人を採用してほしい

やるべきだとはわかっていても、必須ではないためやらない。 学びたいけど他に優先度が高い(と思っている)ことがたくさんある。 このため、ずっとやりたなーと思っていてやっていない状態でした。

本書は、テスト駆動開発(TDD)で例題を進めていきます。 序盤の簡単な例題からテストを自動化するため、テストコードを書く負担は未経験でもほとんどありません。 そして、動作確認が驚くほど楽でした。

10章にはこんなことも書かれています。

テスト駆動開発では失敗させるステップを飛ばして最初からパスさせると、逆に不安になるんです。

テスト駆動開発をしたことがない僕からしたらまったくわからなかったのですが、その気持ちになってみたいと思いました。

正規表現がある

正規表現に一つの章まるごと割いています。

正規表現は、個人的に職種問わずPCを使う方が覚えておいた方がいいと思っています。 検索や置換で大活躍するからです。 それを入門書で合わせて学べるのは素晴らしいです。

プログラミングの経験が浅い方には「正規表現は聞いたことがあるけどよく知らず使ったことがない」という方が多いと思います。

そんな方には最高の内容です(ただし、正規表現の知識0の人は伊藤さんのQiitaの記事に飛ばされます笑)。

例題でリファクタリングをする

これも本書の特徴だと思いました。

例題では、リファクタリングをすることが何度かありました。 このおかげで「Rubyではこう書けるんだ!」と実感することができます。

わかりやすい/親切

本書は各章で

  1. その章の内容の基本を説明
  2. 例題
  3. その章の内容を深掘り

という進め方になっています。

まず基本を学び、例題はその基本的な内容を使ったものなので、理解が深まります。 そしてその後、深い内容は実際に手を動かしてから説明を読むため、理解しやすいです。

それ以外でも随所に親切な点がありました。 例えば5章の「ハッシュやシンボルを理解する」では、最初ハッシュの説明を軽く説明したら、次にシンボルの説明が入ります。

ハッシュを使う際にはほぼ確実にシンボルを使うので、当然といえば当然なのですが、シンボルを必要な分だけ説明してから、シンボルを使ったハッシュの説明になります。 読んでいて親切だなーと感じました。

悪かった点

悪かったというか良くなかったかな〜と感じた点は以下です。

  1. 例題が短い(かも)
  2. 7章と8章の例題後の内容は追加で例題があった方がいい(のでは)

例題が短い(かも)

本書の例題は、一問ずつの量は多くなく取り組みやすいのですが、少し短いかもしれないと感じました。 ただ、Rubyやプログラミング初心者にはちょうどいいか、少し多いと感じる量かもしれません。

僕は少しだけ物足りないと感じてしまいましたが、例題の内容はとても良かったです。 というか、僕は例題しか写経していなかったので、説明箇所も写経していたら、物足りなくないでしょうね。

7章と8章の例題後の内容は追加で例題があった方がいい(のでは)

7章と8章の内容はクラスとモジュールです。

そのためどちらもかなりの量があります。 しかし、例題は前半にあり、その後に例題で使っていない内容の説明が多くありました。

例題以外写経していなかった僕が悪いのですが、例題より後の内容は多いが頭に入りづらかったです。

8章と9章は例題が2つあるか、章を分けた方が理解しやすかったのでは、と感じました。


それと、テスト自動化があるのだから、いっそのことgitも含んでしまった方が初心者にはありがたいと思いました。 しかし、それだとボリューム増えすぎかつ説明するの大変になってしまうのでしょうね。 こう考えるとRailsチュートリアルはとんでもないですね。

さいごに

恥ずかしながら、僕はプログラミング系で手を動かすタイプの技術書を、一冊すべてやりきったのはこれが2冊目です。 本書をやって、技術書で学ぶのはいいなーと思えました。 いつもはなんかのサイトやって終わりですが、技術書で学ぶと体系的に学べるので、知識もスキルも身につきやすいと思います。

本書はただRubyを学ぶのではなく、プロを目指す人が必要な知識を学ぶことができます。 Rubyの入門書として本当におすすめなので、Rubyを学びたい方はぜひ手にとってみてください!

これからはRuby/Railsをより楽しく書けそうです。 伊藤さん、ありがとうございました!

最後に、あとがきに書かれていたこの文章で締めます。

プログラミングスキルを向上させるための一番の秘訣は自分でたくさんコードを書くことです。そして、上級者に自分が書いたコードをレビューしてもらえば、さらに完璧です。

余談

伊藤さんとのメールで、僕は「1月中に書評出す」と宣言しました。

しかし、ただの言い訳ですが、優先度かなり高めでReactを学ぶ必要があり、そちらを勉強していたため、「1月に出すの無理」と思っていました。

そして、自分で決めた締切を伸ばしてもらう連絡しようとしていたときです。 伊藤さんからこのようなメールが来ました。

f:id:kinchiki:20180401040427p:plain

神か!

そして年度末まで締切を伸ばしていただきました。 そのおかげで、最後まできちんと読めて、例題も全てやることができ、この記事も書けました。 本当にありがとうございます。 そして、伸ばしていただいたのに締切数分前にこの記事を公開するというクズでした申し訳ございません。

ここまでお読みいただきありがとうございました。 それではさようなら。