MTVフレームワーク

MTVフレームワーク

公式ドキュメントによるとDjangoはMTVフレームワークとされています。

他のWebフレームワークはほとんどがMVCフレームワークと呼ばれており、なぜDjangoがMTVフレームワークと呼ばれているか疑問な人も多いはずです。

ここではMVCとMTVを比較し、なぜDjangoがMTVフレームワークなのかについて知っていきましょう。

MVCフレームワーク

Ruby on RailsやLaravelで使われているMVCフレームワーク。
このMVCはM(モデル)、V(ビュー)、C(コントローラー)で構成されています。

  • M(モデル)
    モデルは主にDBに関連する機能です。データベースのテーブルやフィールドを定義することができます。
  • V(ビュー)
    ビューはフロントエンドの役割をします。View = みる という意味でユーザーの目に触れるクライアントサイドを担当します。
  • C(コントローラー)
    コントローラーはモデルで定義されたデータをビューに受け渡す中間層のような役割をします。ここがバックエンドサイドのメインとなる機能です。

MVCフレームワークでは上記のような構成でWebフレームワークが構成されます。
どのWebフレームワークにかかわらず、Web開発において主となる要素が
DB関連
フロントエンド関連
バックエンド関連
の3つです。これをRailsやLaravelでは MVCと呼び、DjangoではMTVと呼びます。

MTVフレームワーク

DjangoはMTVフレームワークであると上述しましたが、その内容はMVCフレームワークとほとんど変わりません。呼び方はそれぞれ M(モデル)、T(テンプレート)、V(ビュー)となります。

少し違うのが、T(テンプレート)がフロントエンドを扱いV(ビュー)がバックエンドを担います。MVCの一部であるC(コントローラー)の役割はDjangoのURLルーティング機能を含んだシステム機能自体が担っているそうです。

この呼び方にはDjango特有の思想が存在しているそうで、公式ドキュメントによると

ビューにはデータの 見せ方 を書く必要はなく、表示したいデータの 選び方 を書くものだと考えます。ユーザが見るのはどのデータなのかを書くのであって、ユーザに対するデータの表示の仕方を書くわけではないということです。この二つは明らかに違います。

つまり、Djangoでは

  • M(モデル)
    DBに関連する設定やテーブル名、そのフィールド名や機能、設定などを扱います。
    該当するファイルは models.pyです。
  • T(テンプレート)
    フロントエンドにて、データを表示する機能を扱います。
    該当するファイルはtemplatesフォルダ直下のhtmlファイルです。
  • V(ビュー)
    テンプレート(フロントエンド)にてデータをユーザーに表示するために、バックエンドでそのデータを選択したり、整形したりする機能を扱います。
    該当するファイルはviews.pyです。

上記に加えて、DjangoではURLsのルーティングシステムを用いて、MVCのC(コントローラー)の機能の一部を担っています。こちらはurls.pyというファイルを記述します。

これらを踏まえて、Djangoにて新規機能を実装する際は、まずM(モデル)の範囲であるDBの設定を行い、V(ビュー)にてバックエンドを設計します。その後、URLsでルーティング設定を行い、T(テンプレート)にてフロントエンドを記述していきます。

Djangoを使ったWeb開発においてこのMTVを意識することは少ないかもしれませんが覚えておくと実装がはかどり、Djangoの理解がさらに深まるでしょう。