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円)ですが、現在は期間限定で無料公開中です。

<<前のページ

Flaskの記事一覧

次のページ>>

カスタムエラーページとは何か?

カスタムエラーページ とは、標準的な無機質なエラーメッセージの代わりに、開発者が独自にデザインしたWebページをエラー発生時に表示する機能です。

【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

特に重要なのが「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関数を忘れてしまった方は↓↓の記事へ戻って復習しましょう。

あわせて読みたい
Flask入門|render_template関数を理解しよう【チャプター2-04】
Flask入門|render_template関数を理解しよう【チャプター2-04】

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ステータスコードをレスポンスに設定しています。

ルーティングについて復習したい方は↓↓の記事に戻りましょう。

あわせて読みたい
Flask入門|ルーティングを理解しよう【チャプター1-04】
Flask入門|ルーティングを理解しよう【チャプター1-04】

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アプリの品質と信頼感が向上します

失敗やエラーをユーザーフレンドリーに処理できることは、良い開発者への一歩です。

ぜひ、自分のアプリに合ったエラーページをデザインしてみましょう!

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいFlask学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

Flaskの記事一覧

次のページ>>

FAQ|Flaskのカスタムエラーページ設定に関するよくある質問

Q
Q1. Flaskでカスタムエラーページを複数のエラーコードに対応させるには?

@app.errorhandler()をそれぞれのエラーコードに対して定義すればOKです。例えば404用と500用でそれぞれ関数を作成すれば、それぞれのテンプレートを個別に表示できます。

Q
Q2. カスタムエラーページのHTMLはどこに配置すればいいですか?

Flaskの標準的なテンプレートディレクトリ(templatesフォルダ)内に、404.htmlや500.htmlなどのファイル名で保存します。Flaskはこの場所を自動的に探します。

Q
Q3. エラー内容によって表示メッセージを動的に変えることはできますか?

はい、errorオブジェクトの内容をテンプレートに渡すことで、例えばリクエストされたURLやエラーコードに応じた動的な表示が可能です。

記事URLをコピーしました