適当おじさんの適当ブログ

技術のことやゲーム開発のことやゲームのことなど自由に雑多に書き連ねます

いまさらながら Flask についてまとめる 〜Debugger〜

はじめに

いまさらながら Flask について整理していきます。「Flaskとかいうやつを使って、試しにアプリ開発にトライしてみたい」くらいの感覚の人を対象にしています。

Flaskのバージョンは 0.12.2 です。

この記事では、デバッガーについて紹介します。その他のFlaskまとめシリーズはこちらから

Debugger?

何が便利か

アプリケーション開発時にエラーが発生した場合、原因解明のためにより深くトレースしたい場合があります。そういったときにデバッガーが有用です。デバッガーがONだと、Webブラウザ上で対話的にコードを実行させることができます。

デバッガーがOFFの状態で内部エラーが発生し、エラーハンドリングしていない場合、以下のように「Internal Server Error」となります。

f:id:subarunari:20180310150105p:plain

これでは、どこでエラーが発生したのかすぐにわかりません。デバッガーがONになっていると、代わりにデバッグのための画面が表示されます。

デバッグモードについて

Flaskをデバッグモードで起動することで、デバッガーがONとなり、デバッグのための画面が表示されます。なのでこのブログでは、デバッグモードを有効にする方法を中心に話を進めます。

FlaskではデフォルトでデバッグモードがOFFとなっています。デフォルトでOFFなおかげで、本番環境でうっかり--productionのような本番用にスイッチするためのオプションを付け忘れて、デバッグ画面が表示してしまうようなことはありません。

デバッグモードを有効にする

デバッグモードは以下のいずれかの方法で有効にできます。

  1. コードでオプションを指定する
  2. アプリケーションの実行時に、コマンドライン引数にオプションを指定する
  3. 環境変数に値を設定する

1. コードでオプションを指定する

from flask import Flask                                                         
                                                                              
app = Flask(__name__)                                                          
app.run(debug=True) # デバッグモードを有効にする

app.run() にはいくつかのオプションを指定でき、その中にはデバッグモードに関するものがあります。いずれも TrueFalse を指定し、デフォルトは False です。

オプション 内容
debug デバッグモードを有効にします。このオプションに設定した値は、use_reloaderuse_debuggerに引き継がれます。
use_reloader アプリケーションに変更があった場合に自動的に再起動するか否かを設定します。これは、 werkzeug のオプションです。
use_debugger アプリケーションエラーが発生した場合に、デバッガーを起動するか否かを設定します。これも werkzeug のオプションです。

debug を有効にするとFlaskのデバッグモードが有効になり、かつ、デバッガーが起動されるようにします。 use_reloaderuse_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のデバッグ機能を活用するためには、デバッガーと再起動の設定をオフにしておく必要があります。これまで示したいずれかの方法を使ってオフにしておきましょう。