RailsのcontrollerにCRUD以外定義するな委員会活動報告

384 Views

September 05, 25

スライド概要

profile-image

Professional Ruby and Rails programmer in Tokyo.

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Railsのcontrollerに CRUD以外定義するな 委員会活動報告 @Omotesando.rb#113

2.

もとつねの日常 @daily_mototsune Ruby on Railsを中心に扱っているフリーランスエンジニア ドメインモデリングからAWSでの運用、スクラム運営やチームビルディ ングなどなど楽しくやらせてもらってます 普段はOmotesando.rbやGinza.rbによくいます 🍷♨✈🏎

3.

今日はRailsの話です

4.

外部からのリクエストを ハンドリングする Controller

5.

publicなインスタンスメソッドは CRUD以外定義しないでください

6.

今日の話は以上です。

7.

CRUDとは - Create Read Update Delete

8.

CRUDとは - Create => #create Read => #index, #show Update => #update Delete => #destroy

9.

なぜCRUD以外定義しては いけないのか

10.

RailsはRESTfulな設計を前提としている - REpresentational State Transfer - - Addressability Stateless Connectability Uniform Interface routesでresourcesを利用して一発でRESTfulなURLを設定できるようになって いる scaffoldで生成されるコードもCRUDしか定義されていない RailsはCoCを前提としておりrailに乗る方が開発体験がよくなりがち

11.

Fat Controllerを防ぐことができる - CRUD以外のactionを定義させないことでControllerが肥大化する のを防ぐことができる

12.

無駄な認知コストを省くことができる - 設計を統一することで認知コストを下げることができる また、複数の設計を1つのコードベースに混在させるとCRUD前提で設計された before_action系からすり抜けるなど想定外の動作を引き起こしバグやセキュリティ リスクを抱える可能性が増す

13.

設計ポイント

14.

設計ポイント - 何をリソースとするかを見極める 単なる「大きな業務エンティティ(例: ユーザー、注文、商品)」ではなく、 「RESTfulなCRUDで完結できる最小単位のまとまり」として設計 自然と責務の分離が進み保守性が上がる 必ずしもModelとControllerが1:1で紐付いている必要はない - ↑重要

15.

CRUD以外のアクションが 許容されるパターン

16.

CRUD以外のアクションが許容されるパターン - 外部の制約がある場合 - 業界標準のURL設計等がある場合はそちらに従った方が良いパターンはある CRUDを定義してroutesで調整もできるが無理に行うと逆に可読性が落ちるの でそこはバランスをとる