384 Views
September 05, 25
スライド概要
Professional Ruby and Rails programmer in Tokyo.
Railsのcontrollerに CRUD以外定義するな 委員会活動報告 @Omotesando.rb#113
もとつねの日常 @daily_mototsune Ruby on Railsを中心に扱っているフリーランスエンジニア ドメインモデリングからAWSでの運用、スクラム運営やチームビルディ ングなどなど楽しくやらせてもらってます 普段はOmotesando.rbやGinza.rbによくいます 🍷♨✈🏎
今日はRailsの話です
外部からのリクエストを ハンドリングする Controller
publicなインスタンスメソッドは CRUD以外定義しないでください
今日の話は以上です。
CRUDとは - Create Read Update Delete
CRUDとは - Create => #create Read => #index, #show Update => #update Delete => #destroy
なぜCRUD以外定義しては いけないのか
RailsはRESTfulな設計を前提としている - REpresentational State Transfer - - Addressability Stateless Connectability Uniform Interface routesでresourcesを利用して一発でRESTfulなURLを設定できるようになって いる scaffoldで生成されるコードもCRUDしか定義されていない RailsはCoCを前提としておりrailに乗る方が開発体験がよくなりがち
Fat Controllerを防ぐことができる - CRUD以外のactionを定義させないことでControllerが肥大化する のを防ぐことができる
無駄な認知コストを省くことができる - 設計を統一することで認知コストを下げることができる また、複数の設計を1つのコードベースに混在させるとCRUD前提で設計された before_action系からすり抜けるなど想定外の動作を引き起こしバグやセキュリティ リスクを抱える可能性が増す
設計ポイント
設計ポイント - 何をリソースとするかを見極める 単なる「大きな業務エンティティ(例: ユーザー、注文、商品)」ではなく、 「RESTfulなCRUDで完結できる最小単位のまとまり」として設計 自然と責務の分離が進み保守性が上がる 必ずしもModelとControllerが1:1で紐付いている必要はない - ↑重要
CRUD以外のアクションが 許容されるパターン
CRUD以外のアクションが許容されるパターン - 外部の制約がある場合 - 業界標準のURL設計等がある場合はそちらに従った方が良いパターンはある CRUDを定義してroutesで調整もできるが無理に行うと逆に可読性が落ちるの でそこはバランスをとる