ジャバ・ザ・ハットリ
Published on

他人のコード読むのが好きじゃない私だが、いくつかのRailsのコードだけはよく読んで参考にしている

Authors
  • avatar
    ジャバ・ザ・ハットリ

他人の書いたコード読むのがあまり好きじゃない私だが、いくつかの Rails プロジェクトのコードだけは自分のフォルダにクローンしてよく読んで参考にしている。

「この世でもっとも理想的な Rails プロジェクトのソースコードってどんなのだ?」「どこかにそういうコードないの?」というのが Rails をある程度マスターした後で考えていたことだった。

会社の中にもそれなりのコードがあって、それはそれでいいのだけど、なんか違う。普段の仕事のやり方や技術者独自のクセなんかを知ってしまっているから「アイツってこういう書き方好きだなー」とか「ホントにこれが理想の形か?」の疑問が残ってしまう。文献を調べても GitHub のパブリップリポジトリを見ても、どれもたすきに長く帯に短し。
よくある Ruby on Rails を学ぼう、レッスン1とかのサンプルコードでは極端にコード量が少ない。確かに理想形を示しているが、Model 見ても2つだけとか。そんな少ないコード量だとツッコミどころも無いわ、と。もっと Model が 10 とか 20 を超えてきて、コードがぐちゃっとなりかけている際に「こうすればいいのヨ!」と示してくれる例が欲しかった。
でもコード量が多ければいいってもんじゃない。あまりに巨大かつ複雑なコードで「そんなもん勉強で読むには大き過ぎるんだよ!」とういのとか。
そういうある程度の Rails は分かった上でさらに上のレベルを目指す際にいいコードというのがあって、それはひとそれぞれだが、私にとってはこれとか。

trailmix

まず言えることはあるレベル以上になるとそれぞれのエンジニアの思想が出てくる。その思想が気に入ったのを自分の理想とすべきだ、と。で、このコードは私の理想と一致しているし、なによりコードを読んでいて気持ちがいい。「そうそう、こうするべきよねー。こう言ってはナンだが私もそう思っていたのよ」という気持ちになる。

例えばこちらが 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(クラスの抽出)がふんだんに使われている。クラスの抽出は初心者があまりやりたがらないことのひとつだが、これをすることで読みやすさが激変する。

とはいっても全てが理想的というか自分の考えと一致する訳でもないので、あくまでこれも一例としつつ、他にもいいコードがあれば自分のフォルダーにクローンして、時々読んで勉強するようにしている。

パーフェクト Ruby on Rails
パーフェクト Ruby on Rails
作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
出版社/メーカー: 技術評論社
発売日: 2014/06/06
メディア: 大型本