Flaskを使ってWebアプリケーションを作っていると、さまざまな「エラー」に遭遇することがあります。たとえば「ページが見つからない(404)」「内部エラー(500)」といったエラーメッセージに戸惑った経験はありませんか?
この記事では、Flaskで発生するエラーの種類と、それらをどのように処理するか、そしてアプリ開発をスムーズに進めるための「デバッグの方法」について解説します。
Flaskにおけるエラーハンドリングとは?

Webアプリケーションでは、予期せぬエラーが発生することは避けられません。たとえば、存在しないページにアクセスされたとき、ユーザーが不正な入力を送信したときなどです。
Flaskでは、以下のような方法でこうしたエラーに対応できます:
- 標準のHTTPエラーコード(例:404 Not Found)
- 独自のエラーページを作成
- アプリケーションエラー(例:データベース接続失敗など)をキャッチして処理
Flaskの標準エラーハンドリング
Flaskは、いくつかのよく知られたHTTPエラー(404, 500など)を標準で処理しますが、それに加えて、独自のカスタムエラーページを作ることもできます。
例:404 Not Found(ページが見つからない)
from flask import Flask, render_template
app = Flask(__name__)
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
このように@app.errorhandler(404)
デコレーターを使えば、ユーザーが存在しないページにアクセスした場合に、カスタムページ(例:404.html)を返すことができます。
例:500 Internal Server Error
@app.errorhandler(500)
def internal_error(e):
return render_template('500.html'), 500
try-exceptを使ったエラートラップ(Python標準)
FlaskはPythonで作られているため、Pythonの標準構文であるtry
–except
も活用可能です。
たとえば、計算やファイル操作、APIアクセスなどで起こる例外をキャッチしたい場合に有効です。
例:0除算の例外処理
@app.route('/divide')
def divide():
try:
result = 10 / 0
return f"結果は {result}"
except ZeroDivisionError:
return "エラー:0で割ることはできません。"
このようにすることで、アプリがクラッシュせずに、ユーザーにわかりやすいメッセージを返せます。
ユーザーにエラーメッセージを表示する
フォーム入力でエラーがあったときなど、ユーザーに適切なエラーを表示したい場合は、テンプレートを使って伝えるのが一般的です。
例:バリデーションエラーの表示
@app.route('/submit', methods=['POST'])
def submit():
name = request.form.get('name')
if not name:
error = "名前は必須項目です。"
return render_template('form.html', error=error)
return f"こんにちは、{name}さん!"
HTML側のテンプレート(form.html)
<form method="POST">
<input type="text" name="name" placeholder="名前を入力">
<input type="submit" value="送信">
</form>
{% if error %}
<p style="color:red;">{{ error }}</p>
{% endif %}
Flaskのデバッグモードの活用

デバッグモードとは?
開発中のFlaskアプリでは、**デバッグモード(debug=True)**を有効にすることで、以下のような便利な機能が使えます:
- エラー発生時に、詳細なトレースバックを表示
- コードを変更するとアプリが自動的に再起動される(ホットリロード)
使い方
if __name__ == '__main__':
app.run(debug=True)
実行すると、エラー時には以下のような「インタラクティブなデバッガー画面」が表示され、どこでエラーが起きたのかがすぐに分かります。
注意:本番環境(Production)ではdebug=Trueを使ってはいけません。セキュリティ上のリスクがあるためです。
よくあるエラーとその対処法
エラー内容 | 原因 | 対処法 |
---|---|---|
404 Not Found | 存在しないURLへアクセス | URLルーティングを見直す |
500 Internal Server Error | サーバー内部のバグ | try-except で例外を確認 |
KeyError | 存在しない辞書のキーを参照 | .get() を使うと安全 |
TypeError | 関数の引数の数が合わないなど | 関数定義と呼び出し元を確認 |
デバッグ用ログを出力する
コードにエラーがある箇所を探すには、ログ出力も有効です。Flaskでは標準のprint()
関数やlogging
モジュールを活用できます。
例:ログの基本
import logging
logging.basicConfig(level=logging.DEBUG)
@app.route('/')
def index():
logging.debug("デバッグログ:index関数が呼ばれました")
return "Hello Flask!"
エラーハンドリングのベストプラクティス
try-except
を使うときは、なるべく具体的なエラー(例:ValueError
)を指定する- 本番環境ではエラーメッセージをユーザーに直接表示しない
- 必ずログに残すことで、後で原因を追跡できるようにする
- 汎用のエラーページ(404、500)をテンプレートとして用意する
まとめ:エラーは学びのチャンス!
エラーが出ると戸惑うこともありますが、適切に対処すれば大きな問題にはなりません。Flaskのエラーハンドリング機能を活用して、より安定したアプリケーションを作れるようになりましょう!