💦
Laravel6から9への移行:アップグレード影響調査
Laravel6から9へ移行することになったので、基礎的な調査として、アップグレード影響について調査した。
- アップグレード影響調査(本記事)
- 追加機能調査
注意
Laravel歴数ヶ月の人間がざっくり影響ありそう・大きそうに思った点、気になった点を一部ピックアップしているのみです。正確な情報はリンクしている公式リファレンスなどをご確認頂きますよう。
Laravelのサポート期限
バージョン | リリース日 | バグ修正 | セキュリティ修正 |
---|---|---|---|
9.x | 2022/02/08 | 2023/08/08 | 2024/02/08 |
6.x | 2019/09/03 | 2021/09/07 | 2022/09/06 |
Laravel9.xはLTSではなくなったとのこと。とはいえ、2022/5/20現在、6.xのセキュリティ修正期限が伸びているわけでもないのでアップグレードする他ないと思う。
Laravelの変更影響
7.x
アップグレードガイド 7.x Laravel
Upgrade Guide - Laravel 7.x - The PHP Framework For Web Artisans
- PHP7.2.5以上
- Symfony5へのアップグレード
- Handlerクラスインタフェースや設定ファイル、artisanの返り値の修正
- Eloquent:データシリアライズ
- toArray/toJsonメソッドでの日付シリアライズ内容の変更
- 外部へそのまま出力しているような場合に注意が必要そう
- メール
- 設定ファイルの変更
8.x
アップグレードガイド 8.x Laravel
Upgrade Guide - Laravel 8.x - The PHP Framework For Web Artisans
- PHP7.3.0以上
- Database:SeederとFactoryの名前空間
- 変更必須
- Eloquent:ModelFactoryの導入
- 旧来のFactoryを継続できるようだが基本的には書き換えたい(便利だし)
- ペジネーション:デフォルトの変更
- 既存のbootstrapを使ったペジネーションを継続するには要対応
- キュー:各種メソッド変更、テーブル更新
- 使っていれば要対応そう
9.x
アップグレードガイド 9.x Laravel
Upgrade Guide - Laravel 9.x - The PHP Framework For Web Artisans
- PHP8.0.2以上(8.1推奨)
- このあたりは PHPの変更点 にて整理
- FlySystem 3.xへの更新
- (FlySystemはStorageファサードの裏でファイル操作を提供しているものらしい)
- 挙動が様々に異なるので個々の利用箇所で要確認
- HTTPクライアント:デフォルトタイムアウトの変更
- 想定外の挙動になるかもしれないので要確認
- Symfony Mailerへの移行
- 全体的に書き直す感じっぽい
- パッケージ:langディレクトリ
- langディレクトリがルートディレクトリに移動
PHP:下位互換性のない変更
8.0
- ありそう:エラーになるはず
- 三項演算子をネストする場合、明示的に括弧が必要になりました
-
mktime()
の引数の必須化 - マジックメソッドは引数と戻り値の型を持ち、宣言された場合はチェックが行われるようになりました
- リソースからオブジェクトへの移行
- curl,openssl,socket,xmlなど
-
($pieces, $glue)
のような形で、implode()
関数を逆の引数の順番で呼ぶことはサポートされなくなりました。
- ありそう:単体テストで検知可能そう
- 文字列と数値の比較
-
parse_url()
関数は、query および fragment が存在しないことと、空であることを区別するようになりました
8.1
- ありそう:エラーになるはず
- リソースからオブジェクトへの移行
- FileInfo,FTP,IMAPなど
- リソースからオブジェクトへの移行
感想MEMO
想像していたよりは多くない印象を持った(記載されているものだけではなかろうと思いつつ)。
引数やメソッド名の変更等といった、そのまま動かすとそもそも例外になるようなケースはテストさえあればぼちぼち確認できそう。問題はメソッドや比較の挙動が変更されるケース。データシリアライズやFlySystem3.x更新など。各種テストで抜けてしまう場合もありうるので、個々の呼び出しを丁寧に確認した方が良さそう。
Discussion