Rubyちゃんこんにちわ

子育てエンジニアが綴る

Growing Rails Applications in Practice を読んだメモ

よりよい Rails の書き方ってどんなのかなーというのはいつも模索していて、比較的安かったのと、ページ数が少なかったので読み切れそうという判断で買った。 “Gems increase the cost of upgrades” なんていう章があったのも購入の決め手。

Growing Rails Applications in Practice

精読はできていない。他に読みたいのもあるので、早く読み終えるためにも、細かいところは飛ばし読み。

本の概要

本の主張としては大きなアプリになっても複雑度を上げないために、コードをどうしていくべきかということが書いてある。コードは Rails の既存資産を生かした方法。すなわち Rails を知っている人が新たな知識必要なしに理解できるコードにしていこうという方針。

こんな gem を使えば楽になるとか良く聞いたりするけど、そういったものはその gem のための新しいルールを覚える必要があったりなので、そういった方針は取らない。 と思ったら active_type なんてのが出てきた。。。でも出てくるのはこれくらいだし、必ず使ってという訳ではない。

コードはなるべく model に寄せて、太ってしまった model からは、継承、service object に切り出してダイエットしましょうというのが大まかな流れ。

個人的に気になった/参考になった点

コードの理解を容易にするため統一した方法にする

Rails の scaffold で出力されるようなコードになるべく寄せましょうという感じ(本書の中では scaffold で生成されるコードをもう少しカスタムしていました)。そうすることで後からプロジェクト入った人も既存の Rails 知識で何となく分かる。

そのため例えば Form オブジェクト(table なしのモデル)でも、以下のように save メソッドを controller で使う。

1
2
3
4
5
6
7
def create
  if @sign_in.save # @sign_in が Form オブジェクト
    # success
  else
    # fail
  end
end

Form オブジェクトが#saveって凄い違和感なのですが、まー大規模なアプリで統一させるとなるとこれくらいやる方がいいかもですね。 個人的にはそこまで大規模なアプリ書いてないのと、違和感あるのでこれは参考程度だなと思う反面、現場のアプリは実装時期や人によって controller の書き方が異なっていたりで、上手いこと中間点見つけたい気はしている。

BEM

CSS の設計手法に BEM(Block, Element, Modifier) というのがあって、それについて章という単位では一番多くのページを割いて説明されていました。 BEM について、どういうものか理解したのはこの本が初めてだったので参考になった。 ただ、CSS も副作用で色々壊れるってのは分かるのだけど、あえてこの本に載せなくてもいいんじゃないかなーという気がしないでもない。

いまどきのCSS – OOCSSとかBEMとかSMACSSとか

BEM 以外にも何かあるんですね。

役割の列挙と分割

どの章か忘れてしまったのだけど、複雑な処理をしている model(controller だったかな?) の役割を列挙していて、基本に立ち返るのは重要だなと思った。

この本を買った目的の一つでもあるのだけど、今複雑になってしまっているアプリを改善したいなという思いがある。でもそれって自分が無意識に銀の弾丸探しちゃってるんじゃないのって、その章を読んでふと気づいた。そんなものを探すよりは、複雑になっている処理を理解して、役割を列挙していって分割すればいいだけなんじゃないかと。

ということで次は隙を見て役割列挙と分割をしてみることにする。

その他

Rails のアップグレード、gem の選定方法、test の章とかは大体そーだねーという感想。

所感

今書いているアプリのコードを良くさせるヒントは得れたかなという感想。 本自体はもう少しコードあるといいかな。最近だと書籍内のコードを github で公開している本なんてのも多いので。

全体的に読みやすい感じだし、ページ数短いのでサラッと読むのにいいかなと。 はー、ページ数多い本どうやって消化していこうかな。