FlaskとWebpackを連携してフロント資産をビルド管理する手順を完全解説!初心者でもわかる実践入門
生徒
「FlaskでWebアプリを作っているのですが、JavaScriptやCSSのファイル管理がごちゃごちゃしてしまいます。Webpackというツールを使うと良いと聞いたのですが、どうやって連携すればいいですか?」
先生
「とても良い質問です。Webpack(ウェブパック)は、フロントエンドのJavaScriptやCSS、画像などをまとめて整理・圧縮してくれる便利なツールです。Flaskと組み合わせると、開発がぐっと楽になりますよ。」
生徒
「それは便利そうですね!でも設定が難しそうです…」
先生
「大丈夫です。初心者でもできるように、一つずつ丁寧に説明していきますね。」
1. FlaskとWebpackの関係を理解しよう
Flask(フラスク)はPythonで作るWebアプリケーションのフレームワークで、サーバー側を担当します。
Webpack(ウェブパック)はJavaScriptのツールで、フロントエンド側の資産をまとめてビルド(最適化)するツールです。たとえば、複数のJavaScriptファイルを1つにまとめたり、CSSや画像を圧縮したりできます。
たとえるなら、Flaskが「レストランのシェフ(料理を作る)」で、Webpackが「お皿を整えて綺麗に盛り付けるスタッフ」です。どちらも連携してこそ、お客様(ユーザー)に快適なWebページを提供できます。
2. FlaskとWebpackを連携させる目的
フロントエンドのファイルが増えると、読み込み速度が遅くなったり、どのファイルを更新すれば良いかわからなくなったりします。Webpackを使えば、これを自動で管理・最適化できます。
- 複数のJavaScriptを1つにまとめる(バンドル)
- CSSや画像ファイルを圧縮して軽くする
- ファイル名にハッシュ値を付けてキャッシュ問題を防ぐ
- 開発中に自動でブラウザを更新(ホットリロード)
これにより、FlaskのテンプレートとReact、Vue.jsなどのモダンなJavaScriptライブラリを組み合わせるのもスムーズになります。
3. Flask × Webpackのプロジェクト構成例
実際のプロジェクト構成は以下のようになります。初心者でもわかりやすいようにシンプルな構成にしています。
project/
├── backend/
│ ├── app.py # Flaskアプリの本体
│ ├── templates/
│ │ └── index.html # Flaskテンプレート
│ └── static/
│ └── dist/ # Webpackで出力された静的ファイル
└── frontend/
├── package.json # Webpack設定用
├── webpack.config.js # Webpackの設定ファイル
├── src/
│ ├── index.js # JavaScriptのメインファイル
│ └── style.css # CSSファイル
4. Webpackをセットアップする手順
まずは、Node.jsをインストールしてnpm(Node Package Manager)を使えるようにしましょう。Node.jsはJavaScriptの開発環境を作るためのツールです。
次に、フロントエンドフォルダに移動して必要なパッケージをインストールします。
npm init -y
npm install webpack webpack-cli style-loader css-loader --save-dev
webpackはメインのツール、style-loaderとcss-loaderはCSSを読み込むための設定です。
5. Webpackの設定ファイル(webpack.config.js)を作る
次に、フロントエンドのフォルダにwebpack.config.jsを作ります。
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, '../backend/static/dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
},
mode: 'development'
};
この設定では、src/index.jsを読み込み、Flaskのstatic/distフォルダにbundle.jsとして出力します。
6. Flask側のコードとテンプレートを設定する
次に、Flaskのメインコードを用意します。Flaskではrender_template()関数を使ってHTMLを表示します。
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")
if __name__ == "__main__":
app.run(debug=True)
テンプレートファイルでは、Webpackで出力したbundle.jsを読み込みます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>FlaskとWebpackの連携</title>
</head>
<body>
<h1>Flask × Webpack 連携のサンプル</h1>
<div id="app"></div>
<script src="{{ url_for('static', filename='dist/bundle.js') }}"></script>
</body>
</html>
7. JavaScriptとCSSを作ってビルドしてみよう
次に、ReactやVueを使わずに、簡単なJavaScriptとCSSを作って動作を確認しましょう。
// src/index.js
import './style.css';
document.getElementById('app').innerHTML = '<p>WebpackでビルドしたJavaScriptが動いています!</p>';
/* src/style.css */
p {
color: blue;
font-weight: bold;
}
次に以下のコマンドでWebpackを実行します。
npx webpack
ビルドが成功すると、backend/static/dist/にbundle.jsが生成されます。Flaskを起動してブラウザでhttp://127.0.0.1:5000/を開くと、青文字のメッセージが表示されます。
8. よくあるエラーと対処法
- ファイルが見つからない:Webpackの出力パスとFlaskの
staticフォルダが一致しているか確認しましょう。 - ブラウザが古いJavaScriptを読まない:キャッシュをクリアするか、ファイル名にハッシュを付ける設定を追加します。
- CSSが反映されない:
style-loaderとcss-loaderが正しく設定されているか確認します。
9. Flask × Webpackのメリット
この構成を使うと、開発効率とパフォーマンスが大幅にアップします。
- Flaskでサーバーサイドを管理しながら、モダンなJavaScript開発が可能
- CSS・画像・JSを自動で最適化して高速表示
- ReactやVue.jsを導入する基盤としても使える
初心者でも慣れてくると、チーム開発や本格的なWebアプリでも同じ構成をそのまま使えます。