Flaskでソースの変更を検知して、Webアプリを自動リロードする[Python Tips]

2018年11月25日日曜日

Flask Python

t f B! P L

Flaskでソースの変更を検知して、Webアプリを自動リロードする[Python Tips]

FlaskのWebアプリ開発で、ソースコードが変更されたら、アプリを自動リロードする方法です。

開発時はコードを頻繁に編集すると思いますが、Flaskの標準では、コードを変更しても直ぐには認識されず、毎回Webサーバを立ち上げ直す必要があります。
う〜ん…とても面倒です。

そこで、コードを編集したら、Webサーバを自動リロードする方法を調べました。
これで気分良く開発が出来そうです♪

Flaskをデバッグモードで起動する

Flaskをデバッグモードで起動すると、コード変更時に自動リロードしてくれます。
app.run(debug=True)とするだけで、簡単に設定出来ます。

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

起動方法は、デバッグなしの時と同じ。

$ python3 app.py

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 243-698-xxx

しかし、この方法には問題が1つあります。
コンパイルエラーがある状態で、ファイルを保存してしまうと、Pythonのプロセス自体が落ちてしまいます。
そうなると、エラーを修正した後に、再度Webアプリ立ち上げ直す手間が発生します。
う〜ん…ちょっと面倒です。

Flaskコマンドラインインターフェースを使う

よくよく調べると、Flask 0.11から追加された、コマンドラインインターフェースを使えば、全てが解決しました。

やり方は単純で、以下のflaskコマンドで、Webアプリを起動するだけです。
起動後にコードを変更した場合、自動リロードが走り、変更が反映されます。

$ flask run --debugger --reload

 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 131-136-572

さらに、エラーがある状態でコードを保存した場合でも、下のようにエラー情報をブラウザに表示してくれます。
修正して保存すれば、自動リロードが走って、そのままデバッグを続ける事が出来ます。

enter image description here

う〜ん…だいぶ楽になりました♪

おわりに

<関連記事>

MacにPython3をインストールする! (サクッとインストールしたい人向け)

Mac環境に、Python3を簡単にインストールする方法を紹介しています。

Python3入門! 基礎をおさらい (変数/演算子/条件分岐/繰り返し)

1つの記事に、基本文法をまとめて書いているので、時間が空いて忘れてしまった場合でも、一気に復習出来るようになっています。よければ見てください。

Flaskで REST API開発する! 直ぐに実行できるサンプルコードで解説 【Python Tips】

Pythonの軽量Webフレームワークである、FlaskでREST APIを作るまでの流れを、紹介します。

Flask-RESTful を使って、REST APIを作る【Python Tips】

Flaskと、Flask-RESTfulを使って、REST APIを作ります。
Flask-RESTfulを使うと、オブジェクト思考な感じで、REST APIが作れます。

Pythonで小数点の四捨五入/切り捨て/切り上げを行う

Pythonのdecimalモジュールを使って、小数点の丸めを行う方法です。

スポンサーリンク

QooQ