【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テンプレート)
- 応用例とデザインのポイント
- Flask開発を Stream Deck でボタン化しよう!
-
Flaskは非常に軽量かつシンプルなフレームワークですが、それゆえに定型作業が多く、開発は単調な作業の連続になりがちです。
それこそがFlaskのメリットであり、習得難易度が低い理由でもありますが、単調な作業は退屈で、ミスも起こりやすいでしょう。
そこで役に立つのが Stream Deck 。
このような定型手順が多い作業を “ボタン化” することで視覚化。
圧倒的に 効率的 かつ ストレスフリー な開発環境が簡単に手に入ります↓↓
あわせて読みたいFlask開発をStreamDeckでボタン化しようあわせて読みたいプログラマー向けStream Deckの選び方|初心者でも失敗しないモデル比較ガイド
カスタムエラーページとは何か?
カスタムエラーページ とは、標準的な無機質なエラーメッセージの代わりに、開発者が独自にデザインした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やエラーコードに応じた動的な表示が可能です。






