こんにちは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のインスタンス引数が変わっていたのでエラーになりました。 変更はこちら
ドキュメント通りにLaravelを使っている際はおそらく心配ないかと思いますが、弊社ではこのWorkerの生成を独自に行なっている処理がありました。 引数が一つ増えていたので見事に死・・・静的解析が求められますね・・・
さいごに
無事、Laravel6系に追従できました。
最後に宣伝です。 弊社では来年の2020年3月21日(土)に開催されるLaravel JP Conference 2020にゴールドスポンサーとして協賛しています。
私もコアスタッフとして参加しているのでLaravelを使っている、興味があるという方はぜひご参加ください。