梅子CMSはLaravel8で作成されていましたが、いつの間にやらどんどん本体のアップデートがかかって今や11。
PHPも8系が当たり前になっているし、ここはひとつアップグレードしようか…と思ってやりました。
開発環境
使っている環境はこちら。
- Raspberry Pi
- Nginx
- PHP7.4
ラズパイ携帯開発環境です。外に携帯していくことはまあないですが、今後あるかも…
PHPバージョン、phpMyAdminのバージョンアップ
そもそものサーバー環境がPHP7.4に合わせて作られています。
PHP8にバージョンアップするとphpmyadminも動作しなくなるので、こちらもあわせてあげていきます。
PHP7.4→PHP8.3にバージョンアップ
Laravel9はPHP8以上対応です。
開発環境はPHP7.4で止まっていたので、PHP8にあげるところからやっていきます。
リポジトリを使うときに必要になる、GPG キーファイルをダウンロードしてからPHP8をインストール。
sudo wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo apt install php8.3-fpm
その他、必要なライブラリも一緒に入れました。
sudo apt-get install -y php8.3-cli php8.3-common php8.3-mysql php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml php8.3-bcmath
sudo apt install php-intl
php-intlはphpunitを動かすのに必要でした。
入れたらNginxの再起動です。
sudo systemctl restart nginx
phpMyAdminのアップデート
開発でいつもお世話になるphpMyAdminもPHP8対応にします。
設定ファイルのバックアップを取ってから、インストーラーをダウンロード。
解凍してディレクトリを移動です。
sudo mv /usr/share/phpmyadmin/ /usr/share/phpmyadmin.bak
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip
unzip phpMyAdmin-latest-all-languages.zip
sudo mkdir /usr/share/phpmyadmin
sudo mv phpMyAdmin-*/* /usr/share/phpmyadmin/
このページが参考になりました。
Larvel本体のアップデート
ここからはLaravel本体のアップデートをしていきます。
一気にバージョンアップするのも怖いので、ひとつずつあげていきます。
Laravel8→9へアップデート
- laravel/framework:”^9.0″
- nunomaduro/collision:”^6.1″
に変更してcomposer updateをします。
うまくいかないときは理由がログに出るので、何のバージョンがあっていないのか探して実行します。
私の環境では
- “facade/ignition”: “^2.5″,→”spatie/laravel-ignition”: “^1.0”
も変更しました。
composer.jsonのrequireはこんな感じになりました。
"require": {
"php": "^7.3|^8.0",
"fideloper/proxy": "^4.4",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"intervention/image": "^2.5",
"laravel/framework": "^8.12",
"laravel/tinker": "^2.5",
"laravel/ui": "^3.2",
"mews/captcha": "^3.2",
"mews/purifier": "^3.3"
},
"require-dev": {
"facade/ignition": "^2.5",
"fakerphp/faker": "^1.9.1",
"laravel/sail": "^1.0.1",
"mockery/mockery": "^1.4.2",
"nunomaduro/collision": "^5.0",
"phpunit/phpunit": "^9.3.3"
}
できたらcomposer updateをします。
無事に完了したら
php artisan -V
でバージョンが上がったことを確認します。
梅子CMSシステムのphpunitを実行、問題があればその箇所を修正していきます。
オールグリーンになったら進みます。
Laravel9→10へアップデート
- laravel/framework:”^10.0″
- laravel/sanctum:”^3.2″
- doctrine/dbal:”^3.0″
- spatie/laravel-ignition:”^2.0″
- laravel/passport:”^11.0″
- laravel/ui:”^4.0″
この辺りを変更します。
現時点で使用していないものについては、追記する必要はありません。また、上記のほかに
- fruitcake/laravel-cors
- fideloper/proxy
を削除します。
fruitcake/laravel-corsは10から標準サポートになったので、package.jsonで指定しなくてよくなったからとのこと。
こちらの記事が参考になりました。
できたらcomposer updateをします。
無事に完了したら
php artisan -V
でバージョンが上がったことを確認します。
最終的にcomposer.jsonのrequireはこのようになりました。
"require": {
"php": "^7.3|^8.0",
"fideloper/proxy": "^4.4",
"fruitcake/laravel-cors": "^2.0",
"php": "^8.0",
"guzzlehttp/guzzle": "^7.0.1",
"intervention/image": "^2.5",
"laravel/framework": "^9.0",
"laravel/framework": "^10.0",
"laravel/tinker": "^2.5",
"laravel/ui": "^3.2",
"laravel/ui": "^4.2",
"mews/captcha": "^3.2",
"mews/purifier": "^3.3"
},
"require-dev": {
"spatie/laravel-ignition": "^1.0",
"spatie/laravel-ignition": "^2.0",
"fakerphp/faker": "^1.9.1",
"laravel/sail": "^1.0.1",
"mockery/mockery": "^1.4.2",
"nunomaduro/collision": "^6.1",
"phpunit/phpunit": "^9.3.3"
"nunomaduro/collision": "^7.0",
"phpunit/phpunit": "^10.0"
}
完了後にシステムを動かそうとするとエラーが出ますので、該当箇所を直していきます。
app/Http/Kernel.phpの修正
\Fruitcake\Cors\HandleCors::class,
↓
\Illuminate\Http\Middleware\HandleCors::class,
に修正します。fruitcake/laravel-corsの関係です。
app/http/Middleware/TrustPrioxiesの修正
use Fideloper\Proxy\TrustProxies as Middleware;
↓
use Illuminate\Http\Middleware\TrustProxies as Middleware;
にします。
ここまで修正してシステムが動くようになったら梅子CMSシステムのphpunitを実行、問題があればその箇所を修正していきます。
オールグリーンになったら次に進みます。
Laravel10→11へアップデート
- laravel/framework:”^11.0″
- nunomaduro/collision:”^8.1″
最低でもこの2つを書き換えて実行します。
後は必要に応じてバージョンを書き換えてcomposer updateをします。
最終的にcomposer.jsonのrewquireはこのようになりました。
"require": {
"php": "^8.0",
"guzzlehttp/guzzle": "^7.0.1",
"intervention/image": "^2.5",
"laravel/framework": "^11.0",
"laravel/sanctum": "^4.0",
"laravel/tinker": "^2.5",
"laravel/ui": "^4.2",
"mews/captcha": "^3.2",
"mews/purifier": "^3.3"
},
"require-dev": {
"spatie/laravel-ignition": "^2.0",
"fakerphp/faker": "^1.9.1",
"laravel/sail": "^1.0.1",
"mockery/mockery": "^1.4.2",
"nunomaduro/collision": "^8.1",
"phpunit/phpunit": "^10.0"
}
無事に完了したら
php artisan -V
でバージョンが上がったことを確認します。
確認出来たら、梅子CMSシステムのphpunitを実行、問題があればその箇所を修正していきます。
オールグリーンになったら完了です。
まとめ
梅子CMSのLaravel8から11にアップグレードしたときの話を書きました。
8→9にする前にPHPのバージョンをあげておくこと、Laravel9→10のアップデートで諸々のエラーが出て修正が多かったように思います。
10→11はそんなに大変ではありませんでした(梅子CMSの場合ですが)。
面倒でもphpunitの試験を書いておいてよかったなと思いました…テストはこういうときに力を発揮してくれますね。