Ruby on Railsの必須知識!「MVC」について理解を深めよう

最近はRubyの人気が再燃し、それに伴ってRubyのフレームワークであるRuby on Railsが爆発的に人気を伸ばしています。

そんなRuby on Railsは、MVCに始まりMVCで終わることを理解しておきたいものです。Ruby on Railsでアプリを作成するのであれば、これらについて知っておくことは絶対です。

今日はRailsの基礎であるMVCについて、自分なりの言葉で伝えていきます。

MVCとは?

MVCとはRailsの根底をなすともいえる概念で、Model、View、Controllerの頭文字をそれぞれ取ってMVCと名付けられています。この3つの要素はRailsアプリを作成する際、それぞれ相互に関連し合うことで、アプリ制作の効率を爆発的に上げてくれるす。

つまりアプリ開発にとって、かなり便利なものなのです。

 

今回このブログでは、それぞれMVCの3つの要素がどのような働きをして、お互いに関わっていくのか考えていきます。これを知らずしてRailsでアプリは作れない!そんな大事なことを、自分への覚書の意味も含めて書いていきます。

それではまず、MVCそれぞれがどのような役割を持っているのか考えていきましょう。

 

MVCの各要素をみていこう

binoculars-100590_1280

モデル(Model)

モデルとはその名の通りモデルです。とは言っても「なんのモデルだよ!」となってしまうので、もう少し詳しくみていきます。

Railsにおいてモデルとはデータベースの骨格のようなものに相当します。アプリ開発においてデータベース(dbやデービーとも呼ばれます)は必須となります。

 

データベースとは、データを保存しておく表形式の保管庫みたいなものです。データベースは奥が深く難しい分野なので、詳しい説明については割愛します。ただし、データベースが表形式で構成されているというのは知っておいてください。

そんな中でモデルはデータベースとのやりとりを行ってくれる大事な部分です。簡単にいうとデータの受け渡しを行ってくれるアプリの中心的存在といえます。データベースから要素を取ってきたり、変数に代入したりきてくれるのがモデルの働きです。

 

では次に、アプリの表示部分を司るビューについて説明していきます。

 

ビュー(View)

ビューは見た目や景観という意味がありますが、まったくその通りです。アプリケーションの見た目を調整してくれる部分になります。これらに属するファイルは「html.erb」というファイル形式で保存されていて、htmlとRubyの両方を記述することができます。

このビューは、これから説明するコントローラーと深く関わっています。そのため、詳しくはコントローラーで説明することにしますが、「ビューはコントローラー内に記述されているアクション名と対応する」と覚えておきましょう。

これがわかってないとコントローラとビューの理解ができず、Railsの肝の部分が理解できないままになってしまいます。

 

コントローラー(Controller)

コントローラー読んで字のごとく、アプリケーションをコントロールする機能を担っています。ブラウザから送られてくる情報を頼りに、どの表示(アクション)を行うのかを定めています。

 

コントローラーは、routes.rbファイル内に記述されている「ルーティング」によって割り振られているルートを参照して、アクションにその処理を受け渡す役目を追っています。ルーティングに記述されたコントローラーとアクションが連動してブラウザにレイアウトを返します。

このコントローラーに記述されたアクションがビューファイルを呼び出します。例えばルーティングで以下の様に書かれていた場合、whispersコントローラーのindexアクションが動きます。

 

これらの一連の流れを参照し、Hello Worldと表示させるアプリの作成は、また別の記事にてご紹介しますので、しばらくお待ち下さい。

では、MVCがアプリの中でどのような挙動をしているのか、もう一度流れを追いながら説明していきます。

 

MVCにおける一連の流れ

cascade-1617176_1280

ではこのMVCの流れについては説明しておきます。

全体像を掴んでおくとRailsに対する理解も深まります。確かに難しい部分もありますが、頑張って理解しておくことをオススメします。

 

Railsアプリの構造

まずは前提としてデーターベースについて簡単に復習をしましょう。データベースとはあらゆるデータを保存しておく場所でしたね。この内部に保管されているデータは、Rails内のモデルを介することでデータの取り出しや書き込みが可能となります。

それでは、私たちがブラウザを使用した時の流れを説明していきます。

 

ブラウザから情報を受ける

まず私たちは、ブラウザを介して情報やリクエストを送ります。例えば画像を表示する、次のページへいく、リンクへ飛ぶ。これらの動作はリクエストと呼ばれ「httpメソッド」と呼ばれる動作の指示と共にRailsに送られます。httpメソッドにはget、delete、patch, postなどがあります。

HTTPメソッドの一覧はこちらから確認できます。

 

ルーティングでルートを参照

このメソッドとページ(URL)の情報を持ったリクエストは、先ほど少しだけ触れたルーティング(routes.rb)で行き先を示されます。先程も書きましたが、もう一度ルーティングの記述例を記しておきます。

これは、「getというhttpメソッドを伴ってtweetsにアクセスしてきた場合、tweetsコントローラーのindexアクションを動かす」というリクエストとレスポンスの流れを指示しています。

ルーティングから分かる通り、まさにルートを指し示していますね。

 

コントローラーが起動する

ルーティングで行き先が言い渡されました。どのコントローラーのアクションが動くのかが分かりましたね。この後はリクエストに応じて指定されたコントローラーに辿り着くと、必要に応じてモデルとのやりとりも可能になります。

 

例えば「idが3番の人が10番目につぶやいたツイートが知りたい」などですね。

先ほどコントローラーはモデルを通じてデータベースとやりとりができると書きましたが、まさに上のような指定を元に、データベースから情報を抜き出してきてくれます。このデータベースから抜き出した情報と、コントローラー内に記述されたアクションが呼び出されるのです。

これらの動作はすべてモデルが執り行ってくれます。

 

コントローラーとアクション、ビュー

先程、上で少しだけ触れた「コントローラー内に記述されたアクションとビューは対応する」を覚えているでしょうか?

実はルーティングで指定されたコントローラーとアクションを参照しにいくと、続いてビューファイルも呼び出されます。ビューファイルとはhtmlとRubyが共存しているファイルなので、コントローラから受け取ったモデルの情報を元に、画面に表示されるデザインを書き出してくれます。

 

例えばツイッターでは、タイムラインで流れてきたツイートをクリックすると、次のページに進みツイートの詳細を見ることができますね。これも同じような仕組みで動かされています。

この時、ツイート詳細の画面の雛形のような役割をビューファイルが担っています。

タイムラインで流れてきたツイートをクリックすると、指定されたhttpメソッドと共にリクエストがTwitterアプリに飛んでいきます。例えば「idが5の人が10時にしたツイート」のようなリクエストですね。

するとアプリ側がこの情報をたよりに、データベースから情報を引き抜き、ルーティングで指定されたルートを通り、抜き取ってきた情報をビューで雛形に流し込んで画面に表示させるのです。

 

こうした一連の流れを複雑に絡ませることで、ECサイトやツイッターのようなアプリが動いているのです。その裏を知っていれば「なんとも簡単!」というイメージを抱くかもしれませんが、現実はそう甘くありません。

一つのアプリケーションを作り出すためには、HTMLやcssなどの覚えなくてはならたいことが山ほどあります。ただMVCの原理を知らなければRailsでのアプリ開発は不可能と言ってもよいので、ここは頑張って押さえておきましょう。

 

まとめ

これまで説明してきたMVCですが、アプリケーションにおいて、いかに重要な要素であるかを理解してもらえたでしょうか。

これはどのようなアプリを作る過程でも必須になる知識です。焦らず、まずは確実にMVCについて理解しておく必要があります。

この記事を読んで、少しでもMVCについて理解してもらえれば嬉しいです!Railsの勉強は大変ですが、頑張っていきましょう

この記事が気に入ったら
いいね ! しよう

Twitter で
SPONSORED LINK

ABOUTこの記事をかいた人

旅・音楽・プログラミング・ブログを愛するコンテンツ・クリエーター。フィリピンで就業、カナダで語学留学を経験しニュージーランドで大学を卒業。 TECH::CAMPの二十九期生としてRuby / Ruby on Railsを勉強しました。記事の執筆・広告は「お問い合わせ」からお願いします。