koheitakahashiのブログ

2020.07.01にプログラマーとして生を受けた私が学んだことや、日常について徒然に書いていきます。

『パーフェクト Ruby on Rails【増補改訂版】』を読了しました

はじめに

Railsプログラマーとして生を受けてから早2ヶ月。
まだ研修期間ではありますが、日々「私はRailsのこと何も分からない」ということを思い知ります。

「Railsの基本的なところはもちろん復習したい」、そして「Railsガイドよりも現場に寄った内容も学びたい」と思い、本書を手に取りました。

本書を読んで学んだことと感想をまとめたいと思います。

本書の章立て

本書は以下のような章立てで構成されていました。

第1章 Ruby on Railsの概要

第2章 Ruby on RailsとMVC

第3章 押さえておきたいRailsの基本機能

第4章 フロントエンドの開発手法

第5章 Rails標準の機能を活用して素早く機能実装する

第6章 Railsアプリケーション開発

第7章 Railsアプリケーションのテスト

第8章 Railsアプリケーション拡張

第9章 コードの品質を上げる

第10章 コンテナを利用したRailsアプリケーションの運用

第11章 複雑なドメインを表現する

第12章 複雑なユースケースを実現する

第13章 複雑なデータ操作を実現する

各章ごとの感想

第1章 Ruby on Railsの概要

バージョンを指定してインストールすることや、rake statsなどは初めて知りました。

第2章 Ruby on RailsとMVC

第1章に引き続き、初めて知ったことが多かったです(variantstime_ago_in_wordsnumber_with_delimiterなど)。

特にtime_ago_in_wordsは使いどころが多そうだと思いました。知れて良かったです。

第3章 押さえておきたいRailsの基本機能

正直なところ、RackについてはアプリケーションサーバーとRailsの間に立ってリクエストとレスポンスをRailsが扱いやすいように変換してくれるモノだという程度の理解しかしてませんでした。

本章では「Rackにより何が解決されたのか」・「実際にRackミドルウェアはどのように作るのか」ということがまとめられていて勉強になりました。

また、Early HintsやCSPなどは本書で初めて知りました。

Early Hintsはレスポンスを送る前にヒントを出して、アセットのダウンロードを早めにしてもらうことでページ描画までの時間を短縮するための方法。
CSPは安全にJavaScriptを実行するための仕組み。

と、それぞれ理解しました。

第4章 フロントエンドの開発手法

stimulusのことを知らなかったのですが、使い方が丁寧に書かれており分かりやすかったです。

ただ、実際にstimulusを用いてコードを書けるようにはなっていないため、stimulusを使う時になったら改めて動かしてみて理解していきたいです。

第5章 Rails標準の機能を活用して素早く機能実装する

Active Job・Active Storage・Action Miler・Action Mailbox・Action TextなどのRailsの機能の使い方が紹介されている章でした。

特に参考になったのは、Action Mailboxについての説明です。
Railsガイドにあまり詳しく載ってなかったような気がします。そのため、使われ方があまりイメージできていませんでした。

本章では、実際にどのように書くのかが記載されており、Action Mailboxの使い方・実装がイメージできました。

第6章 Railsアプリケーション開発

Railsでイベント管理アプリを作るならどのように作っていくかということが、具体的なコードと共に説明されていてる章でした。

特に印象に残ったのは、本章の最後に書かれていた以下の内容です。

その機能を学ぶ際は、単純に丸暗記するのではなく「なぜこのような機能があるのか」を積極的に調べるようにしましょう。Railsが提供している機能の多くは、Webアプリケーション開発全般で使えるベストプラクティスです。

ウェブで検索したやり方を深く考えずにそのまま使うようでは経験値は増えにくいです。大事なのは常に複数の選択肢があることを念頭に置いて、このやり方がベストなのか?なぜこの実装にするのか?を考えることです。

P344より

度々、上記のような「機能の背景」を理解せずにスッ飛ばしている時があるので、折に触れてこの心構えを思い出していきたいです。

第7章 Railsアプリケーションのテスト

system testでできることについて、本章では以下のようにまとめられていました。

  • ブラウザ上でJavaScriptの動作まで含めて確認
  • フォームへ値を入力して登録する時の動作を確認
  • 失敗した時の画面スクリーンショットを撮る

私は、なんでもかんでもテストしたくなってシステムテストを書きすぎてしまいます。
そのたえ、上記のようなsystem testでできること、model testでできることを意識して書きたいと思いました。

第8章 Railsアプリケーション拡張

この章は、外部ライブラリを使ってRailsの機能を拡張していくという内容でした。

内容はもちろん勉強になりましたが、コラムとしてgemの選び方についても触れられているのが有り難かったです。
自分はどのような基準でgemを使ったら良いかということが、まだ分からなかったので、それがまとめられていたのは助かりました。

第9章 コードの品質を上げる

Railsを用いた開発現場では実際にどのようなgemやツールが使われているのかが、まとめられている章でした。

私はまだ現場での開発経験がほとんどないので、「本章で紹介されているgemやツールを知っておけば良いのかな」という心構えができました。

第10章 コンテナを利用したRailsアプリケーションの運用

名前こそ多く耳にするDockerですが、触ったことがありませんでした。
本章を読むことで、Dockerがどのように使われているのか、どのように設定を書くのかということの一端を知ることができて良かったです。

Dockerとは、スクリプトを実行していくことで環境を構築していくツールだと理解しました。
しかし、触ってみないと分からないので必要となったときに改めて学びたいです。

第11章 複雑なドメインを表現する

複雑なドメインに対応するために、値に関連するロジックをまとめた値オブジェクトを作ったり、サービスオブジェクトを作ったりすることが述べられていた章でした。

サービスオブジェクトとは、複数のオブジェクトを組み合わせたロジックを実装するための状態を持たないクラスと理解しました。
言葉としては聞いたことがあったのですが、どのようなものかはイマイチ理解していなかったので、勉強になりました。

第12章 複雑なユースケースを実現する

複雑なユースケースに対応するために、フォームオブジェクトやプレゼンターを使うという内容でした。

この章の内容は、私が実際に直面した問題だったので実感を伴って理解できた感じがあります。

第13章 複雑なデータ操作を実現する

複雑でコード全体に散らばっているロジックを、concernを使うことでまとめるという内容でした。

正直なところ、concernについては「何となくこういうモノか」というのは分かったのですが、具体的なことは理解できませんでした。
これから実際にコードを書く中で理解していけたらと思います。

全体的な感想

基本的なことから実務的なところまで幅広くまとめられた本で、大変勉強になりました。
基本的なところであっても実は知らなかったということが多く、良い復習になりました。

特に、10~13章の内容が自分にとってとても役に立ちました。

現実の複雑な問題にどのようにアプローチしていけば良いのか、そのためにどのようなRailsの機能を使って、どのようにコードを書いていけば良いのかということを知ることができました。

ただ、10~13章の内容は字面では理解できましたが実感を伴って理解できたとは言えません。
サービスオブジェクトやconcernなどが、実際に必要となった時に読み返したいと思いました。