Railsとは何なのか

RailsはRuby on Railsと呼ばれるWEBアプリケーションの
フルスタックフレームワークである。
フレームワークとしては国内のスタートアップで多く使用されている。
スタートアップで使用されている理由はスピードにある。
下記のスライドで和田さんが仰っている。

じゃあ何故、スピードある開発が実現できるのか。
それは下記3つの恩恵を受けているからである。
- MVCアーキテクチャ
- リソースベースのルーティング
- ActiveRecordデザインパターンのRails版

というかscaffoldコマンドこそRailsのスピードある開発を物語っているものである。
コマンド一発でDBスキーマを定義し、テーブルへアクセスできるクラス(モデル)が出来上がり
クライアント側のインターフェイス
(RESTに沿ったルーティング、コントローラー、ビュー)が出来上がり
ドメイン層以降のロジックのみをモデルに書くだけで(コントローラーにも書ける)
機能を実装する事ができる、コードを書く量を減らすこの仕組みがスピードを実現させている。

しかし欠点もある、テーブルとモデルが1対1ではもちろんであるが(ActiveRecordなので)
ユースケースとモデルが1対1であるため、モデルが複数ユースケースで使われ始めると
ファットモデルにもなるし、コードが複雑になり
可読性、変更容易性が落ちメンテナンスコストが上がる。
この現象を発生させる原因はActiveRecordデザインパターンのRails版にある。

ActiveRecordとはデータアクセス層のデザインパターンである。
具体的には下記を対応づける事でテーブル操作、データの扱いが簡単になる。
- クラスとテーブル
- インスタンスとレコード
- カラムとインスタンス変数
- テーブルのCRUD処理とインスタンスメソッド(クラスメソッド含む)
RailsのActiveRecordは上記に追加機能がある。

追加されている機能は以下の2つである。
- バリデーション機能
- コールバック機能
これがめっちゃ便利でバックエンド側でカラムのバリデーションが行えるし
テーブル操作の前後に処理を実行できる。
モデル内で全て書く事ができるのでコード記述量も減り
Railsだからこそのスピードが発揮できる要因にもなっている。
しかし、この組み合わせがアプリケーションの規模が大きくなるにつれて仇になってくる。

それはバリデーションやコールバックは1つのユースケースに密結合している
よってそれらが書かれているモデルは複数のユースケースで使われ始めると
話しが戻るがメンテナンスコストが上がってくるのである。
先人たちの知恵によって様々な対処は考えられてきている。
だがそれもオブジェクト指向を理解していないと使えない代物らしい
(まだ私は理解しきれてないので、らしいと表現した)

こういった意見もあった。
モデルとコントローラーに下手にレイヤーは挟まなくても良いらしい。
月間で数百万のリクエストは捌けるし、メンテナンスコストが増えない。

これも読んでおこう