はじめに
いまさらながら Flask について整理していきます。「Flaskとかいうやつを使って、試しにアプリ開発にトライしてみたい」くらいの感覚の人を対象にしています。
Flaskのバージョンは 0.12.2 です。
この記事では、デバッガーについて紹介します。その他のFlaskまとめシリーズはこちらから。
Debugger?
何が便利か
アプリケーション開発時にエラーが発生した場合、原因解明のためにより深くトレースしたい場合があります。そういったときにデバッガーが有用です。デバッガーがONだと、Webブラウザ上で対話的にコードを実行させることができます。
デバッガーがOFFの状態で内部エラーが発生し、エラーハンドリングしていない場合、以下のように「Internal Server Error」となります。
これでは、どこでエラーが発生したのかすぐにわかりません。デバッガーがONになっていると、代わりにデバッグのための画面が表示されます。
デバッグモードについて
Flaskをデバッグモードで起動することで、デバッガーがONとなり、デバッグのための画面が表示されます。なのでこのブログでは、デバッグモードを有効にする方法を中心に話を進めます。
FlaskではデフォルトでデバッグモードがOFFとなっています。デフォルトでOFFなおかげで、本番環境でうっかり--production
のような本番用にスイッチするためのオプションを付け忘れて、デバッグ画面が表示してしまうようなことはありません。
デバッグモードを有効にする
デバッグモードは以下のいずれかの方法で有効にできます。
- コードでオプションを指定する
- アプリケーションの実行時に、コマンドライン引数にオプションを指定する
- 環境変数に値を設定する
1. コードでオプションを指定する
from flask import Flask app = Flask(__name__) app.run(debug=True) # デバッグモードを有効にする
app.run()
にはいくつかのオプションを指定でき、その中にはデバッグモードに関するものがあります。いずれも True
か False
を指定し、デフォルトは False
です。
オプション | 内容 |
---|---|
debug | デバッグモードを有効にします。このオプションに設定した値は、use_reloader とuse_debugger に引き継がれます。 |
use_reloader | アプリケーションに変更があった場合に自動的に再起動するか否かを設定します。これは、 werkzeug のオプションです。 |
use_debugger | アプリケーションエラーが発生した場合に、デバッガーを起動するか否かを設定します。これも werkzeug のオプションです。 |
debug
を有効にするとFlaskのデバッグモードが有効になり、かつ、デバッガーが起動されるようにします。
use_reloader
と use_debugger
に指定しない場合は debug
と同じ値になります。値を設定した場合、指定した値で上書きされます。
app.run(debug=True, use_reloader=False, use_debugger=False)
これら2つのオプションは内部で実行されている werkzeug.serving.run_simple
に引き渡されます。Flaskのデバッグ画面の仕組みは Werkzeug のものということがわかります。
2. コマンドライン引数にオプションを指定する
flask run
コマンド実行時に、引数にオプションを指定できます。オプションには、デバッガーを有効にする--debugger
と自動的な再起動がされる--reload
が存在します。
$ flask run --debugger --reload
これらのオプションを指定しても、Flaskがデバッグモードでなければ設定が有効にならないようでした。一方で、設定を無効にするための --no-debugger
と --no-reload
の2つのオプションがあります。
$ flask run --no-debugger --no-reload
前述した通り、デバッグモードで起動するとデバッガーと再起動の設定がどちらも有効になります。デバッグモードで有効になっている設定を個別に無効にする際に使えます。
3. 環境変数に値を設定する
debug
の値は、FLASK_DEBUG
の環境変数を設定することでも値を設定できます。
$ export FLASK_DEBUG=1
IDEなどでのデバッグモード
EclipseやVisual Studio Codeのデバッグ機能を活用するためには、デバッガーと再起動の設定をオフにしておく必要があります。これまで示したいずれかの方法を使ってオフにしておきましょう。