SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

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

 本連載では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というファイル名のテンプレートファイルを作成するだけで、オリジナルの画面が表示されるようになります。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Laravelのエラーハンドラのカスタマイズ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
人気のPHPフレームワークLaravelを習得しよう連載記事一覧

もっと読む

この記事の著者

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

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook<個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/12130 2020/04/16 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング