Help us understand the problem. What is going on with this article?

【Rails】中級者になるためのリファクタリング

Railsのリファクタリングの記事は、良記事がたくさんあります。

でも「初心者向け」を謳っているにしては項目が多くて、いきなり全部を意識するのは無理だなってなりました。初心者向けって謳い文句の記事に、自分のできていないことがたくさん書かれていると「お前は初心者以下だ」って言われているみたいでちょっと嫌な気持ちになりますね。

他の方が書いた記事の中から、私がまず意識しようと思ったことをピックアップしてまとめようと思います。

controllerを薄く、modelを厚く

可能な限り処理をメソッドとして切り出して、controllerを薄くします。
modelがFatになることは、最初は目をつぶります。

viewの中の処理をhelperに移す

viewの中に処理がゴチャゴチャと書かれていると、コードが混沌としてしまうので。

パーシャルをどんどん使う

パーシャルを使って、可読性と再利用性を上げます。

jsはjsファイルに

ページごとのjsファイルを作り、そこに書く。

繰り返し使う文字列を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の設計・リファクタリング

d0ne1s
24歳男。プログラミング / Webデザイン / 個人開発 / MCバトル
https://note.mu/d0ne1s
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。
https://admin-guild.slack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした