見出し画像

Python FlaskのBlueprintの使い方とメリット

こんにちは、システムエンジニアのようへいです。

今回は技術的なTipsとして、Pythonの軽量Webフレームワーク「Flask」でのBlueprintについて使い方、メリットをまとめていきます。


Blueprintとは?

一言で表すなら、「アプリを分割して管理する仕組み」です。

大規模システムだとview関数が100以上になることが普通にありますが、view関数を1ファイル(例えばviews.py)にまとめていると、保守性が大きく損なわれます。

1ファイルが大きくなるとロジックの見通しが悪くなり可読性が下がりますし、複数人で同時並行で様々なアプリを開発すると、必ずviews.pyが競合します。

こういう事象を避けるため、view関数を機能ごとに分割するのはよくある手法で、そういう場合に使用するのがBlueprintです。

通常、Pythonのコードは分割しても、fromステートメントでインポートすることで使用することが可能ですが、URLが定義されたview関数はそのまま分割してしまうと、関数ごとに設定した URL が動作しなくなってしまいます。

Blueprint を使用することにより、 view関数 を機能ごとにモジュール分割できるようになります。

Blueprintを採用するメリット

  • view関数を機能ごとにモジュール分割できるため、1モジュールあたりのコード量が小さくなり、可読性が上がる。

  • モジュール毎にview関数が分割されるため、メンテナンス性が格段に上がる。

  • view関数をモジュール毎に分割することで、特定のview関数がどのモジュールのどこにあるかわかりやすくなる。
    (モジュール名から特定できる)

  • モジュールを分割することで、コード変更箇所の影響が局所化される。

Blueprintの実装例

Blueprintを使用しない場合

# views.py
from flask import Flask

# Flaskのアプリケーションオブジェクト
app = Flask(__name__)

@app.route('/app1/func1', methods=['GET'])
def app1_func1():
    return 'app1_func1'

@app.route('/app1/func2', methods=['GET'])
def app1_func2():
    return 'app1_func2'

@app.route('/app2/func1', methods=['GET'])
def app2_func1():
    return "app2_func1"

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

view関数が100個あった場合、特定のview関数が探しにくい状況になります。

Blueprintを使用した場合

サンプルアプリケーションのフォルダ構成

/root
├── app.py
├── app1
│     ├──__init__.py
│     └── views.py
└── app2
      ├──__init__.py
      └── views.py

app1のviews.py

ここから先は

889字

¥ 200

この記事が気に入ったらチップで応援してみませんか?