LoginSignup
1
0

More than 3 years have passed since last update.

Rails 初心者から抜け出すべく意識すること (※随時追加予定)

Posted at

コードが動けばいいやの時期はそろそろ終わりたい
と思い、調べてメモする

また業務でおこなっていて指摘されることも書きます

Ruby編

メソッド

1つのメソッドに複数のロジックを書かずに別のメソッドに抽象化させる
ロジックや操作ごとにメソッドを作って、それを呼び出す形にする

例) if文で条件により操作を分岐させているときに、
2つ以上の操作をそのメソッド内に直接書くのではなく、
操作ごとにメソッドを作って、それを呼び出す形にする

定数

ロジックで用いる具体的な数字は定数に格納する

ロジックを作るときに、生の数字を書いてしまうと初見の人には伝わらない
名前をつけた定数に格納することで、その数字が何を意味するのか分かる

例) 税 TAX = 10
基本ストレージ DEFAULT_STORAGE = 5 など

Rails

Routing

ルーティングの書く順番だけではなく**ネストできるところはする::

独自URLを設定しているルーティングは
resourcesにネストして書いた方が分かりやすくなる

config/routes.rb
Rails.application.routes.draw do
  resources :posts do
    resource :likes
  end
end

Controller

ルーティングのresourcesにonlyやexpectオプションを付けることで、
どのリソースを使っているかを可視化する

クラスを継承してsuperメソッドを使う

publicメソッドはアクションのみに

処理の移動先は基本Model
Modelへの移動とリファクタリングを同時にするのが厳しそうな場合は、
アクションの中身を一旦全てModelに映してから
必要に応じてControllerに戻す、という手順を取るのも良い

Model

ビジネスロジックはmodelに書く
concerns/に置くのはあくまで複数のmodel間で共通する処理
クラスをまたぐ処理はconcernに

同ファイル内でmodule化する
複数のクラスで使いたい処理のまとまりはconcern化して、取り込むクラスにmix-inする

複数のmodelにまたがる処理はservice層に書く

modelからデータを取り出す方法としてscopeを使う
その場合、where句を多用して条件を毎回書かなくても、scopeに定義すればメソッドのように使える

View

共通パーツ化(部分テンプレート、partial)するのと、
viewにロジックを書かない(ヘルパー、helper)

Helperメソッドに定義する
viewにはなるべくロジックを書かない、見た目に関するメソッドはヘルパーに記載する

ページごとのjsファイルに分離する
erbファイルにスクリプトタグを仕込みかかない

viewに直接styleを記述しない

js専用のclassはjs-プレフィックスをつけて区別する

その他

繰り返し使う文字列をlocaleに定義する
時刻のフォーマット等もlocaleを使い、strftimeは基本使わない
金額や距離、日付等も指定できる

なるべく短い書き方、リファクタ
→後置if、三項演算子、ぼっち演算子、nilガード、%記法など

参考記事

https://qiita.com/TOSHIMITSU_MIYACHI/items/fec069bcdf23b6be7623
https://qiita.com/d0ne1s/items/fabbc0df7c273cf04fc3
https://qiita.com/shunsuke227ono/items/60de21690238aa25e9d4

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0