Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@d0ne1s

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

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の設計・リファクタリング

3
Help us understand the problem. What is going on with this article?
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
d0ne1s
RailsとTailwindが好きなフリーランスエンジニア。 Qiitaの記事検索サービスqiigle.comを運営。 最近はAWSを勉強しなおしてます。 Twitterものぞいてくれるとうれしいです🦈
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?