2019年6月26日こんにちは、はんぺらです。プログラミングの基礎的な勉強を終えて、次にMVCフレームワークのアーキテクチャの勉強を始めようとしている皆さん。MVCモデルを色々とインターネットでググって調べても、イマイチ納得できない部分が多いのでは無いでしょうか?理解できない理由の一つとして、広義のMVCとWebアプリケーション用のMVCは少々アーキテクチャが異なっているからかなと思いました。その2つのMVCモデルがどのように異なっているか、それを理解して、有意義にプログラミング学習を進めましょう。Contents広義のMVCとは何か?広義のMVCとWebアプリケーション用のMVCの違いについてウェブアプリケーション用のMVCではModelの扱いに注意しよう現在主流なWebアプリケーション用のMVCフレームワークまとめ広義のMVCとは何か?MVCモデルとはModel、View、Controllerの頭文字を取ったもので、アプリケーションを実装するためにアーキテクチャを表した言葉になります。このMVCモデル自体は40年程前からありました。このMVCモデルはウィンドウプログラムの設計指針として生まれたようです。ウィンドウプログラムとはGUI、所謂、画面を作ることができるプログラムのようです。この広義のMVCモデルの、モデル、ビュー、コントローラ、それぞれの要素はwikipediaによると下記の用に役割が別れています。ショッピングの合計額や送料を計算するなど)を表現する要素である。パターンが用いられることもある)。ビューモデルのデータを取り出してユーザが見るのに適した形で表示する要素である。UIへの出力を担当する。ウェブアプリケーションではHTML文書を生成して動的にデータを表示するためのコードなどにあたる。GUIにおいては通常、階層構造を成す。コントローラユーザからの入力(通常イベントとして通知される)をモデルへのメッセージへと変換してモデルに伝える要素である。UIからの入力を担当する。モデルに変更を引き起こす場合もあるが、直接に描画を行ったり、モデルの内部データを直接操作したりはしない。https://ja.wikipedia.org/wiki/Model_View_Controller#MVC%E3%81%AE%E6%A7%8B%E9%80%A0これを簡単に理解できたら、苦労はしないですよね。簡単に纏めると下記のイメージです。モデルデータとビジネスロジックを担当。データに変更があったら、ビューに通知する。ビューモデルからデータを取り出し、整形して出力。ユーザーから入力があったら、コントローラに通知する。コントローラービューからの入力を受けて、モデルに入力を伝達。ビューに表示命令を出す。上記の広義のMVCはWebアプリケーションで使用するには少々マッチしていませんでした。これをWebアプリケーション用に変更を加えたのが、MVC2とも呼ばれるWebアプリケーション用のMVCモデルになります。広義のMVCとWebアプリケーション用のMVCの違いについて何故、広義のMVCはWebアプリケーションにはマッチしなかったのでしょうか?それは、下記がWebアプリケーションでは実現が難しかったのです。データに変更があったら、ビューに通知するユーザーから入力があったら、コントローラに通知するWebアプリケーションの場合は、ビューでユーザーに出力した後は、サーバーとの接続は切れてしまいます。なってくると、モデルのデータをいくら変更しようと、ビュー経由でユーザー側にその変更を反映することは厳しいですし、また、ユーザーが入力した値をビュー経由でコントローラに通知することも厳しくなります。Webアプリケーション用のMVCを図で表すと下記のイメージになります。モデルデータとビジネスロジックを担当。ビューモデルからデータを取り出し、整形して出力。コントローラーユーザーからの入力を受けて、モデルに入力を伝達。ビューに表示命令を出す。小さい違いなようですが、ここを理解しておけば、インターネットでMVCを調べても、どちらの事を言っているのかすぐに分かると思います。ウェブアプリケーション用のMVCではModelの扱いに注意しようWebアプリケーション用のMVCではModelはデータベースのテーブルにアクセスするためだけに使うと、勘違いしている方も多いようです。実際に、僕もMVCフレームワークやり始めたときは勘違いしていました。データベースのアクセス部分だけをModelでやり、それ以外のロジックを全てControllerでやろうとして、Controllerが肥大化して酷いことになっていました。本来、ControllerはModelとViewの橋渡しだけなので、肥大化はするはずはないのです。無知な僕は、本来はModelに入れなければいけないビジネスロジックなどを、全てControllerに突っ込んでました。今思えば、見るに耐えないソースコードだったと思います。Model層の扱いには注意して、Controllerは肥大化させないように気をつけましょう。現在主流なWebアプリケーション用のMVCフレームワーク今現在主流なWebアプリケーション用のMVCフレームワークはPHPだとLaravel、JavaだとSpringBoot、RubyだとRubyOnRailsだと思います。最初は自分が学習中の言語によって、上記の何れかのフレームワークから勉強を始めてみる事をオススメします。ある程度フレームワークを理解した方は、その他にも色々とありますので、自分が気に入ったものを探してみるものいいと思います。まとめ今回は、広義のMVCフレームワークと、Webアプリケーション用のMVCフレームワークについて説明しました。最初はMVCフレームワークってとっつき難いと思います。自分たちが色々勉強して苦労してきたことを、内部で勝手にやってくれたりするんです。便利だと思う半面、ちょっと寂しい気持ちにもなります。今まで僕が経験してきた現場では、ほぼMVCフレームワークを使用していたので、MVCフレームワークに慣れておくのは大切です。分かりにくい部分もあったと思いますが、皆さんの勉強に少しで訳に立ってくれると嬉しいです。userはんぺらのブログ努力の天才になろう。っ越し業者、アパレル販売員等を得て、web系のエンジニアに落ち着く。その後海外で3年ほど働き、帰国後日本でエンジニアを行いつつ、フリーランスになる機会を伺っている。