Laravel 5.8 -> 6.0 LTS Upgrade Guide が更新されました！

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">For those that aren&#39;t aware: Laravel 6.0 will be an LTS release. 🤘 <a href="https://twitter.com/hashtag/DatEnterprise?src=hash&amp;ref_src=twsrc%5Etfw">#DatEnterprise</a></p>&mdash; Taylor Otwell 🏝 (@taylorotwell) <a href="https://twitter.com/taylorotwell/status/1163563626109837315?ref_src=twsrc%5Etfw">August 19, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

こちらのツイートの通り、 Laravel 6.0 は LTS サポートになる予定とのことです。

そして、 Laravel 5.8 から 6.0 へのアップグレードガイドも更新されました(リリースまでもう少し更新が入るかもしれません)。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I&#39;ve finished my first pass at the Laravel 5.8 -&gt; 6.0 upgrade guide. Pegging upgrade time estimate at about 1 hour. Probably faster for majority of applications. <a href="https://t.co/ZqYGWEXp5S">https://t.co/ZqYGWEXp5S</a> 📚</p>&mdash; Taylor Otwell 🏝 (@taylorotwell) <a href="https://twitter.com/taylorotwell/status/1163523332270186501?ref_src=twsrc%5Etfw">August 19, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以下、要約。

## 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');` のような形で[リソースコントローラ](https://laravel.com/docs/master/controllers#resource-controllers)に対してコンストラクタでポリシーを設定している場合、 `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 が出るのではないかと思います。

※上記のリリースノートはまだ途中のものなので、今後他にも破壊的変更が含まれる可能性があることに注意してください。
※上記は要約で省略している部分もあります。