For those that aren't aware: Laravel 6.0 will be an LTS release. 🤘 #DatEnterprise
— Taylor Otwell 🏝 (@taylorotwell) August 19, 2019
こちらのツイートの通り、 Laravel 6.0 は LTS サポートになる予定とのことです。
そして、 Laravel 5.8 から 6.0 へのアップグレードガイドも更新されました(リリースまでもう少し更新が入るかもしれません)。
I've finished my first pass at the Laravel 5.8 -> 6.0 upgrade guide. Pegging upgrade time estimate at about 1 hour. Probably faster for majority of applications. https://t.co/ZqYGWEXp5S 📚
— Taylor Otwell 🏝 (@taylorotwell) August 19, 2019
以下、要約。
Upgrade dependencies
composer.json の laravel/framework
の依存を ^6.0
にして composer update
をかけます。
6.0 から SemVer を採用するので、 7.0 になるまで破壊的変更は含まれない予定となっています。そのため、バージョン指定は 6.0.0~6.x.x
となる ^6.0
を指定する形になります。
もちろん、このアップグレードがほかの dependencies で対応しているかしっかりと確認する必要があります。これは以前からのアップグレードと同様です。
特に今回は 5.8 から 6.0 へのアップグレードのため、多くのライブラリは laravel/framework: ^5.6
といった形で依存していて、しっかりとした更新対応が入るまでアップグレード出来ないのではないでしょうか。
認可処理
Authorized Resources
$this->authorizeResource(Post::class, 'post');
のような形でリソースコントローラに対してコンストラクタでポリシーを設定している場合、 index
メソッドは元々認可をスルーしていましたが、 viewAny
メソッドをポリシークラス側に定義しない限り認可で拒否されるように変更になりました。
RegisterController
RegisterController の register
registered
メソッドを上書きしている場合は、親メソッドを呼ぶ必要が出てきました。イベントの発行場所なども変わっているので注意が必要です。
Authorization Responses
Illuminate\Auth\Access\Response
クラスが変更になりました。
Database
プライマリキー型定義
パフォーマンス最適化のため、 protected $keyType = 'string';
のように、 string
系の型をプライマリキーとして保持している場合は、このプロパティを指定する必要が出ました。
Email 確認
email/resend
ルーティングが GET
から POST
に変わりました。そのため、 view 側で CSRF を追加するなどの修正が必要です。
ヘルパー
str_plug
や array_get
などのヘルパー関数が今まで src/Illuminate/Support/helpers.php
に実装されていましたが、 Illuminate\Support\Str
または Illuminate\Support\Arr
の静的メソッドを使うことが推奨されるようになりました。
また、 composer require laravel/helpers
として別パッケージ化されたそれらのメソッドを要求することも可能です。
Localization
Lang::trans
は Lang::get
に、 Lang::transChoice
は Lang::choice
にメソッド名が変更になりました。
Lang::get
と Lang::getFromJson
は同じ扱いになったので、 Lang::getFromJson
ではなく Lang::get
を呼ぶことが推奨されるようになりました。
__('foo')
や @lang('foo')
を使っている場合は特に変更は不要ですね。
キュー
php artisan queue:work
を今まで呼んだ場合、失敗したジョブを無限に繰り返すようになっていました。今後は 1 度のみ再実行されます。無限に再実行したい場合は --tries=0
を指定します。
Input Facade
Input
Facade は削除されました。 Input::get
を使っていた場合は Request::input
を使ってください。 Input
はそのまま Request
Facade に置き換え可能です。
他にも規模の小さい破壊的変更がありますが、ごらんのとおり今までと同じレベルの変更度合いですね。安心しました。
今後は 6.0.0 も 6.9.10 も同じコードで利用出来るようになるはずです(セキュリティリリースなど致命的なものは除く)。
また、大体半年置きにメジャーアップデートが行われていましたが、それは継続するようなので、恐らく来年の2月くらいに Laravel 7.0 が出るのではないかと思います。
※上記のリリースノートはまだ途中のものなので、今後他にも破壊的変更が含まれる可能性があることに注意してください。
※上記は要約で省略している部分もあります。