Railsのリファクタリングの記事は、良記事がたくさんあります。
でも「初心者向け」を謳っているにしては項目が多くて、いきなり全部を意識するのは無理だなってなりました。初心者向けって謳い文句の記事に、自分のできていないことがたくさん書かれていると「お前は初心者以下だ」って言われているみたいでちょっと嫌な気持ちになりますね。
他の方が書いた記事の中から、私がまず意識しようと思ったことをピックアップしてまとめようと思います。
##controllerを薄く、modelを厚く
可能な限り処理をメソッドとして切り出して、controllerを薄くします。
modelがFatになることは、最初は目をつぶります。
##viewの中の処理をhelperに移す
viewの中に処理がゴチャゴチャと書かれていると、コードが混沌としてしまうので。
##パーシャルを使う
パーシャルを使って、可読性と再利用性を上げます。
※使いすぎるとパフォーマンスが下がるので注意
##繰り返し使う文字列をlocaleに定義する
コードをDRYに。時刻のフォーマット等もlocaleを使い、strftime
は基本使わない。
##コードの行数を減らす
基本的に以下の記事からのピックアップです。超良記事なのでまだ読んでいない人はぜひ。
[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか
最初はとっつきにくくても、短く書ける記法はどんどん使って慣れていくべき。慣れたら難しくないものも多そうだし、他の人が書いたコードを理解する能力も上がる。
とはいえ全部いきなりは大変なので、まずは以下を意識する。
###なるべくネストしない
早めにreturnで返すなど、出来るだけネストを減らすことを意識します。
###後置if
send_mail_to(user) if user.active?
###三項演算子
user.admin? ? "I appreciate for that." : "Thanks"
###ぼっち演算子
#if parent.children && parent.children.singleton?
if parent.children&.singleton?
||=でnilだった場合のみ代入
@twitter_client ||= Twitter::REST::Client.new
##その他書き方
###if + notではなく、unless
user.destroy unless user.active?
条件にorとかandが含まれる時は複雑になるのでif
を使う
###戻り値を返すときにreturnを使わない
def build_message(user)
message = 'hello'
message += '!!' if user.admin?
#return message
message
end
###+ではなく#{ }
#"Hello, " + user.name + "!"
"Hello, #{user.name}!"
##%w( )、%i( )
#actions = ['index', 'new', 'create']
actions = %w(index new create)
#actions = [:index, :new, :create]
actions = %i(index new create)
##いつかやる
・他の便利な文法いろいろ
・RESTなcontrollerを意識する
・Concern(controllerで共通で使う処理をまとめるやつ)を使う
・デコーダー?ViewModel?
・サービスクラス?
##参考
[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか
脱Rails初心者のためのリファクタリングガイド
実務で学んだRailsの設計・リファクタリング