はじめに
Rubyの学習として「プロを目指す人のためのRuby入門」を読んだので、感想をまとめました。
本書の良かったところ
とにかく説明が丁寧でわかりやすい
著者の伊藤淳一さんが「分厚いが非常にわかりやすい技術書」を目指していると言っている通り、丁寧かつ著者の言葉で噛み砕いた説明がされているため、本書からRubyを本格的に学び始めた私でも読み進めるのが苦になることは全くありませんでした。これからRubyを始めようと思っている人におすすめの技術書であると感じました。
よく使われる表現/おすすめしない表現が紹介されている
「1つのことをRubyで実現するために、様々な方法がある中でどれを使うのがいいの?」と思う場面で、 「この方法を使うようにするのが良いでしょう」や、「特別な理由がない限りこうしたコードを書くことは避けましょう」など、実際に使われることが多い表現を明記してくれているので、開発の現場で使われている表現をしっかり学ぶことができました。
各章を順番に読み進めていくことで着実に知識を習得できる
本書全体の構成として、簡単な内容から難しい内容へと進んでいくため、頭から読み進めていけば開発の現場で必要とされるRuby関連の知識を基礎から一通り学ぶことができます。
また、例題がある章の構成として、「例題を解くために必要な内容」→「例題」→「例題には使われなかった高度な内容」と段階を踏んで難易度が上がっていくため、着実に知識を習得することができました。Rubyの入門書として非常に考えられた構成であると感じました。
学んだこと
各章で学んだことを簡単にまとめました。
第1章 本書を読み進める前に
第1章ではRubyの概要と環境のセットアップ方法を学ぶことができました。
また、わざわざrubyファイルを作成するほどでもないちょっとしたコードの動作確認をする方法として、irbというREPL(Read-eval-print loop、対話型評価環境)を使うことで、動作結果をターミナル上で直接確認できるのは便利だと感じました。
第2章 Rubyの基礎を理解する
第2章ではRubyで文字列、数値、真偽値、条件分岐、メソッドを扱う方法を学ぶことができました。
また、その他の基礎知識として、「Rubyの変数にはオブジェクトそのものではなく、オブジェクトへの参照が格納されているという概念」、「組み込みライブラリではない標準ライブラリやgemを使うためには、require
やrequire_relative
で明示的にライブラリを読み込む必要があること」、「ターミナルへの出力する時に使うputsメソッド、printメソッド、pメソッド、ppメソッドはそれぞれ挙動が違う」などが個人的に印象に残りました。
第3章 テストを自動化する
第3章ではテストを自動化することの重要性を学ぶことができました。
テストコードと聞くと初学者の私は「プログラムを作るより難しそう」と感じました。しかし、Rubyにはテスト用のフレームワークが複数あり、今回学んだMinitestは特別なセットアップは不要、かつ簡単な検証メソッドでプログラムのテストを行うことができたので、テストコードに対する心理的なハードルが低くなりました。
プログラムの実行結果を目視で何度も確認するよりも、テストコードによる検証を行った方が正確であり、自分の作ったプログラムにバグがないと自信を持って言える根拠にもなると感じました。
第4章 配列や繰り返し処理を理解する
第4章では配列、ブロック、繰り返し処理を扱う方法を学ぶことができました。
また、例題ではテストコードを使いながらリファクタリングを行っていくテスト駆動開発の開発サイクルを体験することができました。最終的に例題のプログラムを1行で実装できたので、プログラミングは奥が深いと感じました。
この章の内容はRubyにおいて使用頻度がとても高いので、曖昧な理解である所は本書を読み返して定着させる必要があると感じました。
第5章 ハッシュやシンボルを理解する
第5章ではハッシュとシンボルを扱う方法を学ぶことができました。
ハッシュのキーがシンボルになる場合はシンボル:値
でハッシュを作成できるが、シンボル単体では:シンボル
であるため、表記の違いに慣れるのが大変だと感じました。
また、「ハッシュの説明」→「シンボルの説明」→「ハッシュのキーにシンボルをよく使う」という流れは内容の理解がしやすく感じました。
第6章 正規表現を理解する
第6章では正規表現の便利さを学ぶことができました。
初めて正規表現を見た時は呪文にしか見えませんでしたが、それぞれのメタ文字には意味があり、複数のメタ文字を組み合わせることでパターンを作成しているということがわかりました。
第7章 クラスの作成を理解する
第7章ではオブジェクト指向プログラミングの基礎を学ぶことができました。
各章の中でも第7章が一番ボリュームがあり、クラスの定義/継承方法、様々な種類の変数、メソッドの可視性と重要かつ必要な知識がかなり多かったですが、それぞれの説明がとてもわかりやすく書かれていたので、クラスに関しては本書の内容のみでしっかり理解ができると感じました。
第8章 モジュールを理解する
第8章ではモジュールを扱う方法を学ぶことができました。
モジュールはインスタンスを作成する必要がないメソッドを実装する場合に使うものとわかりましたが、小規模のプログラムでは使用機会が少ないそうなので、必要になったときに苦戦しそうな予感がしました。
第9章 例外処理を理解する
第9章では例外処理を扱う方法を学ぶことができました。
例外はrescue
を使うことで処理を続行できるが、プログラムとしては正常ではない状態であるため、無闇に使用せず、原因の調査と改善をすることが重要であると理解しました。
また、resucue
を使う場合は、後で原因調査ができるようfull_message
を使ってログを残すというのも勉強になりました。
第10章 yieldとProcを理解する
第10章ではyield
、Proc
、lambda
を扱う方法を学びました。
ブロックやProcオブジェクトを引数として渡すことができるというのをなんとなく理解できましたが、慣れるまで使いこなすのは難しそうと感じました。
第11章 パターンマッチを理解する
第11章ではRuby3.0で導入されたパターンマッチを扱う方法学びました。
配列やハッシュを条件分岐する際は、case文よりもパターンマッチの方が簡潔に書くことができるため、積極的に使いたいと思います。
第12章 Rubyのデバッグ技法を身につける
第12章ではデバッグ技法について学びました。
バックトレースの読み方とよく発生する例外クラスとその原因を学んだことで、エラー内容をより理解できるようになったと感じました。
また、バックトレースの読み方の理解だけでなく、プログラムの途中経過を確認し、どこでおかしな挙動をしているかの特定ができるようにデバッガを使いこなせるようになりたいと思いました。
第13章 Rubyに関するその他のトピック
第13章では本書には書ききれなかったRubyの関連技術をざっくり学ぶことができました。個人的にはBundlerを使ってgemの管理をする内容と、「素のRuby」と「Railsの中のRuby」で考え方が異なることが印象に残りました。
Bundlerを使うことでgemを一つずつインストールする必要はなくなり、バージョン管理もできてしまうのでとても便利であると感じました。
また、Railsではrequire
やrequire_relative
を書く機会がなくなるなど、RubyとRailsで考え方が異なるものがあるので、Rubyの知識とRailsの知識はしっかり切り分けることを意識して学習を進めていきます。
まとめ
本書は非常にボリュームがありますが、わかりやすい説明と途中で挫折しないような工夫がされているので、Rubyを学びたいと考えている人には迷わずお勧めできる本であると感じました。今後、本書を何度も読み返しながらRubyの知識をしっかりと定着させていきたいです。