Python Flaskで学ぶ!モデル・ビュー・テンプレート(MVT)設計を初心者向けに徹底解説
生徒
「先生、Flaskのコードがだんだん長くなってきて、どこに何を書けばいいのかわからなくなってきました。」
先生
「それは自然なことだよ。Flaskでは、コードを整理するために『モデル・ビュー・テンプレート(MVT)』という設計を使うのがおすすめなんだ。」
生徒
「モデル・ビュー・テンプレート?なんだか難しそうです……。」
先生
「大丈夫。家の間取りを考えるようなイメージで理解できるから、一緒に整理してみよう!」
1. モデル・ビュー・テンプレートとは?
Flaskのアプリ開発を進めると、コードがどんどん増えて管理が難しくなります。そんなときに役立つのが モデル(Model)・ビュー(View)・テンプレート(Template)の考え方です。
- モデル(Model):データやビジネスロジックを管理する部分。
- ビュー(View):画面表示やユーザー操作を受け取る部分。
- テンプレート(Template):実際にブラウザに表示するHTML部分。
家に例えると、モデルは設計図、ビューは玄関やドア、テンプレートは部屋の内装のようなものです。 それぞれ役割を分けて整理することで、誰が見ても分かりやすいアプリが作れるようになります。
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設計
ここでは、ユーザーの名前を入力して挨拶を表示する簡単な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. 実行方法と動作確認
ターミナルやコマンドプロンプトで次のコマンドを実行してアプリを起動します。
python app.py
ブラウザで「http://127.0.0.1:5000」にアクセスし、名前を入力して送信すると
挨拶メッセージが表示されます。
5. MVT設計を使うメリット
このようにコードを役割ごとに整理することで、以下のメリットがあります。
- コードが見やすくなり、管理が楽になる
- 新しい機能を追加しやすくなる
- チーム開発でも他の人と作業しやすくなる
プログラム初心者でも、まずは「モデル=データ」「ビュー=処理」「テンプレート=表示」と覚えておけば大丈夫です。 小さなアプリでも最初から整理しておくと、後で「どこに書いたっけ?」と迷わずに済みます。
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のようなシンプルなフレームワークでは、整理が大きな力になります。
生徒
今回の学びを生かして、もう少し複雑なアプリにも挑戦してみたいです。
先生
ぜひ挑戦してみましょう。処理の流れが見えるようになれば、開発の幅はどんどん広がりますよ。