九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、Laravel 6.0
がリリースされましたが、今回大きな変更のひとつに「エラーメッセージ」が変更になったというものがあります。
以前はwhoops
というパッケージを使っていたのですが、今回からはIgnition
を利用するようになっています。
Ignition
は見た目がキレイなのも特徴のひとつですが、flareというエラーを共有するウェブサービスと連携することができるので、例えばクライアントさんがテストをしているときに発生したエラー内容をそのままflare
に送信してシェアできるようになっています。
ということで、今回はLaravel
の新しいエラーメッセージIgnition
についてまとめてみます。
ぜひ皆さんのお役に立てると嬉しいです😊✨
開発環境: Laravel 6.0.1
目次
Ignitionの特徴まとめ
見た目がキレイ
もちろん以前のwhoops
も見やすかったですが、一番上におおきくエラー内容を表示してくれるのでより分かりやすくなったのではないでしょうか。
また、エラーが発生したファイルや場所もスッキリしています。
エラー発生時の状況をタブごとにまとめてくれる
Ignition
はエラーの状況を以下ような内容で各タブにまとめてくれます。
- Stack trace ・・・ エラー発生場所
- Request ・・・ リクエスト(ヘッダーやパラメータなど)
- App ・・・ ルートやビューなど
- User ・・・ IPやユーザーエージェントなど
- Context ・・・ Laravelのバージョンなど
- Debug ・・・ SQLクエリーなど
それぞれのタブは以下のようになります。
Request
App
User
Context
Debug
解決方法を提案してくれる
例えば、home.blade.php
をビューとして指定しようとして間違ってhomw
とタイプしたとして実行してみましょう。
public function index() { return view('homw'); // ← ここはタイプミス }
すると、エラメッセージの下に「もしかして?」を表示してくれます。
これは、ビューの名前だけでなくメソッド名やパスの提案もしてくれます。
public function index() { $users = \User::get(); // 正しくは \App\User }
この場合は、次のようになります。
※ ただし、この機能は万能ではなく「いや、それは関係ないよ・・・」という場合もあるので、その辺りは臨機応変な対応が必要になります。
専用パッケージをインストールするとブラウザ上からコードを変更できるようになる
Ignition
にはignition-code-editor
という拡張パッケージが用意されていて、これをインストールすると、なんとブラウザからコードを変更できるようになります。
パッケージをインストールするには以下のコマンドを実行してください。
composer require facade/ignition-code-editor --dev
実際にブラウザからコード変更している様子はこちら。(ビューの名前をhomw
→ home
へ修正する様子)
※ ただし、内部的にはPHP
のfile_put_contents()
関数でファイルを変更しますので、PHP
が書き込み権限を持っていないといけません。そのため、「ローカルとはいえセキュリティ上よろしくないのでは??」と思う方にはあまりおすすめできません。
エラーを共有できる
flareというエラーを共有するウェブサービスに簡単に登録することができます。ただし、このウェブサービスは有料で月$29ドル〜となっています。(2019.09.06現在)
小規模なサイトではあまり有効ではないかもしれませんが、大規模な開発となるとこういったサービスはとても便利ではないでしょうか。
おまけ:目に優しいモードがつかえる
これはそれほど目立った特徴ではないですが、コンフィグレーションを変更することで夜間モードに変更することができます。
コンフィグレーションを変更するには、まず以下のコマンドでファイルをコピーします。
php artisan vendor:publish --provider="Facade\Ignition\IgnitionServiceProvider" --tag="config"
すると、config/ignition.php
というファイルが作成されるので、この中でtheme
をlight
からdark
へ変更してください。(もちろん.env
でも設定できます)
'theme' => env('IGNITION_THEME', 'dark'),
設定がおわると次のように目に優しい夜間モードになります。
※ 個人的にはlight
の方が見やすくて好きかもしれません。
Ignitionが使えない(前と同じwhoopsエラーが表示される)場合
おそらくすぐ治るとは思いますが、私の環境ではこの現象が発生して一度Laravel 6.0
をインストールしなおしました。その後、解決法がわかったのでまとめておきます。
私の場合、Laravel
のインストールはいつもcomposer
から直接実行していました。
composer create-project --prefer-dist laravel/laravel (プロジェクト名)
ただ、この場合だとどうやら古いソースコードがインストールされてしまうようです。見分け方はcomposer.json
を開いてflip/whoops
が記述されているかどうかです。(記述されている場合は古いソースコードです)
"require-dev": { "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^3.0", "phpunit/phpunit": "^8.0" }
Ignition
を使うにはcomposer.json
が次のようになっている必要があります。
"require-dev": { "facade/ignition": "^1.4", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^3.0", "phpunit/phpunit": "^8.0" },
では、どのようにインストールすればいいかですがLaravel
のドキュメントの一番目に書かれている「Laravelインストーラー」を使う方法です。
まずグローバルな環境にlaravel/installer
をインストールします。
composer global require laravel/installer
※ この時注意が必要なのは、$HOME/.composer/vendor/bin
にパスが通っていること。つまり「laravel」コマンドが使えるようになっている必要があります。
そして、以下のコマンドで新プロジェクトをインストールするとIgnition
はデフォルトで有効になっています。
laravel new (プロジェクト名)
おわりに
ということで、今回は新しくなったエラーメッセージのIgnition
を紹介しました。
今回はじめて使ってみた感想としては、「とても好感触!」でしたが、ビジネス的にflare
と連携するところはうまいな〜とうならされました。
実は個人的に開発者向けのエラー共有サービスを作った(そして、あえなく失敗した😂)経験があるので、「このやり方があったか!」とも思いました。
というのも、当然クライアント様方は開発の専門家ではないことの方が多いので、不具合が発生しても肝心の情報をいただけない場合もあります。そのため、せめてエラーメッセージだけでも共有してほしいと考えてのことでした。
※ 相当昔の話ですが、親切心からわざわざGoogle
でエラー内容を翻訳して送っていただいたことがありました。お気遣いは心から嬉しかったのですが、変数名やメソッド名まで翻訳されて「ありがたいのですが、そのままおくっていただいて・・・」となったこともありました(もちろん気を使っていただいて、いまでも感謝しています✨)
なので、もしタイミングがあればflare
の方も試してみようと思います。
ぜひ皆さんもIgnition
で開発の効率を上げてくださいね。
ではでは〜!