1. HOME
  2. Geekly Media
  3. MVCモデルとは?開発に与えるメリット・デメリットを解説

MVCモデルとは?開発に与えるメリット・デメリットを解説

ソフトウェア開発における設計パターンの1つであるMVCモデル。「M」「V」「C」の各項目の概念や役割は何?と疑問を抱いている方もいるのではないでしょうか。
今回はMVCモデルの基本概念や、開発の場においてどのような利用メリットやデメリットが存在するのか解説していきます。

  • twitter
  • facebook

MVCモデルとは

 

 

MVCの概念

 

MVC は、Webフレームワークで一般的に取り入れられているアプリケーション設定を整理するための概念の一つです。

モデル(Model)頭文字「M」、ビュー(View)頭文字「V」、コントローラー(Controller)頭文字「C」で「MVC」と言います。

それぞれ次の役割を持ちます。

 

【モデル】

システム内のビジネスロジックを担当します。システムの設計や機能をどうするかがここで行われます。

 

【ビュー】

実際に表示したり、入力する機能の処理を行うのがビューです。

 

【コントローラー】

コントローラーは、ユーザーの入力に基づきモデルとビューを制御する役割を担っています。「クライアント」「モデル」「ビュー」の橋渡し役となります。

 

Webフレームワークの基本概念の一つである「MVC」 の概要について解説していきます。

はじめに「MVCとは何か」を初めに説明し、次にそれぞれの役割を「M」「V」「C」の項目ごとに分けて説明して行く流れで進めていきます。

「MVC」は機能ではなく、「アプリケーション設計」の機能を整理するための「概念」になります。

「アプリケーション設計」が必要な理由としては、アプリケーション全体を考えないでただプログラミングを書いていくと次第にコード数が膨大になり、コードの破綻が起きて不具合やバグの原因になる恐れがあるからです

 

例えば、MVCについて理解せず、場当たり的な開発をしてしまうと、新しい機能を実装する際、どこにファイルを作成すべきか分からなくなります。また、うまくディレクトリを分けていなく、構造が乱れてしまっていると、確認したいファイルがどこにあるかを探すのも大変になってしまいます。

つまり、実装の前にどういう風に作っているかというのがアプリケーション設定になり、そのアプリケーション設計をするにあたってこの「MVC」という概念があります。

役割ごとに意味のある単位で機能を実装すると管理しやすいので、「MVC」に分割して実装するのが便利だということから用いられています

 

MVCそれぞれの役割

 

 

モデル(Model)

 

「MVC」のそれぞれの役割について理解していきましょう。 MVCの役割は色々ありますが、ここでは一般的に考えられている役割について説明していきます。

まずモデルの「M」から説明していきます。モデルでは、データベースとデータのやり取りを行う機能を実装したり、データベースから取得したデータをプログラムで扱いやすい形式でデータを変換するというような役割を担っています。

例えばデータベースとやり取りを行う場合は、データベース内のデータを取得したり、「更新」「削除」「新規作成」といった機能を実装します。

例えば、日付の変換機能。データベースが日付の保持を行う際に2019‐11‐11と保持されるのが一般的です。ですが、データベースの保持している表示はアプリケーションに表示される一般的な形式とは異なります。

そこで「2019年11月11日」のように一般的に読みやすい形式に変換する事ができるのです。

 

ビュー(View)

 

次にビュー「V」の部分です。ではWebブラウザに表示するHTMLを動的に生成する部分がビューになります。 

例えば動的にHTMLを生成するとは、データベースから取得したデータをHTMLに埋め込んでアクセスするたびに、異なる HTML を生成することなどがあります。このようなサイトを動的なサイトと呼んだりもします

動的なサイトのわかりやすい例としてTwitterがあります。今アクセスしたときと10分後にアクセスした時とでは、タイムラインの新着順が変わっており、常にリアルタイムで変動しています。

それはアクセスするたびにデータベースから最新の記事を取得して最新のタイムラインをトップページに表示するというような処理をしているからです。

他の例題にも該当します。ブログサイトの新着記事が毎日更新しているブログ記事があったとしたら次の日アクセスしたら昨日なかった異なる記事が閲覧可能になっています。このようなものが動的なサイトになります。この動的部分を担っている部分がビューです。

 

コントローラー(Controller)

 

最後のコントローラー「C」の部分を説明します。

コントローラーはクライアントから来たリクエストURLに応じて、あらかじめ設定した処理を行います。リクエストURLと処理を紐付ける事を「ルーティング」と呼びます。動的なページを生成する際は次のような処理を行います。

【処理手順】
  • クライアントからリクエストをコントローラーが受け取ります。
  • そして受け取った値をモデル経由でデータベースからデータを取得します。
  • モデル経由で受け取ったデータをビューに渡します。
  • 動的生成されたHTMLをクライアントに渡します。

このようなモデルとの橋渡し、ビューとの橋渡しで、クライアントとの橋渡しの部分がコントローラーになります。

 

まずはキャリアの相談をしてみる

 

MVCモデルのメリットとデメリット

 

 

メリット

 

メリット
  • 役割で効率的にアプリケーション開発が効率的に行えます。
  • 「M」「V」「C」それぞれで分割して専門性が高い仕事が可能です。
  • 専門的な仕事の独立性が非常に高く変更などの対応にも柔軟に行なえます。

 

専門性の高い業務を分けることで、作業効率とクオリティーが向上します。

更に、独立性の高い上に別れている分野ごとに異なった専門性に特化しているため、高度なバグ修正やトラブルにも柔軟に対応できるメリットがあります。

 

デメリット

 

デメリット
  • 情報データの管理が大変
  • コントローラーの処理が大変
  • 「V」と「C」の依存性が高い

 

製品の規模が拡大していくことにより、モデルの負担が大きくなり、結果管理が大変になってしまうことも。

コントローラーも同じで、機能拡大を行うことで、コントローラーで行う処理も増加し、処理が大変になります。複雑な出力要件が多くなるほど、コントローラーとビューの依存性が大きくなります。結果として修正が困難になる場合があります。

 

MVCのデメリットを解消するためには?

 

 

コントローラーとモデルでのやり取りを拡張しすぎない事でデメリットを軽減出来ます。

コントローラーはビューとモデルの管理を担っている部分になるため、どうしてもモデルが増えることにより、コントローラーで管理し呼び出すモデルが増えてコントローラーの依存性が高くなります

この様な状態になってしまうとメリットである高い独立性が保てない状況になってしまいます。

この状態を回避するにはコントローラーからビューに渡すモデルを見直し適切な内容のモデルかどうかを厳選することにより、モデルの増加を抑えることができます。結果として依存性も低くなり、独立性が保たれます。

またファサードパターンを採用する方法も有効的です。「ファサード」とはコントローラーとモデルのはやり取りをする際に仲介してコントローラーの負担を軽減する役割を担います

 

開発者に利点があるMVC

 

機能の部分を分割することにより、独立性が高くなります。

開発する側としては「M」「V」「C」で分割されているため、とても開発しやすくなり、快適に仕事が進みます。開発作業の効率が高くなり、独立性が高いため他の要素とのやり取りが少なくすみ、依存性が抑えられます。

つまり、単体でも独立性が高いく、再利用できるほどの高い精度で開発が行なえます。他にも独立性が高い事により、専門性の高い担当者で構成されるため、トラブルやメンテナンスでは、専門性の高い担当者が対応可能です。

専門性の高い分野での柔軟な対応ができ保守性も優れていることが分かります。

 

まとめ

 

 

  • MVCモデルとは、M=モデル V=ビュー C=コントローラー
  • 作業を分担することで、作業効率とクオリティが向上
  • 作業規模によって、負担がかかるパートがでてしまう

 

MVCはシステム開発する上で関わる概念となります。一般的には知られていませんが、開発でなくても会社の構造や仕組みにも当てはまります。円滑に仕事をして行くヒントになるかもしれないため、覚えておくと役立つ知識となるでしょう。

 

MVCモデルの知識を活かせる求人を紹介してもらう

 

この記事の監修者

ギークリーメディア編集部

主にIT・Web・ゲーム業界の転職事情に関する有益な情報を発信するメディアの編集部です。転職者であれば転職市場や選考での対策、企業の採用担当者様であればIT人材の流れ等、「IT業界に携わる転職・採用」の事情を提供していきます。

この記事が気に入った場合は、
SNSでシェアをお願いします

あわせて読みたい関連記事

この記事を読んでいる人におすすめの記事