またまたLaravelの更新の時期がやってきました。と言っても、またしても遅れての私のキャッチアップです。Laravel 6.xのバージョンは、Laravel 5.5と同様にLTSの長期サポートまでなので、バグの修正は、9/3/2021まで、セキュリティの修正は、9/3/2022までとあるので、できるならアップグレードしたいです。また、6.xのバージョンは、新サービスのサーバーレス対応のVaporでは必須ゆえに、Laravelを実行するサーバーのスケールアップに興味があるなら、なおさら頑張ってアップグレードする必要あります。

何が変わった?

さて、バージョン6.xともなると、大きな変更は少なくなってきています。私のプロジェクトでのアップグレードで気づいたことの報告をします。

まず忘れる前に、Laravel 6.xの更新には、最低php 7.2のバージョンが必要となります。と言っても、最新のphpは、バージョン7.4です。phpもLaravelもバージョンアップのペースが速い。もう少し遅くても、とも思います。

ヘルパーの変更

Laravel 5.8に更新で登場したのですが、配列や文字列のヘルパー関数が、クラスのstaticのメソッドに代わる、という話。例えば、array_only()は、Arr::only()に代わる。その時点では、両方使用できましたが、Laravel 6.xでは、もうグローバル関数の方はデフォルトでは使用できません。

それらを使用するには、以下を実行してパッケージを追加する必要あります。

$ composer require laravel/helpers

使用していたパッケージへの影響

phpunitのバージョンは、Laravel 5.8のバージョン7からバージョン8になりました。そして悲しいことに私が愛好していたデータベースのテストのphpunit/dbunitの開発・管理が止まりました。

ここでいつか紹介しようと思っていたのですが、紹介する前に作者の意向で開発ストップです。dbunitは、xmlファイルで用意したデータをユニットテストのためにデータベースにインポートしてくれる便利な機能があります。毎回のテストの前には、データをtruncateしてくれるのでいつでも空の状態から始めることができ、でテストの再現性を実現してくれます。

しかし、そこはオープンソースの強みというか、githubなどのサービスの便利さというか、他の開発者(以下のリンク)が早速にもレポをフォークしてphpunitバージョン8に対応してくれています。残念ながら、このパッケージのメインテナーとはならないようですが。

https://github.com/kornrunner/dbunit

これで暫くは凌げそうですが、この際に、Laravelのmigrationやfactoryを使用した、RefershDatabaseのトレイトを使ったデータベースのテストに書き換えていこうとも思います。

そして、そのステップ1として、前回の既存のDBからmigrationファイルを自動作成のパッケージの紹介でした。

しかし、このパッケージ、残念ながらLaravel6.xでは互換性で使えない、と思ったら対応しているこれまたレポをフォークしたパッケージがありました。

https://github.com/oscarafdev/migrations-generator

捨てる神があれば、拾う神ありです。助けられます。

ユーザー認証

Laravel 5.xでは、php artisan make:authの実行でユーザー認証の機能が追加できました。

Laravel 6.xでは、以下の実行が必要となります。

$ composer require laravel/ui
$ php artisan ui bootstrap --auth

uiのタイプとしては、bootstrap, vue, reactの選択があります。これらの実行で、ユーザー認証に必要なrouteの追加や、コントローラーやブレードのファイルが作成されます。

By khino