Open5
php + laravel バージョンアップ
目的
- 引き継いだPHP環境がEoLだったためそれぞれのバージョンアップする手順を記載する
- バージョンアップする際に詰まりそうな箇所を記録する
現状の環境
- PHP 7.3
- Laravel 6.20
- Composer 1.9.0
利用する端末
- M2 Macbook air
バージョンアップのためのステップ
- Composer 1.9.0から Composer latestへアップデート
- PHP 7.3からPHP7.4へアップデート
- Laravel 6.xからLaravel 8.xへアップデート
- Laravel 8.xのPHPバージョンが7.3 ~ 8.0までのためここまで
- PHP 7.4からPHP 8.0へアップデート
- Laravel 8.xからLaravel 9.xへアップデート
- Laravel 9.xのPHPバージョンが8.0 ~ 8.2までのためここまで
- PHP 8.0からPHP 8.2へアップデート
- Laravel 9.xからLaravel 11.xへアップデート
- Laravel 10.x以降はPHPバージョンが8.2以降を利用
サポートバージョン
PHP
Laravel
- 9.xリリース時点でのサポート
https://laravel.com/docs/9.x/releases#support-policy - 10.x リリース時点でのサポート
https://laravel.com/docs/10.x/releases#support-policy
ローカル環境の構築
M1 Mac以降だとasdfやanyenvを使ったphpローカル環境がうまく立ち上がらないため、homebrewでローカル環境を構築する。
shivammathur/php を利用し複数環境をインストールする。
brew install php
brew tap shivammathur/php
brew install shivammathur/php/php@7.3
brew install shivammathur/php/php@7.4
brew install shivammathur/php/php@8.0
brew install shivammathur/php/php@8.2
phpバージョンの切り替え
今回はPHPを採用したプロジェクトを1つしか動かさないため brew link コマンドによってPHPのバージョンを段階的に切り替えていく
brew link --overwrite --force shivammathur/php/php@7.3
Composerアップデート
Composer 1.9.0から Composer latestへアップデートする
php 7.3 環境下にインストール
% brew link --overwrite --force shivammathur/php/php@7.3
% php -v
PHP 7.3.33 (cli) (built: Apr 26 2023 19:33:37) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.33, Copyright (c) 1999-2018, by Zend Technologies
% curl -sS https://getcomposer.org/installer | php -- --version=1.9.0
% mv composer.phar /usr/local/bin/composer
アップデート
% composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.9.0 2019-08-02 20:55:32
...
% composer self-update
Updating to version 2.5.5 (stable channel).
Downloading (100%)
Use composer self-update --rollback to return to version 1.9.0
% composer --version
Composer version 2.5.5 2023-03-21 11:50:05
composer install してlockファイルの差分を確認
composer install
php 7.3 から 7.4のアップデート
公式のマイグレーションガイド
php 7.4への切り替え
% brew link --overwrite --force shivammathur/php/php@7.4
% php -v
PHP 7.4.33 (cli) (built: Apr 26 2023 19:13:59) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies
composerのplatformバージョン変更
% composer require php:"^7.4"
% composer install
lockファイルの差分を確認
確認項目
- 新しい予約後をコード内で利用していないか
- 互換性がない関数を利用していないか
- 非推奨になったコードを利用していないか
アップデート後の機能を取り入れる
- 変数に型付きプロパティ(Typed Property)を利用できる
- 配列内での値のアンパック
Laravel 6.xからLaravel 8.xへアップデート
実行しているプロジェクトのバージョンは 6.20.x であったため、 バージョン7, バージョン8の最新へと段階的にアップグレードしていく
Laravel Frameworkの公式ドキュメントのアップグレードガイドを参照する
手順
- 6から7へアップグレードするための必要な依存パッケージを更新する
- ビルドが失敗した箇所の修正を行う
- ビルドが通過したら動作チェックを行う
- 7から8へアップグレードするための必要な依存パッケージを更新する
- ビルドが失敗した箇所の修正を行う
- ビルドが通過したら動作チェックを行う
- 完了
composer パッケージ更新
すべての依存パッケージを更新する
composer require --dev phpunit/phpunit:"^9.0" nunomaduro/collision:"^5.0" -W
composer require laravel/framework:"^8.0" laravel/ui:"^3.0" -W
パッケージ更新時の失敗の対応
パッケージ更新に失敗することがあるため、PHPやLaravelのアップデートを行い不要なパッケージを削除やバージョン指定なしで再度追加することで解決可能。
更新した際は、それぞれのパッケージに破壊的変更が含まれていないか確認する。
composer require bensampo/laravel-enum
composer require kreait/laravel-firebase
利用パッケージの警告
メンテナンスが行われていないプラグインの警告も出してくれるため確認
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Package fruitcake/laravel-cors is abandoned, you should avoid using it. No replacement was suggested.
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
laravel-corsはバージョン8まで対応。バージョン9以降はlaravel本体に組み込まれたようなので、次のアップグレード時にパッケージを削除する。
備考
Laravel Support Policy に記載がある通り、 PHP 7.4 でサポートしているのは Laravel 8 までのため、Laravel 9以降は後続のPHPアップデートが必要となる