in Think

RailsのMVCとフレームワークを構成するモジュールについて「Action***」編


MVC

開発に移る前にMVCのおさらい。
MVCはアプリケーションのデザインパターンのひとつで、「Model」「View」「Controller」と呼ばれる三つに分割する。
基本的な意味はこんな感じ。

  • Model
    • アプリケーションデータや関数を定義する。
  • View
    • モデルが渡してくれたデータをいい感じにして表示する。
  • Controller
    • モデルとビューの橋渡し役。

すっごい雑に書いた。たぶん詳しい人がみたら炎上する。でも細かいこと言い出すとキリないのでざっくり覚えておけばいいと思う。といってもこれもこれでデザインパターンの一つでしかないので、他のも知っておくいいんだろうなと思ってるけどやってない。やります。

RailsのMVC 構成要素

僕はRailsはMVCを採用しているアーキテクチャってのは知っていたけど、そのMVCがどういうモジュールで作られているかって、実はあまり意識したことなかった。意識しなくても作れちゃうのがRailsのいいところだし、初心者でもとっつきやすい(本当か?)だったりするんだけど、なにでできているかは知っておいて損はないと思う。

あらためてまとめた。

もうすこし詳細を理解したり、変更が入ったら追記する。 中にはRailsのバージョンが変わったら導入されたものとかあるので、変更に気をつけたほうがいいと思う。Rails6になったらActiveTextとかでる。

Active***とAction***

Railsには「Action**」「Active***」っていうのがいくつかあるけど、この分類には意味があるらしい。調べたところだとActiveがアプリケーションのドメインモデル and ビジネスロジックの処理。Actionがhttpdリクエストとレスポンスの処理を行う場所、といったところらしい。この辺それっぽいっていうだけでそれほど明確じゃないとか言ってる。誰か本当のところ教えて。

でも概要を知らないことにはどういう分類かわからないのでAction***からみていく。

ActionCable

RailsでWebSocketを扱えるようにする。リアルタイム通信をRubyで書ける。

ActionMailer

MailerClass/Viewなどからメールを送れるようにする。

ActionPack

Railsのhttpアクセス〜モデルへの処理の引き渡しなどを司ってるのがこれ。アプリケーション作ってる上でメインとなるうちの一つ。簡単に理解するとMVCのCをやってるんでしょ、となりがちだけど、ビューのレンダリングとhttpリクエストのルーティングも行なっているので、厳密にいうとCだけを担っている場所ではない。

コンポーネントとして以下の三つを持っている。

  • AbstructController
  • ActionController
  • ActionDispatch
AbstructController

レンダリングの処理をViewに投げる処理が行われている。ActionMailserとActionController(後述)が抽象化されている。

ActionController

ここが一般的にMVCのCと呼ばれるところを司ってる。

リクエストに対して適切な処理を行い、モデルとビューの間をデータの受け渡しをしてくれる。route.rbで resourcesというメソッドを使う必要があるので、ファイル名は基本複数形だ。app/controllers/****のファイル。

ActionDspatch

route.rbを読んで、URLを担当しているcontrollerに処理をながす。

コンポーネントではないけどActionPackの機能の一つに ActionPack Variantsというのがある。Rails4.1から追加された、デバイスごとに扱うViewを変更できる機能。以前はjpmobieなどのgemを使わないといけなかったけど、これを使うことで簡単に実装できるようになった。

ActionView

ここが実際のMVCのVをやるところ。アプリケーションへのアクセス、処理を元に実際のWebページとしての描画をしてくれる。ただビューのテンプレートの重複を避けたい狙いから、たくさんのヘルパークラスがある。なるべくそちらをつかって描画していくのが好ましい。

ヘルパークラスは自前での定義も可能。

次はActive***系。controllerから渡された処理を扱う。

とりあえずこんな感じかな。色々面白い機能があって楽しかった。

次はActive編を書く。