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

Flaskとフロントエンドを組み合わせた構成のベストプラクティス集!初心者でも理解できる完全ガイド

Flaskとフロントエンドを組み合わせた構成のベストプラクティス集
Flaskとフロントエンドを組み合わせた構成のベストプラクティス集

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

生徒

「FlaskでWebアプリを作っているんですが、HTMLやJavaScriptをどう組み合わせるのが正しいのか分かりません。どんな構成にすればいいですか?」

先生

「Flaskとフロントエンドの構成にはいくつかの“ベストプラクティス”があります。これは、後で困らないための設計ルールのようなものです。今回は初心者にも分かりやすく、フォルダ構成から開発の考え方まで解説していきましょう。」

生徒

「お願いします!できれば具体的な例も見たいです。」

先生

「もちろんです。FlaskでHTML、CSS、JavaScriptを使う基本構成から、一歩進んだフロントエンド分離型の開発まで紹介します。」

1. Flaskとフロントエンドの関係を理解しよう

1. Flaskとフロントエンドの関係を理解しよう
1. Flaskとフロントエンドの関係を理解しよう

まず、FlaskはPythonで動くWebアプリケーションフレームワークです。簡単に言うと、「Webサイトの裏側(サーバー)」を担当します。一方、HTMLやCSS、JavaScriptは「見た目(フロントエンド)」を担当します。

つまり、Flaskは“料理を作るシェフ”、フロントエンドは“その料理をお客様に見せるお皿や盛り付け”のような関係です。

この2つをうまく連携させると、機能的で美しいWebアプリが作れるのです。

2. Flaskプロジェクトの基本構成

2. Flaskプロジェクトの基本構成
2. Flaskプロジェクトの基本構成

まずは、FlaskでHTMLやCSSを使うときの基本的なフォルダ構成を見てみましょう。


my_flask_app/
│
├── app.py
├── static/
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── script.js
│   └── images/
│       └── logo.png
└── templates/
    └── index.html

templatesフォルダにはHTMLファイル、staticフォルダにはCSS・JavaScript・画像などを入れます。これはFlaskが決めたルールで、特別な設定をしなくても自動で認識してくれます。

3. FlaskとHTMLを連携させる基本

3. FlaskとHTMLを連携させる基本
3. FlaskとHTMLを連携させる基本

Flaskでは、PythonのコードからHTMLテンプレートを呼び出すことで、Webページを動的に表示します。


from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def home():
    return render_template("index.html", title="Flaskとフロントエンド連携サンプル")

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

<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
    <h1>Flaskとフロントエンドの連携!</h1>
    <script src="{{ url_for('static', filename='js/script.js') }}"></script>
</body>
</html>

このように、Flaskのrender_template関数でHTMLを呼び出し、url_for()で静的ファイルを指定するのが基本です。

4. Jinja2テンプレートで効率的にHTMLを作る

4. Jinja2テンプレートで効率的にHTMLを作る
4. Jinja2テンプレートで効率的にHTMLを作る

Flaskでは、Jinja2(ジンジャツー)というテンプレートエンジンを使って、変数の埋め込みや繰り返し表示ができます。たとえば、商品リストを自動で出力することができます。


@app.route("/products")
def products():
    items = ["パソコン", "スマートフォン", "タブレット"]
    return render_template("products.html", items=items)

<!-- templates/products.html -->
<ul>
    {% for item in items %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>

このように{% for %}{{ }}を使えば、PythonのリストをHTMLに簡単に表示できます。テンプレートを使うことで、複数ページでもデザインを統一しやすくなります。

5. JavaScriptとの連携で動きをつける

5. JavaScriptとの連携で動きをつける
5. JavaScriptとの連携で動きをつける

FlaskのHTMLテンプレートは、普通のWebページと同じようにJavaScriptを使うことができます。たとえば、ボタンを押すとFlaskからデータを取得する処理を追加できます。


from flask import jsonify

@app.route("/api/message")
def message():
    return jsonify({"text": "Flaskからこんにちは!"})

<button id="btn">メッセージを取得</button>
<p id="output"></p>

<script>
document.getElementById("btn").addEventListener("click", () => {
    fetch("/api/message")
      .then(response => response.json())
      .then(data => {
          document.getElementById("output").innerText = data.text;
      });
});
</script>

これで、ボタンをクリックするたびにサーバーからメッセージを取得し、ページに表示できます。FlaskとJavaScriptの連携の第一歩です。

6. 開発を快適にするベストプラクティス

6. 開発を快適にするベストプラクティス
6. 開発を快適にするベストプラクティス

ここからは、実際に開発するときに役立つFlask+フロントエンドの構成テクニックを紹介します。

  • ① デバッグモードを有効にする: app.run(debug=True)を設定すると、コードを変更するたびに自動で再起動されます。
  • ② テンプレートを分割する: base.htmlを作り、ヘッダーやフッターを共通化しましょう。
  • ③ staticフォルダを整理する: cssjsimagesを分けて管理すると見やすくなります。
  • ④ Jinja2構文とJavaScriptの衝突に注意: Vue.jsやReactと併用する場合は、{% raw %}を使って衝突を防ぎましょう。
  • ⑤ 環境変数で設定を分ける: 本番用と開発用の設定を分離するのが安全です。

7. フロントエンド分離型構成の考え方

7. フロントエンド分離型構成の考え方
7. フロントエンド分離型構成の考え方

近年では、Flaskを「APIサーバー」として使い、フロントエンドをReactやVue.jsなどで構築する方法も人気です。これをSPA構成(シングルページアプリケーション)と呼びます。

この構成では、FlaskはデータをJSON形式で返し、フロントエンドがそれを画面に表示します。役割を分けることで、チーム開発もしやすくなります。

ただし、初めてのうちはFlaskのテンプレート機能を使う構成(モノリシック構成)から始めるのがおすすめです。

8. まとめとして意識すべき設計ポイント

8. まとめとして意識すべき設計ポイント
8. まとめとして意識すべき設計ポイント

Flaskとフロントエンドを組み合わせるときのベストプラクティスは、単にフォルダを分けることではありません。コードの見通しを良くし、チームや将来の自分が理解しやすい構造を作ることが大切です。

  • Flaskのルール(templates/static)を守る
  • テンプレートエンジン(Jinja2)を活用してコードを減らす
  • JavaScriptとAPIを正しく連携させる
  • 開発用と本番用で設定を切り替える

これらを意識することで、エラーの少ないスッキリした構成のFlaskアプリが作れるようになります。

カテゴリの一覧へ
新着記事
New1
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New2
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New3
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
New4
Flask
FlaskのURLルールとは?ルーティングの基本と動的URLの作り方を解説
人気記事
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プログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.5
Java&Spring記事人気No5
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.6
Java&Spring記事人気No6
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説