💦

Laravel6から9への移行:アップグレード影響調査

2022/05/20に公開

Laravel6から9へ移行することになったので、基礎的な調査として、アップグレード影響について調査した。

注意

Laravel歴数ヶ月の人間がざっくり影響ありそう・大きそうに思った点、気になった点を一部ピックアップしているのみです。正確な情報はリンクしている公式リファレンスなどをご確認頂きますよう。

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推奨)
  • FlySystem 3.xへの更新
    • (FlySystemはStorageファサードの裏でファイル操作を提供しているものらしい)
    • 挙動が様々に異なるので個々の利用箇所で要確認
  • HTTPクライアント:デフォルトタイムアウトの変更
    • 想定外の挙動になるかもしれないので要確認
  • Symfony Mailerへの移行
    • 全体的に書き直す感じっぽい
  • パッケージ:langディレクトリ
    • langディレクトリがルートディレクトリに移動

PHP:下位互換性のない変更

8.0

PHP: 下位互換性のない変更点 - Manual

  • ありそう:エラーになるはず
    • 三項演算子をネストする場合、明示的に括弧が必要になりました
    • mktime()の引数の必須化
    • マジックメソッドは引数と戻り値の型を持ち、宣言された場合はチェックが行われるようになりました
    • リソースからオブジェクトへの移行
      • curl,openssl,socket,xmlなど
    • ($pieces, $glue) のような形で、implode() 関数を逆の引数の順番で呼ぶことはサポートされなくなりました。
  • ありそう:単体テストで検知可能そう
    • 文字列と数値の比較
    • parse_url() 関数は、query および fragment が存在しないことと、空であることを区別するようになりました

8.1

PHP: 下位互換性のない変更点 - Manual

  • ありそう:エラーになるはず
    • リソースからオブジェクトへの移行
      • FileInfo,FTP,IMAPなど

感想MEMO

想像していたよりは多くない印象を持った(記載されているものだけではなかろうと思いつつ)。

引数やメソッド名の変更等といった、そのまま動かすとそもそも例外になるようなケースはテストさえあればぼちぼち確認できそう。問題はメソッドや比較の挙動が変更されるケース。データシリアライズやFlySystem3.x更新など。各種テストで抜けてしまう場合もありうるので、個々の呼び出しを丁寧に確認した方が良さそう。

GitHubで編集を提案

Discussion