なかなか読む時間が取れなくて積み本になっていたのを週末に読んだので、その感想です。
ちなみに、読み終わった直後の感想はこれ。
全体の感想
Twitterにツイートしてあるように、良い本だと思う。
Railsの全体像を丁寧に説明してある本なので、Railsを触り始めたばかりの人とか、Railsをもっと知りたい人にはとてもおすすめできる本です。
あと、本を読んでいて、いくつも「あ、これ仕事でよくあるやつだ」みたいなのが書かれていて、実践的な印象を受けました。
各章の感想
ここからは各章で思ったことを書いていきます。
他の方の感想がいくつかWeb上にあったけど、みんな褒めていたので、このブログでは少し辛口のフィードバックもつけておきました 🍛🔥
絵文字は以下の分類でつけてます。
- ⭐️よかったところ
- 👻誤植、typo系
- 📝個人的に気になったところ
- ⭐️p.002 Rubyの基本的なところから説明してあるし、Rails初心者でも読みやすそう
- 👻p.036 のコード例はいくつか間違っている
- メソッド最後の後置ifはnilを返すケースがあり、意図した挙動にならない
- given_name と family_name が逆?
- 実行例は
"浦島太郎"
だけど、コード例だと "浦島 太郎"
と空白が入る
def name(full: true, with_age: true)
n = if full
"#{given_name} #{family_name}"
else
given_name
end
n << "(#{age})" if with_age
end
- ⭐️p.050 eachからmapへの説明が丁寧だ
2. Railsアプリケーションをのぞいてみよう
- ⭐️p.052 Windowsまで考慮しててすごい
- ⭐️p.055 rbenvを入れるあたり、実践的で良い
- ⭐️p.079 ルーティングからの流れを図で説明してて、良い本だ
3. タスク管理アプリケーションを作ろう
- ⭐️slim、bootstrapを使っていて実践的だなーと思った
4. 現実の複雑さに対応する
- ⭐️p.128 マイグレーションの名前の付け方。初心者は嵌りそうなやつ。
- ⭐️p.129
migrate:redo
を紹介されてる。そうそう、大事なやつ。
- ⭐️p.130 DB制約とバリデーション大事。
- ⭐️p.145 コールバックの説明が分かりやすい
5. テストをはじめよう
- ⭐️p.188 RSpec、Capybara、FactoryBot の組み合わせは実践的で良いと思った
- 📝p.198
factory :user
で email が固定値になっていて微妙
- ユニーク制約がかかっているカラムは
sequence
を使うべき
6. Railsの全体像を理解する
- ⭐️p.226 Railsで開発していく中で必要そうな技術の用語が並んでいて良い
- 📝p.238 多言語対応の説明してあるけど、コード例はコントローラーに日本語書いてあって中途半端
- ただ、初心者向けの書籍で完全な多言語対応するのも限度あって難しそう
- 「多言語化しようとして序盤はlocale使うけど、途中で諦めてコントローラーに日本語書いてる案件」は多いし、ある意味では実践的?
- 📝p.249 「ルーティングで発生した例外」に対して言及しているのに、それに対する対処方法がないのモヤっとした
- ⭐️p.250 ロガーの話してるの良い
- ⭐️p.253 セキュリティに関して丁寧に説明していて良い。新人に読ませたい
- ⭐️p.278 5.2 で導入されて色々な議論を生んだ Credentials だ 🔑
- 📝p.284 そして、一切触れられなかった ActionCable さん...
7. 機能を追加してみよう
- ⭐️p.291 確認画面について言及しているの良い
- 📝p.292 ransack は簡易的な実装としては良いけど、Elasticsearch とかのちゃんとした対応について言及して欲しかった
- ransack を入れた後、パフォーマンスの問題が出て誰かが直す事に...
- ただ、 ransack で検索条件を絞る話を書いてあるのはすごく良い。大事なので。
- 📝p.299 TaskMailer#creation_email のメソッド名にある email が冗長な気がする
- とはいえ、他に良いメソッド名は思い浮かばない
- メーラー周りの命名はいつも悩むけど、未だに良い命名規則を見つけられていない
- 📝MailerPreview は紹介されていなかった
- htmlメールの見栄えを確認できて便利なやつなので、ぜひ改訂版では1ページぐらい紹介してあげて欲しい
- 📝p.304 text/html のテストが全く同じだけど、htmlの方は「タグの有無」くらいテストした方が良いのでは?
html_body
の中で content_type みてるし、要らないのかもしれない
- ⭐️p.306 ActiveStorage の説明が最低限はあった
- purge や with_attached_image の説明がないのは少し残念
- ⭐️p.312 CSVのインポート・エクスポート。顧客から「Excelでみたい」って言われたときに作るやつですね
- 📝p.312 CSVのエクスポートは件数増えると重くなるので、普通にpostしない方が良い
- CSVエクスポートの要求を受けつけて、非同期処理でCSVを作って、作り終わったら画面にダウンロードリンクを出す
- 📝p.316 自分ならコントローラーに
import
アクションを作らず、 Tasks::Importings#create とかにするなー
- 👻p.327
set(wait:1.week)
は他コードに合わせてスペース入れた方が良い
- ⭐️p.340 Turbolinks の良い点、ハマりどころが丁寧に書かれていてすごく良い
- Turbolinks はやれば出来る子なんです
- みんなすぐ無効にするけど
- ⭐️p.347 Webpacker のメリット、デメリットを紹介してるのも良いですねー
9. 複数人でRailsアプリケーションを開発する
- ⭐️p.354 実際の仕事の流れを追体験できて良いなと思った
- 📝p.362 database.yml をGit管理しない場合、CIの設定やデプロイフローが複雑になってしまう
- 個人的には database.yml をGit管理しておき、何か変えたい場合は
DATABASE_URL
で調整する方が好きかな
- ⭐️p.366 git-bisect に言及してるの最高に良い!
- 📝p.367 rebaseは英語で、マージがカタカナなのが少し気になった
- Gitの書籍だと「リベース/マージ」とカタカナ統一な気がする
- ただ、仕事だとrebase/マージって書いてる人が多い印象
- ⭐️p.378 マイグレーションの話が丁寧
- 📝p.382 ridgepole を紹介しても良いかも、と思った
- 👻p.386
Order. find_each
と半角スペースが入っていた
- ⭐️p.387 スキーマキャッシュの説明があるの良い
10. Railsアプリケーションと長く付き合うために
- ⭐️p.392 バージョンアップ大事
- 👻p.393
bundleupdate
スペースが無い
- 📝p.403 自分なら Articles::PublicationsController を作るかな
module Articles
class PublicationsController < AppliationController
def create
@article = Article.find(params[:article_id])
publication = Articles::Publication.new(article: @article)
if publication.save
redirect_to @article, notice: '記事を公開しました'
else
message = publication.errors.full_messages.first
redirect_to @article, alert: message
end
end
end
end
module Articles
class Publication
include ActiveModel::Model
attr_accessor :article
validate :must_be_draft
def save
return false if invalid?
set_expires_at! if article.limited?
update(status: 'published', published_at: Time.current)
end
private
def must_be_draft
errors.add(:base, '下書きの記事のみ公開にできます') unless article.status == 'draft'
end
def set_expires_at!
article.expires_at = (article.published_at + 3.months).end_of_month
end
end
end
- 📝p.414
upload_image
ってアクションを持つコントローラー?
- どんなルーティングを想定しているのかよく分からなかった
- ⭐️p.416 ApplicationController に実装して、後から Module に抽出するの実践感あって良い
- 👻p.444 ルーティングとコントローラの実装が不一致
- たぶん
GET /order_csvs.csv
がエクスポートで、 POST /order_csvs
がインポートかな
- そうなるとルーティングが
only: %i(index create)
になるのが正しそう
resources :order_csvs, only: %i(index update)
class OrderCsvsController < ApplicationController
def index
end
def create
end
end
- ⭐️p.450 最後の「使うべきか議論の余地が大きいメソッド」で笑った。〆が良い
最後に
良い本だなーと思ったので、気になったところやtypoに気づいたところはフィードバックのためにもブログ書いた。
このブログが著者の目にとまって、何かしら本に反映されたら嬉しい。