CodeZine(コードジン)

特集ページ一覧

Laravelのエラーハンドラを理解しよう

人気のPHPフレームワークLaravelを習得しよう 第7回

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2020/04/16 11:00

 本連載ではPHPフレームワークのひとつであるLaravelを紹介していきます。Laravelは、「Web職人のためのフレームワーク」というキャッチコピーのもと、ここ数年で人気がうなぎ上りのフレームワークです。連載を通して、その人気の秘密を味わっていただこうと思います。第6回である前回は、サービスコンテナとサービスプロバイダを紹介しました。今回は、Laravelのエラーハンドラを紹介します。

目次

Laravelでのエラーの扱いとエラーページ

 アプリケーションにはエラーや例外はつきものです。このエラーや例外をLaravelがどのように扱っているのか、を見ていきましょう。

すべてのエラーや例外はLaravelがキャッチ

 エラーや例外というのは、開発途中では頻繁に発生し、それを修正することで、アプリケーションを完成へと近づけていきます。ところが、完成された状態のアプリケーションでも、エラーは発生し得ます。というのは、アプリケーションのユーザが想定外の使い方をしたり、アプリケーションが利用しているデータベースなど外部のシステムが想定外の動作をしたりすることがあるからです。そのため、アプリケーションを作成する際は、発生したエラーを適切に処理するように組み込む必要があります。

 Laravelには、そのようなエラーへの対応もやりやすい仕組みが含まれています。それがLaravelのエラーハンドラです。Laravelは、そのアプリケーション内で発生したエラーや例外をすべてキャッチし、Laravel側で処理するようになっています。

 例えば、前回のリスト9で作成したMagazineクラスのprint()をprnt()と間違えたとします。この状態で次のURLにアクセスすると、当然エラーとなります。

  • http://localhost/firstlaravel/public/chap6/newBook

 そのエラー画面は、図1のようになります。

Laravelのエラー画面
図1:Laravelのエラー画面

 このエラー画面は、Laravelのオリジナルであり、エラーが発生した箇所だけでなく、様々な情報を取得できるようになっています。このような画面が表示されるのは、すべてのエラーや例外をLaravel本体がキャッチできているからです。

環境変数APP_DEBUG

 図1のエラー画面というのは、開発段階ではありがたい画面です。一方、本番環境では、このような画面を表示させるのはまずいです。その切り替えに便利な機能がLaravelにあります。 Laravelプロジェクトには、プロジェクトディレクトリ直下に.envファイルがあります。このファイルは、このプロジェクトの設定情報が環境変数の形で書かれているファイルです。この中に次の設定項目があります。

APP_DEBUG=true

 この値を次のようにfalseにします。

APP_DEBUG=false

 その上で、先のURLにもう一度アクセスすると、図2の画面になります。

本番環境用のエラー画面
図2:本番環境用のエラー画面

 図1の画面とは違い、エラー詳細が表示されなくなりました。このように、環境変数APP_DEBUGの値を、trueとfalseと切り替えることで開発モードのエラー表示と本番モードのエラー表示の切り替えが可能となります。

オリジナルのエラー画面

 とはいえ、図2の画面はシンプルすぎて、これはこれで本運用には少し不親切です。実は、この画面は、オリジナルのものに差し替えることができます。方法はいたって簡単で、resources/views/errorsディレクトリ内に、HTTPステータスコードをファイル名としたテンプレートファイルを作成するだけです。図2のエラー画面は、その画面表記の通り、HTTPステータスコードは500番ですので、ファイル名は、500.blade.phpとなります。例えば、次のテンプレートファイルを作成したとします。

[リスト1]resources/views/errors/500.blade.php

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>障害発生!</title>
</head>
	<body>
		<h1>障害発生!</h1>
		<p>申し訳ございません。</p>
	</body>
</html>

 すると、このファイルを作成するだけで、先のURLにアクセスした際の画面は図3となります。もちろん、APP_DEBUGの値はfalseとしておく必要はあります。

オリジナルの本番環境用エラー画面
図3:オリジナルの本番環境用エラー画面

 この方式を使えば、存在しないURLにアクセスしてきた際のエラー画面も、404.blade.phpというファイル名のテンプレートファイルを作成するだけで、オリジナルの画面が表示されるようになります。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:人気のPHPフレームワークLaravelを習得しよう
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5