September 4, 2019

Laravel6.0へアップグレード

6.0

バージョニング規約が普通のsemverに変わっただけなのでバージョンアップの手間は5.x時代の0.1と同じ。

5.8までのバージョンは「パラダイム.メジャー.マイナー」
4.2→5.0は大幅に変更されたけどそういう時のためにパラダイムを残していた。
5.xの完成度高くてもうそんな変更はないので一般的なsemverに変えたのでは(予想)

LTS

前回の5.5期間に判明したことだけど長期サポート対象なのはLaravelフレームワーク本体のみ。Lumenや公式パッケージは含まない。
Socialiteでひと悶着あった。

LTSと言っても安心できないのでいつでもバージョンアップできるようにはしておいたほうが良さそう。

いつもの見る所

今回は6.0になったことが一番大きいのでバージョンアップ作業は簡単。
サードパーティパッケージの対応待ち時間のほうが長い。
これ書いてる時点でも待っててほとんどバージョンアップできてないのでなにかあれば後から追記。

Authorized Resources & viewAny

5.8.xに一度マージされたけどbreaking changesなのですぐ戻された。
「認可」使っててリソースコントローラーのindex()が表示できなくなってたらここをチェック。

ヘルパー

5.8で非推奨になって対応してるはずだけどサードパーティパッケージには対応漏れがあるかもしれない。
str_だけ変更してstarts_withとかが残ってる例がある。
直してもらうかlaravel/helpersインストールして対応。

Input

Inputなんてもう誰も使ってないはずなので非推奨を経ずいきなり削除。

実際には今でも使ってる人がいてびっくり。
もう使ってないと教えても一切話を聞かない。
Laravelはバージョンアップでどんどん変わるから古い知識のままでは使えないってことが理解できてない。
6.0にするには大量のInputを修正することになる。

Input::get()Request::input()呼んでるだけなので単純に互換のためだけに残されてた。
https://github.com/laravel/framework/blob/7ae3aaaa00f8ab9298104456a59a4154edd5c395/src/Illuminate/Support/Facades/Input.php

ルートURLジェネレータと追加のパラメータ

大きな影響あるようには書いてないけど意外とある。気付きにくいので厄介。

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

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

Queue Retry Limit

失敗したジョブ用のテーブルが必須になったらしい。
キュー使ってるならconfig/queue.phpの変更箇所など確認。

Redis

Redis使うにはPhpRedisをインストール。
https://github.com/phpredis/phpredis

pecl install redis

php.iniかconf.d/redis.ini

extension=redis.so

predisは将来非対応になるかも。composerでインストールするだけのpredisのほうが簡単なのでなるべく残して欲しい。

https://laravel.com/docs/6.0/redis

UI

フロントのファイルが別パッケージに分離。
https://github.com/laravel/ui
make:authも分離されたので今までの新規プロジェクト作ったらまずmake:authが変わる。

composer require laravel/ui

php artisan ui vue --auth

tests/Bootstrap.php

ファイル追加とphpunit.xml変更。
これ6.0.0リリース後に変更されてる。こういうのが一番困る。
https://github.com/laravel/laravel/pull/5091

その後さらに削除されて元に戻された。
https://github.com/laravel/laravel/pull/5107

パッケージ作者の対応

Laravel用パッケージではcomposer.jsonに"illuminate/support": "^5.5",とか書いてることが多い。
今までは^5.5で5.8まで対応不要でインストールできた。
6.0はインストールできないので^5.5||^6.0に変更が必要。

終わり、ではない。
リリースサイクルは変わらないので半年後には7.0が出る。
また^5.5||^6.0||^7.0に変更。
これを半年毎に繰り返せ…?

付き合ってられないならバージョン指定消して*にすれば何もしなくて良くなる。

その他

ローカルで動かさずバージョンアップ作業だけしてたようなプロジェクトは6.0後に一度php artisan view:clearしたほうがいいかも。本番でも。
viewのキャッシュに削除されたarray_ヘルパーが残っててエラーになる。キャッシュ削除すれば直る。

© kawax