「Python FlaskによるWebアプリ開発入門」で始める開発シリーズ パート2

Luca

Flask学習シリーズパート2です。
これまでのシリーズについては、関連記事からどうぞ

今回は、0章「環境構築」~1章「最小限のアプリを作る」の中で躓いたポイントです。

内容は
・ファイル保存時の自動フォーマット機能について
・デバッグモードがONにならない

このシリーズは、こちらの書籍を参考にFlaskについて学習しています。

情報を取得できませんでした。

前提知識

  • window11
  • Python 3.12.3(筆者は基本が分かる程度)
  • Flask 3.0.3(初心者)

0章 環境構築

環境構築の作業内容は、以下の通りです。

  1. Pythonインストール
  2. 仮想環境作成・有効化
  3. Flaskインストール
  4. VSCode(+拡張機能)インストール
  5. VSCode設定
  6. VSCodeに仮想環境を反映

こんな感じです。
ここに関しては、問題なく終わりました。

自動でフォーマット機能について

VSCodeの設定は問題なく終わりましたが、作業していて変更した点があります。

それが「ファイル保存時の自動フォーマット機能を有効にする」設定です。
これは無効にするのをおすすめします。

この機能は名前の通り、ファイルを保存した際にコードを自動で整えてくれる機能で便利なのですが、htmlファイルを作るときのフォーマットが最悪でした。

フォーマット前

こんな感じで、Flask(Jinja2)のコマンドを改行を無視して、連結してフォーマットしてくれちゃいます。こでは可読性ゼロです….
正直使い物にならないと感じたので、自動フォーマットはオフにしました。

1章 最小限のアプリを作る

1章では、最小限の機能を搭載したアプリを作りながらFlaskの基本操作を学びます。

  1. アプリケーションの作成・実行
  2. デバッグモードについて
  3. ルーティングについて
  4. テンプレートについて
  5. Jinja2の使い方
  6. 問い合わせフォームの作成

当たり前ですが、専門用語などが多く登場します。
分からない単語やいまいちピンと来ない説明は、chatGPTにその都度聞きながら進めました。
プロンプトはこんな感じです。

・〇〇について初心者向けにかみ砕いて説明してください。

・~~説明文章~~
この文章の説明が分かりにくいです。
初心者向けに解説してください。

デバッグモードがONにならない

1章のスタートでデバッグモードをONにする作業があります。
しかし、FLASK_ENV 環境変数を development に設定してもデバッグモードが有効にならない状況でした。

Flaskのドキュメントを確認すると、この環境変数が development に設定されていれば、自動的にデバッグモードがオンになるはずです。

状況確認のため echo $env:FLASK_ENV を実行したところ development と表示されまた。
これにより環境変数自体の設定ミスはないことが明らかになりました。

状況確認

・FLASK_ENV 環境変数は development
・Debug mode : off

トラブルシューティング

デバッグモードがONにならない原因を探すため、以下の内容を確認しました。
今回のトラブルシューティングは、chatGPTを使用しています。

STEP

環境変数の確認

最初のステップとして、環境変数 FLASK_ENV が適切に development に設定されていることを再確認しました。
この確認は PowerShell コマンド echo $env:FLASK_ENV を用いて行い、設定が正しく適用されていることを確認しました。

STEP

Flask アプリケーションのコード確認

次に、アプリケーションのコード内で app.run() メソッドが呼び出される際に、デバッグモードが明示的に False に設定されていないかを確認しました。また、app.debug = True のようにデバッグモードが強制的に設定されている箇所がないかもチェックしました。

STEP

設定ファイルの確認

アプリケーションの設定を管理する .env ファイルや他の設定ファイルに、FLASK_ENV 以外にデバッグモードを制御する可能性のある設定が上書きされていないかを確認しました。特に、DEBUG キーの値が False に設定されている行がないかを見ました。

STEP

デバッグモードの強制有効化

環境変数やアプリケーションコードを確認してもデバッグモードがオフのままだったため、Flask アプリケーションのコードに app.config['DEBUG'] = True を追加し、プログラム的にデバッグモードを有効にしました。

解決策

Flaskの動作が環境変数を適切に反映していないことが明らかになったため、コード内で明示的にデバッグモードを有効にすることにしました。
具体的には、Flask アプリケーションのインスタンス化後、app.config['DEBUG'] = True を追加することで、プログラム上からデバッグモードを強制的にオンにしました。

下記のコードを app.py に貼り付けます。

from flask import Flask

app = Flask(__name__)

# 明示的にデバッグモードを設定
app.config['DEBUG'] = True
print('Debug mode:', app.debug)

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

この変更を適用後、アプリケーションを再起動し、デバッグモードが「Debug mode: True」と表示されることを確認しました。

枠の部分がprintで表示しているところです。
しっかりとデバッグモードがONになっています。ですが、アプリケーションを実行したときにデフォルトで表示される Debug mode は off のままになっています。

デバッグモードの機能は問題なく動作していますので、大丈夫です。
ただ、根本的な部分は解決していないような気もしますが(笑)

Luca

今後、別のプロジェクトを始めた際にも起こるようなら根本的な解決をしたいと思います。
今回はとりあえずこのまま進みます。

関連記事