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

FlaskとReactを共存させる構成例!テンプレートとSPAの併用を初心者向けに解説

FlaskとReactを共存させる構成例!テンプレートとSPAの併用
FlaskとReactを共存させる構成例!テンプレートとSPAの併用

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

生徒

「FlaskとReactを同じプロジェクトで使いたいです。テンプレートとSPAを両方使うってどういうことですか?」

先生

「FlaskはPythonで作るサーバー、ReactはJavaScriptで作るフロントエンドです。Flaskが“料理を作るキッチン”、Reactが“料理を出すお皿”のような関係です。同じお店で両方使う構成を作るのが今回のテーマです。」

生徒

「なるほど!実際にはどう構成すれば良いですか?」

先生

「それでは、FlaskとReactを共存させる構成を、初心者でも分かるように見ていきましょう。」

1. FlaskとReactの基本を理解しよう

1. FlaskとReactの基本を理解しよう
1. FlaskとReactの基本を理解しよう

まず、Flask(フラスク)とは、Pythonで作る軽量なWebアプリケーションのフレームワークです。サーバー側でデータを処理したり、Webページを生成するのが得意です。

一方、React(リアクト)は、JavaScriptで作るフロントエンドのライブラリです。ボタンを押したときに素早く画面を切り替えたり、データを動的に表示するのが得意です。

この2つをうまく組み合わせることで、「SEOに強いページ」と「操作性の高いSPA(シングルページアプリ)」を両立できます。

2. FlaskテンプレートとSPAを併用する構成とは?

2. FlaskテンプレートとSPAを併用する構成とは?
2. FlaskテンプレートとSPAを併用する構成とは?

Flaskでは、HTMLをサーバーで作って返す「テンプレート方式(Jinja2)」があります。これは検索エンジンに内容を理解してもらいやすく、ブログや会社紹介ページなどに向いています。

一方、Reactで作るSPA(Single Page Application)は、最初に1枚のHTMLを読み込み、画面の切り替えをJavaScriptで行います。アプリのようなスムーズな操作ができます。

これらを併用する構成は次のようになります。

  • トップページやSEOが大事なページ → Flaskテンプレート(Jinja2)
  • ユーザーが操作するアプリ部分 → ReactのSPA
  • データ通信部分 → FlaskのAPI(JSON形式)

3. FlaskとReactのフォルダ構成例

3. FlaskとReactのフォルダ構成例
3. FlaskとReactのフォルダ構成例

初心者がイメージしやすいように、実際のフォルダ構成を見てみましょう。


project/
├── backend/
│   ├── app.py              # Flaskアプリのメインファイル
│   ├── templates/          # Jinja2テンプレートを入れる
│   └── static/             # Reactをビルドしたファイルを置く場所
└── frontend/
    ├── package.json        # Reactの設定ファイル
    └── src/                # Reactのソースコード

FlaskのtemplatesフォルダにHTMLを置くと、render_template()関数で画面を返すことができます。一方、Reactのビルド後のファイルをstaticフォルダに置くと、Flaskが自動的に配信してくれます。

4. Flask側の基本コード例

4. Flask側の基本コード例
4. Flask側の基本コード例

from flask import Flask, render_template, jsonify

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/api/message")
def get_message():
    return jsonify({"message": "こんにちは、FlaskとReactの世界へようこそ!"})

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

このように、Flaskで/ルートをテンプレートで表示し、/api/messageのようにAPIも同時に提供できます。

5. React側でFlaskのAPIを呼び出す例

5. React側でFlaskのAPIを呼び出す例
5. React側でFlaskのAPIを呼び出す例

ReactのコンポーネントからFlaskのAPIを呼び出してみましょう。


import React, { useEffect, useState } from 'react';

function App() {
  const [message, setMessage] = useState('');

  useEffect(() => {
    fetch('/api/message')
      .then(res => res.json())
      .then(data => setMessage(data.message));
  }, []);

  return (
    <div>
      <h1>{message}</h1>
    </div>
  );
}

export default App;

ReactがFlaskのAPIにアクセスしてデータを受け取り、画面に表示します。開発中はCORS(異なるドメイン間の通信)設定が必要な場合もあります。Flask拡張のflask-corsを使うと便利です。

6. なぜこの構成が便利なのか?

6. なぜこの構成が便利なのか?
6. なぜこの構成が便利なのか?

FlaskのテンプレートはSEOに強く、ReactのSPAは操作性に優れています。たとえば企業サイトでは、「会社紹介ページ」はFlaskテンプレートで作り、「お問合せフォーム」や「予約ページ」はReactで作ると、検索にも使い勝手にも優れた構成になります。

また、同じサーバー内で両方を動かせるため、サーバーの設定やデプロイも簡単になります。初心者でも「バックエンドとフロントエンドを1つのプロジェクトで体験」できるのが魅力です。

7. よくあるトラブルと対策

7. よくあるトラブルと対策
7. よくあるトラブルと対策
  • 静的ファイルが表示されない:Reactのビルド結果を正しくFlaskのstaticフォルダに置きましょう。
  • CORSエラーが出る:開発時はflask-corsを導入してAPI通信を許可します。
  • ルーティングの競合:FlaskとReactでURLが重ならないように、React側のルートを/app/*のように分けるのが安全です。

8. Flask×React構成のポイント整理

8. Flask×React構成のポイント整理
8. Flask×React構成のポイント整理

この構成を覚えておくと、ブログ、企業サイト、Webアプリ、ダッシュボードなど、さまざまなWebサービスで活用できます。FlaskのシンプルさとReactのスピード感を両立できる、非常に人気の高い構成です。

カテゴリの一覧へ
新着記事
New1
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
New2
Flask
Flask×Flask-SocketIOでチャットアプリを作る流れを初心者向けにやさしく解説
New3
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
New4
Flask
Flask-WTFでファイルアップロードフォームを完全ガイド!初心者でもわかる画像やPDFのアップロード方法
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.8
Java&Spring記事人気No8
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説