Back to Blog

FlaskでBuleprintを導入する方法を解説

flask

2024年7月11日

こんにちは!

今回の記事では、FlaskでBlueprint(ブループリント)を導入する方法について解説します。

Flaskは軽量で柔軟性の高いPythonのWebフレームワークです。

しかし、アプリケーションが大規模になるにつれて、コードの管理や拡張が難しくなることがあります。

そこで、FlaskのBlueprint機能を利用することで、アプリケーションをモジュール化し、整理することができます。

本記事で、Blueprintの基本的な概念から実際の導入方法、さらに応用例までを詳しく解説します。

FlaskのBlueprintとは?

そもそもBlueprintとは何なのでしょうか?

BlueprintはFlaskの機能の一つで、アプリケーションを複数のモジュールに分割することを可能にします。

例えば、ECサイトについて考えてみましょう。ECサイトには、ユーザー管理機能や商品管理機能、売上管理機能などさまざまな機能があります。

それらの機能をFlaskのapp.pyに記述すると、1つのファイルが煩雑になります。そこで、Blueprintをつかって、機能を分割します。

これにより、各モジュールは独立して開発、テスト、保守ができるようになります。

Blueprintのメリット

Blueprintには、以下のようなメリットがあります。

メリット説明
コードの整理大規模なアプリケーションを小さなモジュールに分割することで、コードが見やすくなります。
再利用性Blueprintを使うことで、同じモジュールを異なるプロジェクトで再利用することができます。
独立した開発各Blueprintは独立して開発およびテストができるため、チーム開発においても効率が向上します。
柔軟なルーティングBlueprintを使うことで、URLのプレフィックスを簡単に設定でき、アプリケーション全体のURL構造を柔軟に管理できます。

大規模なサイト作成時にはメリットがある一方、小規模なサイトの場合は、設定の手間が増えてしまいます。たとえば、LPのような1ページだけの小規模なサイトでは、Blueprintは必要ありません。

開発するWebアプリケーションの規模によって、Blueprintを導入するかどうかの検討をしましょう。

Blueprintの実装方法

続いてBlueprintの実装方法について解説します。

Flaskのインストールとディレクトリ構造

まず、Flaskをインストールします。

pip install Flask

今回、Blueprintを作成するにあたり、アプリケーションのディレクトリ構造は以下のようにします。

my_flask_app/
├── app.py
├── blueprints/
│   ├── __init__.py
│   ├── user.py
│   └── product.py
└── templates/
    └── index.html

blueprintsディレクトリを作成して、user.py(ユーザー管理)とproduct.py(商品管理)の機能を分割します。

Blueprintの作成

それでは、Blueprintを作成していきましょう。

まず、blueprints/user.pyという名前のファイルを作成し、以下のコードを追加します。

from flask import Blueprint, render_template

user_bp = Blueprint('user', __name__, template_folder='templates')

@user_bp.route('/user')
def user_home():
    return "User Home Page"

次に、blueprints/product.pyファイルを作成し、以下のコードを追加します。

from flask import Blueprint, render_template

product_bp = Blueprint('product', __name__, template_folder='templates')

@product_bp.route('/product')
def product_home():
    return "Product Home Page"

app.pyにBlueprintの登録

続いて、app.pyを作成し、Blueprintの登録を行います。

アプリケーションのルートディレクトリにapp.py を作成し、以下のコードを追加します。

from flask import Flask, render_template
from blueprints.user import user_bp
from blueprints.product import product_bp

app = Flask(__name__)

# Blueprintの登録
app.register_blueprint(user_bp)
app.register_blueprint(product_bp)

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

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

このコードでは、作成したBlueprintをアプリケーションに登録しています。

register_blueprintメソッドを使うことで、各Blueprintをアプリケーションに追加することができます。

テンプレートの作成とFlaskの実行

最後にテンプレートを作成します。

templatesディレクトリのindex.htmlに以下のようなテンプレートを作成します。

<!DOCTYPE html>
<html lang="ja">
<body>
    <a href="/user">ユーザーページ</a><br>
    <a href="/product">商品ページ</a>
</body>
</html>

これで、Webアプリの設定は完了です。

Flaskアプリを実行してみましょう。

python app.py

ブラウザで http://127.0.0.1:5000/ にアクセスすると、ホームページが表示されます。

また、http://127.0.0.1:5000/user にアクセスすると「User Home Page」が、http://127.0.0.1:5000/product にアクセスすると「Product Home Page」が表示されます。

さらに分割する方法

先ほどまで、blueprintsディレクトリにファイルを作成してきましたが、さらに分割することができます。

ここでは、ユーザー関連の機能をさらに細かく分割します。

ディレクトリ構造

buleprintsディレクトリ内にuserディレクトリを作成し、ユーザーの機能を分割します。

my_flask_app/
├── app.py
├── blueprints/
│   ├── __init__.py
│   ├── user/
│   │   ├── __init__.py
│   │   ├── views.py
│   │   └── models.py
│   └── product.py
└── templates/
    └── index.html

各ファイルの設定

まず、user/init.pyファイルを作成します。以下の内容を記述します。

from flask import Blueprint

user_bp = Blueprint('user', __name__)

from . import views, models

次に、blueprints/user/views.pyファイルを作成します。

from flask import render_template
from . import user_bp

@user_bp.route('/user')
def user_home():
    return "User Home Page"

blueprints/user/models.pyは今回は特に必要ありませんが、データベースのモデルの設定などを記述します。

このように、Blueprintを使って機能ごとにファイルを分割することで、コードの保守管理が容易になります。

まとめ

今回の記事では、FlaskのBlueprintについて解説しました。

Blueprintを使用することで、コードをモジュール化し、再利用性や保守性を向上させることができます。

Blueprintを適切に活用することで、Flaskアプリケーションの開発効率を大幅に向上させることができるので、Blueprintの導入を検討してみてください。

本記事が何かのお役に立てれば幸いです。

ここまでお読みいただきありがとうございました。

Webの知識を作りながら学ぶ
Flask WebAcademy

SNSアプリやチャットアプリ、さまざまなアプリを作りながら学べる実践的なカリキュラム

詳細を見る