コードが動けばいいやの時期はそろそろ終わりたい
と思い、調べてメモする
また業務でおこなっていて指摘されることも書きます
Ruby編
メソッド
1つのメソッドに複数のロジックを書かずに別のメソッドに抽象化させる
ロジックや操作ごとにメソッドを作って、それを呼び出す形にする
例) if文で条件により操作を分岐させているときに、
2つ以上の操作をそのメソッド内に直接書くのではなく、
操作ごとにメソッドを作って、それを呼び出す形にする
定数
ロジックで用いる具体的な数字は定数に格納する
ロジックを作るときに、生の数字を書いてしまうと初見の人には伝わらない
名前をつけた定数に格納することで、その数字が何を意味するのか分かる
例) 税 TAX = 10
基本ストレージ DEFAULT_STORAGE = 5 など
Rails
Routing
ルーティングの書く順番だけではなく**ネストできるところはする::
独自URLを設定しているルーティングは
resourcesにネストして書いた方が分かりやすくなる
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