Flask学習|カスタムエラーページの作り方【チャプター6-03】

一つ前のページではエラーハンドリングの基本について学習しました。
今回は カスタムエラーページ について見ていきましょう。
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(404) def not_found(error): return ...
render_templateでHTMLテンプレートを表示
HTMLテンプレートを表示するFlaskの関数です。Jinja2テンプレートエンジンと連携します。
基本構文は以下の通りです。
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) def page_not_found(error): # 404.html を表示し、ステータスコードを 404 に設定する return make_response(render_template('404.html'), 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.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アプリの品質と信頼感が向上します
失敗やエラーをユーザーフレンドリーに処理できることは、良い開発者への一歩です。
ぜひ、自分のアプリに合ったエラーページをデザインしてみましょう!
FAQ|Flaskのカスタムエラーページ設定に関するよくある質問
- Q1. Flaskでカスタムエラーページを複数のエラーコードに対応させるには?
-
@app.errorhandler()
をそれぞれのエラーコードに対して定義すればOKです。例えば404用と500用でそれぞれ関数を作成すれば、それぞれのテンプレートを個別に表示できます。
- Q2. カスタムエラーページのHTMLはどこに配置すればいいですか?
-
Flaskの標準的なテンプレートディレクトリ(
templates
フォルダ)内に、404.htmlや500.htmlなどのファイル名で保存します。Flaskはこの場所を自動的に探します。
- Q3. エラー内容によって表示メッセージを動的に変えることはできますか?
-
はい、
error
オブジェクトの内容をテンプレートに渡すことで、例えばリクエストされたURLやエラーコードに応じた動的な表示が可能です。