Laravel5.8から6.4にバージョンアップしました

f:id:kubotak:20191114171317j:plain

こんにちはkubotakです。 弊社プロダクトはPHPフレームワークであるLaravelを採用しています。 私が入社した時点(2019/11)は利用しているバージョンがLaravel5.8でした。 現在ではLaravelのバージョンは6を迎え、長期サポートの対象となっています。

LaravelはOSSオープンソースソフトウェア)であり、有志によりサポートされています。 メンテナンスやセキュリティのサポートなどは各バージョンで特定の期間で実施されていて次のようなスコープになっています。

Version Release Bug Fixes Until Security Fixes Until
5.5 (LTS) August 30th, 2017 August 30th, 2019 August 30th, 2020
5.6 February 7th, 2018 August 7th, 2018 February 7th, 2019
5.7 September 4th, 2018 March 4th, 2019 September 4th, 2019
5.8 February 26th, 2019 August 26th, 2019 February 26th, 2020
6 (LTS) September 3rd, 2019 September 3rd, 2021 September 3rd, 2022

5.8はすでにバグフィックスサポートの期限を迎え、セキュリティサポートも来年の2020/02/26に期限を迎えます。 そこで、弊社では6系へのバージョンアップを実施しました。

ちなみにLaravel5系では5.xというバージョンがメジャーバージョンでしたが6系からセマンティックバージョニングになり、{メジャー}.{マイナー}.{パッチ}という形で管理されています。 現時点(2019/11)では6.4が最新バージョンとなります。

5.8から6.xへのバージョンアップは公式でアップグレードガイドが出ているのでそれを参考にすることができます。

Upgrade Guide - Laravel - The PHP Framework For Web Artisans

弊社で引っかかった項目は以下でした。

URLの生成に関しての変更

URLの生成が以下のように変更されていました。

Route::get('/profile/{location}', function ($location = null) {
    //
})->name('profile');

// Laravel 5.8: http://example.com/profile/active
echo route('profile', ['status' => 'active']);

// Laravel 6.0: http://example.com/profile?status=active
echo route('profile', ['status' => 'active']);

第2引数に渡す配列で、ルーターで指定した名前と一致しない場合はクエリパラメータとして扱うという変更です。 むしろ今まで名前が一致していないのにパスパラメータに変更していたのが驚きですね。 弊社ではこのパラメータが、例えばルーターuserIdとしているのにURL生成時の引数では['id' => xx]のように扱っていて想定していたURLと違うURLを生成していました。

JobWorkerのインスタンス引数が変更されていた

これはアップグレードガイドに載っていないものですが、Laravel Jobを実行する際のWorkerのインスタンス引数が変わっていたのでエラーになりました。 変更はこちら

github.com

ドキュメント通りにLaravelを使っている際はおそらく心配ないかと思いますが、弊社ではこのWorkerの生成を独自に行なっている処理がありました。 引数が一つ増えていたので見事に死・・・静的解析が求められますね・・・

さいごに

無事、Laravel6系に追従できました。

最後に宣伝です。 弊社では来年の2020年3月21日(土)に開催されるLaravel JP Conference 2020にゴールドスポンサーとして協賛しています。

conference2020.laravel.jp

私もコアスタッフとして参加しているのでLaravelを使っている、興味があるという方はぜひご参加ください。