まさ@ブログ書き込み中

自由に生きるための英語、プログラミング、考えごとについて色々書いています。

【超初心者向け】RailsのMVCモデルについてくわしく書きます【コードあり】

f:id:masaincebu:20180823071644p:plain

今回は、Ruby on Railsを理解する上では避けて通れない基礎中の基礎であるMVCモデルについて僕なりの理解を説明していきたいと思います。

 

この記事で想定している読者

  • Rubyの基本はある程度知っている

  • Railsは初心者

 

この記事のポイント

  • MVCモデルとはRailsが採用しているデザインパターン

  • ビューはユーザーが実際に見えるところを操作する役割

  • コントローラーはモデルとビューの仲介役

  • モデルはデータの準備を担当する

 

また、今回の内容はわかりやすさを重視して書いています。ある程度正しい知識をもとに書いているつもりですが、より正確に理解したい人は他のサイトや文献をあたってください。

 

MVCモデルとはRailsが採用しているデザインパターン

MVCモデルというのはデザインパターンの一種です。デザインパターンとはコードの書き方のガイドラインみたいなものです。

 

コードの書き方についてのガイドラインが必要な理由は色々ありますが、例えばその方が可読性が高かったり、変更に柔軟に対応できるからです。

 

大きなシステムであればあるほど自分1人でつくるわけではないので、コードが見やすいことは大切です。

 

また、システムは常にユーザーに合わせて変化していきます。その変更が必要なときに最小限の労力で対応できることが生産性にも繋がります。

 

RailsはアプリケーションがやるべきことをM(モデル)とV(ビュー)そしてC(コントローラー)の3つに分けるというデザインパターンを採用しています。

 

ビューはユーザーが実際に見えるところを操作する役割

MVCモデルのVにあたるビュー(View)は、ユーザーが実際に見て操作をするところを実装する役割をもちます。

 

一般的にHTMLファイルを記述するところです。ちなみにビューで使うファイルの拡張子が「.html」ではなく「.erb」や「.haml」や「.slim」という例を見たことがあると思いますが、それらはテンプレートエンジンといって最終的にHTMLファイルに変換されるものです。

 

なぜ(裏側の処理に関連するコードではなく)ビューまでRailsが関わっていくのかというと、あるリクエストが来たときにどのファイルを表示する(レンダリングと言います)のかを選択する必要があったり、表示するファイルに裏側で用意したデータを展開する必要があるからです。

 

また、RubyやRailsのコードをビューで使うことができることで簡単にHTMLを書くことができるようになります。例えば、以下のコードではリストを作成するためにeachメソッドをつかって一気にliタグをつくっています。

 

コントローラーはモデルとビューの仲介役

先ほど「Railsではあるリクエストが来たときにどのファイルを表示するのかを選択する必要がある」といいましたが、それはMVCモデルのCにあたるコントローラー(Controller)の役割の1つです。

 

コントローラーはその名前の通り、リクエストを処理するためにモデルやビューを操作する役割があります。

 

例えば以下のようなルーティング(リクエストをコントローラーの処理に渡すルート)のとき、コントローラーはそれを受けてビューで使うためのデータを用意したりします。

 

このファイルにある@messageというインスタンス変数はビューの中で利用することができます。

 

もう少し難しい内容でいうと、コントローラーではリクエストに対する処理を分けたりすることもします。雑なコードですが、以下のような感じです。

 

モデルはデータの準備を担当する

MVCモデルのMにあたるモデル(Model)では、データの準備を担当します。

 

正確に言えばモデルはビューとコントローラー以外のロジックを担当するわけですが、ややこしくなりそうなのでいまは上のように捉えてもらって構わないです。

 

posts_controller.rbでさりげなく使われていたPost.newというコードは、モデルにこのように書かれているため動くのです。

 

一見すると中身のないクラス定義に見えますが、ApplicationRecordを継承しているのでPost.newができるのです。

 

このApplicationRecordから継承したモデルはActive Recordのモデルで、オブジェクト(@postなどのデータとメソッドをもつもの)を自然扱うような形でデータベースを操作できます。

 

まとめ

だいぶざっくりと説明しましたが、感覚は掴んでいただけたでしょうか?

 

RailsアプリケーションはMVCモデルというデザインパターンに則っており、MVCとはそれぞれモデル、ビュー、コントローラーです。

 

それぞれが関連し合うことによって1つのアプリケーションとして役に立ち、1つのデザインパターンに従うことによって開発者は共同作業がしやすくなります。

 

最初は慣れないかと思いますが、すぐになれることができますし、一度慣れてしまえばRailsはとても開発しやすいことに気づくと思います。まず最初の入り口として、今回の情報が役に立てば幸いです。