カテゴリ: Flask 更新日: 2025/12/11

Python Flaskで学ぶ!モデル・ビュー・テンプレート(MVT)設計を初心者向けに徹底解説

Flaskアプリでモデル・ビュー・テンプレートを整理する設計方法
Flaskアプリでモデル・ビュー・テンプレートを整理する設計方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Flaskのコードがだんだん長くなってきて、どこに何を書けばいいのかわからなくなってきました。」

先生

「それは自然なことだよ。Flaskでは、コードを整理するために『モデル・ビュー・テンプレート(MVT)』という設計を使うのがおすすめなんだ。」

生徒

「モデル・ビュー・テンプレート?なんだか難しそうです……。」

先生

「大丈夫。家の間取りを考えるようなイメージで理解できるから、一緒に整理してみよう!」

1. モデル・ビュー・テンプレートとは?

1. モデル・ビュー・テンプレートとは?
1. モデル・ビュー・テンプレートとは?

Flaskのアプリ開発を進めると、コードがどんどん増えて管理が難しくなります。そんなときに役立つのが モデル(Model)・ビュー(View)・テンプレート(Template)の考え方です。

  • モデル(Model):データやビジネスロジックを管理する部分。
  • ビュー(View):画面表示やユーザー操作を受け取る部分。
  • テンプレート(Template):実際にブラウザに表示するHTML部分。

家に例えると、モデルは設計図ビューは玄関やドアテンプレートは部屋の内装のようなものです。 それぞれ役割を分けて整理することで、誰が見ても分かりやすいアプリが作れるようになります。

2. ディレクトリ構造を整理しよう

2. ディレクトリ構造を整理しよう
2. ディレクトリ構造を整理しよう

MVT設計を取り入れるには、まずはプロジェクトのフォルダ構造をきれいに分けるのがおすすめです。 たとえば、以下のように整理します。


my_flask_app/
├── app.py
├── models/
│   └── user_model.py
├── views/
│   └── user_view.py
├── templates/
│   └── user.html
└── static/
    └── style.css

こうすることで、「データはmodels」「画面処理はviews」「表示するHTMLはtemplates」と 役割ごとに見分けがつきやすくなります。

3. サンプルコードで学ぶMVT設計

3. サンプルコードで学ぶMVT設計
3. サンプルコードで学ぶMVT設計

ここでは、ユーザーの名前を入力して挨拶を表示する簡単なFlaskアプリをMVTで書いてみましょう。

app.py


from flask import Flask
from views.user_view import user_bp

app = Flask(__name__)
app.register_blueprint(user_bp)

if __name__ == "__main__":
    app.run(debug=True)

models/user_model.py


def get_greeting(name):
    return f"こんにちは、{name}さん!"

views/user_view.py


from flask import Blueprint, render_template, request
from models.user_model import get_greeting

user_bp = Blueprint("user", __name__)

@user_bp.route("/", methods=["GET", "POST"])
def index():
    message = ""
    if request.method == "POST":
        name = request.form.get("name")
        message = get_greeting(name)
    return render_template("user.html", message=message)

templates/user.html


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>挨拶アプリ</title>
</head>
<body>
    <h1>挨拶アプリ</h1>
    <form method="POST">
        <input type="text" name="name" placeholder="名前を入力">
        <button type="submit">挨拶する</button>
    </form>
    {% if message %}
        <p>{{ message }}</p>
    {% endif %}
</body>
</html>

4. 実行方法と動作確認

4. 実行方法と動作確認
4. 実行方法と動作確認

ターミナルやコマンドプロンプトで次のコマンドを実行してアプリを起動します。


python app.py

ブラウザで「http://127.0.0.1:5000」にアクセスし、名前を入力して送信すると 挨拶メッセージが表示されます。

5. MVT設計を使うメリット

5. MVT設計を使うメリット
5. MVT設計を使うメリット

このようにコードを役割ごとに整理することで、以下のメリットがあります。

  • コードが見やすくなり、管理が楽になる
  • 新しい機能を追加しやすくなる
  • チーム開発でも他の人と作業しやすくなる

プログラム初心者でも、まずは「モデル=データ」「ビュー=処理」「テンプレート=表示」と覚えておけば大丈夫です。 小さなアプリでも最初から整理しておくと、後で「どこに書いたっけ?」と迷わずに済みます。

6. よくある質問

6. よくある質問
6. よくある質問

Q: まだコードが短いアプリでもMVTを使うべき?

はい、短いコードでも最初から分けておくと、アプリが成長したときにスムーズに対応できます。

Q: テンプレートってHTMLを勉強しないと使えない?

基本的なタグだけで十分です。文字を表示する程度ならすぐに覚えられるので安心してください。

まとめ

まとめ
まとめ

Flaskで学ぶモデルビューテンプレートの考え方は、初心者が最初につまずきやすい部分でありながら、理解すると開発が一気に進めやすくなる重要な構造です。とくにPythonを使ったWeb開発では、コードを整理することが作業効率や可読性に大きく影響し、複雑な処理を段階的にわかりやすく管理できるようになります。モデルはデータの流れや処理の本質を支える根幹部分であり、ビューはユーザーの操作をどのように処理してどのような結果を返すかを決める重要な役割を果たします。そしてテンプレートは実際に表示される画面を作り、ユーザーが受け取る見た目を整える大切な場所です。この三つを適切に分けて管理することで、アプリ全体の構造が明確になり、後から機能を追加したり修正したりするときにも迷わず作業ができるようになります。さらに、フォルダ構成を整理することで作業の流れがより自然になり、大規模なアプリでも無理なく拡張できる柔軟性が生まれます。Pythonを学びはじめたばかりの人でも、モデルビューテンプレートを意識して書くことで、規模が大きくなったときの混乱を防ぐことができ、処理の流れが直感的に理解できるようになります。こうした整理は単にコードを見やすくするだけでなく、Webアプリの基本的な仕組みを理解する助けにもなり、未経験者でも着実に技術を身につけられる土台となります。また、テンプレートフォルダやビューファイルを分けて管理する構成は、チーム開発においても大きな力を発揮し、関わる人全員が迷いなく作業を進められるようにします。今回の内容では、実際のディレクトリ構成やサンプルコードを通して、Python Flaskの動作の流れがより具体的に理解できるようになり、初心者でも自然に開発を進められる考え方が身につきます。ユーザ入力を受け取り、モデルで処理し、テンプレートで表示するという一連の流れは、Web開発の基本そのものであり、どのようなアプリにも応用できます。MVTという設計を最初から意識して学習を進めることで、理解が深まるだけでなく、後の応用学習にもつながる大きな力となるでしょう。こうした分割の考え方を覚えておくことで、初心者でも無理なく成長できる環境が整い、自分のアプリをより豊かで整った形に育てていくことができます。

サンプルコードで振り返るMVTの流れ


# app.py
from flask import Flask
from views.user_view import user_bp

app = Flask(__name__)
app.register_blueprint(user_bp)

if __name__ == "__main__":
    app.run(debug=True)


# models/user_model.py
def get_message(name):
    return f"ようこそ、{name}さん!"


# views/user_view.py
from flask import Blueprint, render_template, request
from models.user_model import get_message

user_bp = Blueprint("user", __name__)

@user_bp.route("/", methods=["GET", "POST"])
def index():
    result = ""
    if request.method == "POST":
        name = request.form.get("name")
        result = get_message(name)
    return render_template("user.html", message=result)
先生と生徒の振り返り会話

生徒

きょう学んだモデルビューテンプレートの流れですが、実際に使ってみるととても分かりやすく感じました。モデルが処理をまとめてくれて、ビューがその結果を受け取って、テンプレートが見やすく表示してくれるんですね。

先生

そのとおりです。三つの役割が明確になることで、どこに何を書けばよいか迷わなくなりますし、アプリの仕組みも理解しやすくなります。

生徒

フォルダ分けもすごく便利でした。作業が整理されて迷いが減りました。

先生

構造を整えることは開発の基盤になりますからね。特にPython Flaskのようなシンプルなフレームワークでは、整理が大きな力になります。

生徒

今回の学びを生かして、もう少し複雑なアプリにも挑戦してみたいです。

先生

ぜひ挑戦してみましょう。処理の流れが見えるようになれば、開発の幅はどんどん広がりますよ。

カテゴリの一覧へ
新着記事
New1
Flask
認証と認可の違いを整理しよう!Flaskで押さえるべき基礎概念
New2
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New3
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New4
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.5
Java&Spring記事人気No5
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.6
Java&Spring記事人気No6
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説