他人のコード読むのが好きじゃない私だが、いくつかのRailsのコードだけはよく読んで参考にしている
移転しました。
他人の書いたコード読むのがあまり好きじゃない私だが、いくつかのRailsプロジェクトのコードだけは自分のフォルダにクローンしてよく読んで参考にしている。
「この世でもっとも理想的なRailsプロジェクトのソースコードってどんなのだ?」「どこかにそういうコードないの?」というのがRailsをある程度マスターした後で考えていたことだった。
会社の中にもそれなりのコードがあって、それはそれでいいのだけど、なんか違う。普段の仕事のやり方や技術者独自のクセなんかを知ってしまっているから「アイツってこういう書き方好きだなー」とか「ホントにこれが理想の形か?」の疑問が残ってしまう。文献を調べてもGitHubのパブリップリポジトリを見ても、どれもたすきに長く帯に短し。
よくあるRuby on Rails を学ぼう、レッスン1とかのサンプルコードでは極端にコード量が少ない。確かに理想形を示しているが、Model見ても2つだけとか。そんな少ないコード量だとツッコミどころも無いわ、と。もっとModelが10とか20を超えてきて、コードがぐちゃっとなりかけている際に「こうすればいいのヨ!」と示してくれる例が欲しかった。
でもコード量が多ければいいってもんじゃない。あまりに巨大かつ複雑なコードで「そんなもん勉強で読むには大き過ぎるんだよ!」とういのとか。
そういうある程度のRailsは分かった上でさらに上のレベルを目指す際にいいコードというのがあって、それはひとそれぞれだが、私にとってはこれとか。
まず言えることはあるレベル以上になるとそれぞれのエンジニアの思想が出てくる。その思想が気に入ったのを自分の理想とすべきだ、と。で、このコードは私の理想と一致しているし、なによりコードを読んでいて気持ちがいい。「そうそう、こうするべきよねー。こう言ってはナンだが私もそう思っていたのよ」という気持ちになる。
例えばこちらがUser Model
class User < ActiveRecord::Base has_many :entries, dependent: :destroy has_many :imports, dependent: :destroy has_one :subscription, dependent: :destroy before_create :generate_reply_token delegate :stripe_customer_id, to: :subscription def self.promptable(time = Time.zone.now.utc) where(prompt_delivery_hour: time.hour) end def reply_email "#{reply_token}@#{ENV.fetch('SMTP_DOMAIN')}" end def generate_reply_token self.reply_token = ReplyToken.generate(email) end def newest_entry entries.newest end def prompt_entry PromptEntry.best(entries, time_zone) end def prompt_delivery_hour PromptDeliveryHour.new(super, time_zone).in_time_zone end def prompt_delivery_hour=(hour) super PromptDeliveryHour.new(hour, time_zone).in_utc end end
見事に1メソッド1行が徹底されている。全部ではないけど基本的にメソッドの中の行数が少なくて、それが様々な工夫でそうなっている。だからとても読みやすい。私をこれを見て、自分のコードで3行以上あるメソッドを全て書き直した。
またExtract Class(クラスの抽出)がふんだんに使われている。クラスの抽出は初心者があまりやりたがらないことのひとつだが、これをすることで読みやすさが激変する。
とはいっても全てが理想的というか自分の考えと一致する訳でもないので、あくまでこれも一例としつつ、他にもいいコードがあれば自分のフォルダーにクローンして、時々読んで勉強するようにしている。
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る