【Flask】Chapter6-3|カスタムエラーページの作り方
一つ前のページではエラーハンドリングの基本について学習しました。
今回は カスタムエラーページ について見ていきましょう。
Chapter1:Flask入門編
Chapter2:Jinja2入門編
Chapter3:フィルター編
Chapter4:フォーム編
Chapter5:データベース編
Chapter6:エラーハンドリングとデバッグ編
・Chapter6-1:Flaskでよくあるエラー集と対処法
・Chapter6-2:エラーハンドリングの基本
・Chapter6-3:カスタムエラーページを作ろう ◁今回はここ
・Chapter6-4:ログを出力してデバッグしよう
・Chapter6-5:デバッグモードを活用しよう
・Chapter6-6:Flask-DebugToolbarを使おう
Chapter7:アプリ開発編
Webサイトを見ていて「404 Not Found」というメッセージに出会ったことはありませんか?
これは「存在しないページにアクセスした」というエラーです。
Flaskではこうしたエラー時に表示されるページを、開発者が自由にデザイン・構成することができます。
これを「カスタムエラーページ」と呼びます。
初心者のうちは「エラー=悪いこと」と思いがちですが、ユーザーにやさしいエラーページを作ることで、アプリの信頼感やユーザー体験を向上させることができます。
- カスタムエラーページとは何か
- Flaskにおけるエラーハンドラの基本構文
- 404エラーページを作る方法
- 実装例(PythonコードとHTMLテンプレート)
- 応用例とデザインのポイント
本記事は 有料記事(100円)ですが、現在は期間限定で無料公開中です。
カスタムエラーページとは何か?
カスタムエラーページ とは、標準的な無機質なエラーメッセージの代わりに、開発者が独自にデザインしたWebページをエラー発生時に表示する機能です。
特に重要なのが「404 Not Found」ページです。
存在しないURLにアクセスされた際に表示されるもので、ユーザーの離脱を防ぐための工夫が求められます。
例えば「トップページに戻る」ボタンや、おしゃれなイラストなどがあると、アプリの印象が良くなります。
Flaskでカスタムエラー処理を書く基本構文
カスタムエラーページを作るには、Flaskで以下の3つの要素を使います。
@app.errorhandler
でエラー処理を設定
指定したHTTPエラーコードが発生したときに、app.errorhandler()デコレーターを用いて指定した関数を呼び出します。
基本構文は以下の通りです。
@app.errorhandler(ステータスコード) # デコレーター:もしエラーが発生したら... def not_found(error): # この関数を実行 return ...
app.errorhandler()デコレーターについては一つ前のチャプターで詳しく解説しています。
render_template
でHTMLテンプレートを表示
HTMLテンプレートを表示するFlaskの関数です。Jinja2テンプレートエンジンと連携します。
基本構文は以下の通りです。
render_template(テンプレートファイル名) # このテンプレートをブラウザ表示する # 例:render_template('404.html')
render_template
関数を忘れてしまった方は↓↓の記事へ戻って復習しましょう。
make_response()
関数でレスポンスをカスタマイズ
レスポンスオブジェクトを明示的に作成し、ステータスコードなどを細かく設定できる関数です。
基本構文は以下の通りです。
make_response(HTMLテンプレート, ステータスコード)
実装例|Flaskで404エラーページを実装しよう
以下に404ページのサンプルコードを紹介します。
VSCodeにコピーしてブラウザ表示しましょう。
Flaskアプリの404ハンドラのコード例
from flask import Flask, render_template, make_response app = Flask(__name__) # 404エラーハンドラの登録 @app.errorhandler(404) # デコレーター:もし404エラーが発生したら def page_not_found(error): # この関数を実行する return make_response(render_template('404.html'), 404) # render_template('404.html')で404エラー用のHTMLを作成し、make_responseでレスポンスとして返す。 # その際、HTTPステータスコードを404に明示的に設定している。 # 通常のルート @app.route('/') # ルーティング(もしこのURLにアクセスされたら...) def index(): return 'トップページへようこそ!' if __name__ == '__main__': app.run(debug=True)
@app.errorhandler(404)
により、「404エラー発生時の処理」を定義。render_template()
によって、HTMLファイル404.html
を呼び出しています。make_response()
で、404ステータスコードをレスポンスに設定しています。
404エラー発生時の処理なのにレスポンスでわざわざもう一度404を返すことに違和感を覚えるかもしれません。
この場合、404発生時にデコレータによって正しい処理が行われる(正しいPythonコードとなる)ため、エラーがエラーではなくなってしまいます(ステータスコードが200になる)。
処理は正しく終了したがエラーは発生したということを伝えるために、make_response()
で404エラーを返す必要があるのです。
404.htmlテンプレートの例
上記のコードは、以下のHTMLコードと一緒に使うことで活用できます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ページが見つかりません</title> </head> <body> <h1>404 - お探しのページは見つかりませんでした</h1> <p>URLが間違っているか、ページが削除された可能性があります。</p> <a href="/">トップページに戻る</a> </body> </html>
- 非常にシンプルなエラーページですが、ユーザーにとって必要な情報(エラーの内容、回避策)を明確に伝えています。
href="/"
によって、トップページへの導線を提供しています。
カスタムエラーページは500や403にも応用可能
カスタムエラーページは404だけではありません。例えば:
@app.errorhandler(500) def server_error(error): return render_template('500.html'), 500
このように、500(サーバー内部エラー)や403(アクセス禁止)など、他のエラーにも対応できます。
- イラストやアニメーションを使って印象を和らげる
- トップページやヘルプへのリンクを設置
- ユーモアを交えた文言も効果的
まとめ|Flaskでエラーページを活用するポイント
今回は、Flaskでのカスタムエラーページの作り方を学びました。
- Flaskでは
@app.errorhandler()
を使ってエラー処理をカスタマイズできます render_template()
とmake_response()
を組み合わせて表示内容やステータスコードを制御します- ユーザーに優しいエラーページを作ることで、Webアプリの品質と信頼感が向上します
失敗やエラーをユーザーフレンドリーに処理できることは、良い開発者への一歩です。
ぜひ、自分のアプリに合ったエラーページをデザインしてみましょう!
- サイト改善アンケート|1分だけ、ご意見をお聞かせください
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、ご利用者のみなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。ご協力いただけますと幸いです。
アンケート
FAQ|Flaskのカスタムエラーページ設定に関するよくある質問
- Q1. Flaskでカスタムエラーページを複数のエラーコードに対応させるには?
-
@app.errorhandler()
をそれぞれのエラーコードに対して定義すればOKです。例えば404用と500用でそれぞれ関数を作成すれば、それぞれのテンプレートを個別に表示できます。
- Q2. カスタムエラーページのHTMLはどこに配置すればいいですか?
-
Flaskの標準的なテンプレートディレクトリ(
templates
フォルダ)内に、404.htmlや500.htmlなどのファイル名で保存します。Flaskはこの場所を自動的に探します。
- Q3. エラー内容によって表示メッセージを動的に変えることはできますか?
-
はい、
error
オブジェクトの内容をテンプレートに渡すことで、例えばリクエストされたURLやエラーコードに応じた動的な表示が可能です。