本日(2020/9/8)、Laravel 8 がリリースされます。いつも通りならば時差により深夜の更新になります。Laravel 8 のサポート期間はバグ修正が 2020/3/8、セキュリティ修正が 2021/9/8 までです。現 LTS の Laravel6 はバグ修正が 2021/9/3、セキュリティ修正が 2022/9/3 までです。慣例どおりに進めば次の次である 10 が LTS バージョンです。
How the Laravel Release Process Works – Laravel News
Laravel 8 でいくつか機能が変わります。ほとんどのユーザに影響するのはモデルクラスの置き場がデフォルトで設定されることでしょう。今までモデルに関する機能は app 直下がデフォルトでしたが 8 からは /app/Models になります。これに関しては既存のコードが壊れるわけでもなく、素で使っているユーザのコードが整理されやすくなるので純粋にプラスでしょう。
Some new features coming to Laravel 8 – Laravel News
Upgrade Guide – Laravel – The PHP Framework For Web Artisans
破壊的な変更として配列的に Collection 要素を参照した時の isset の挙動が変わります。次の様な null が存在している Collection クラス以下の要素を配列として参照した際、これまではキーの存在を見るのみで isset === true とされていたのが、値を参照して isset === false とされる様になります。本来の isset の挙動と同等になる形ですね。
$collection = collect([null]); // Laravel 7.x - true isset($collection[0]); // Laravel 8.x - false isset($collection[0]);
【Laravel】Collection中のitemが未定義でもnullでもないか検査したい時はisset()でなくget()!==nullを使うべき – 株式会社シーポイントラボ | 浜松のシステム・RTK-GNSS開発
↑の記事の小手先の技術が不要になります。
null チェックに関する挙動の変化は処理のフローを変えやすいです。Collection を配列的に呼び出していた場合、危険ですのでテストを行うべき挙動の変化です。
余談ですが、今年 4 月末に Collection クラスファイルの置き場は src/Illuminate/Support/Collection.php から src/Illuminate/Collections/Collection.php に変わりました(名前空間の変更は行われていないので Laravel ユーザから見た呼び出し先は変わりません)。配列のラッパーとして行っている処理が大量になったためリファクタされた形です。最も巨大なクラスが分割されましたが Illuminate/Support 以下はまだまだ巨大で雑多な役割が軒並み詰め込まれています。Laravel のコードが増える限りこれから先も分割されることになりそうです。
Laravel 8 に合わせて実質 Laravel 専用(Laravel 抜きでは使う理由が特にないくらい Laravel を前提としているパッケージ )も現れています。
Blade UI Kit は Laravel デフォルトのテンプレートエンジンである Blade の UI セットです。これはリリースを合わせているだけで Laravel 7.x から使えます。
Blade UI Kit
Launching Blade UI Kit v0.1 – Laravel News
具体的に何があるかというと、次の様にコンポーネント的にコードを呼べます。React, Vue.js 等の JavaScript コードを必要としないが HTML はきっちりしておきたい時に便利そうです。
{{-- Blade Kit UI で使える Blade コンポーネント --}} <x-form method="PUT" action="http://example.com"> Form fields... </x-form> {{-- HTML として展開されるコード --}} <form method="POST" action="http://example.com"> <input type="hidden" name="_token" value="..."> <input type="hidden" name="_method" value="PUT"> Form fields... </form>
Laravel Jetstreamはログイン、登録、メール認証、二要素認証、セッション管理などを備えた API の補助などが入ったスカフォールド的パッケージです。UI も含まれています。ログイン回りに特殊な要件がない様な場合、これを使えばあっという間に実装できそうです。
laravel/jetstream
Qiita に使用記事があったので合わせて紹介させていただきます。
laravel/jetstreamが気になりすぎたのでLaravel8をフライングゲットしてみた – Qiita