こんにちは、webエンジニアのtakaです。
Laravelっていいフレームワークですよね。
よく使います。
今回はLaravelのバージョンを6から9にアップグレードしなければならないので、その方法を解説していきます。
それでは行ってみましょう!
目次
そもそもなぜアップグレードが必要か?
それぞれのバージョンにはサポート期限が設定されています。
特にLTS(Long Term Support)に指定されているバージョンは、通常より長い期間セキュリティアップデートが保証されています。
例え新しいバージョンであったとしても、古いLTSのバージョンの方が安定しているということです。
以下がLaravelのバージョン一覧です。
Version | Release | Bug fix | Security fix | PHP |
---|---|---|---|---|
10.0 | 2023-02(未) | 2024-08 | 2025-02 | |
9.0 (LTS) | 2022-02 | 2023-08 | 2025-02 | >= 8.0.2 |
8.0 | 2020-09-08 | 2022-07 | 2023-01 | >= 7.3 |
7.0 | 2020-03-03 | 2020-10-06 | 2021-03-03 | >= 7.2.5 |
6.0 (LTS) | 2019-09-03 | 2022-09-06 | 2022-09-06 | >= 7.2 |
私のプロジェクトはバージョン6(LTS)を利用していたのですが、サポート期間が2022年9月に終了してしまうので、より新しいLTSのバージョン9に変更する必要があります。
tips!
サポート期間を過ぎたから、自分のプロジェクトが動かなくなるということはないですが、セキュリティー的にサポート期間終了前に次のLTSにアップグレードしよう!
アップグレード方法
バージョンアップは6から9に一気にアップグレードするのではなく、6から7、7から8、8から9と段階でアップグレードします。
既にバージョン7や8の方は適宜読み飛ばしてください。
自分のプロジェクトのバージョンは以下で確認できます。
$ php artisan --version
公式のアップグレードガイドを参考にしていきます。
6.xから7.0へのアップグレード
https://readouble.com/laravel/7.x/ja/upgrade.html
7.xから8.0へのアップグレード
https://readouble.com/laravel/8.x/ja/upgrade.html
8.xから9.0へのアップグレード
https://readouble.com/laravel/9.x/ja/upgrade.html
6.xから7.0にアップグレード(約15分)
まずはcomposer.jsonを変更する必要があります。
composer.json内の以下の値を変更していきます。
laravel/frameworkを ^7.0
nunomaduro/collisionを ^4.1
phpunit/phpunitを ^8.5
laravel/tinkerを ^2.0
facade/ignitionを ^2.0
変更を行ったら、
$ composer update
を実行しましょう。
このようなエラーが出ていたら、
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 528384 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/Pool.php on line 221
以下で一時的にメモリー上限をあげて再度実行!
$ COMPOSER_MEMORY_LIMIT=-1 composer update
場合によってアップグレードしないといけないパッケージがある場合があります。
その場合は、公式を見て適宜修正してください。
$ php artisan --version
で7がでればOKです。
tips!
composer.lockが存在すると、そちらを優先してしまうので削除しておきましょう。
composer updateが成功すると、新しく作成されます。
7.xから8.0にアップグレード(約15分)
7から8も同じようにcomposer.jsonをアップデートしていきます。
guzzlehttp/guzzleを ^7.0.1
facade/ignitionを ^2.3.6
laravel/frameworkを ^8.0
laravel/uiを ^3.0
nunomaduro/collisionを ^5.0
phpunit/phpunitを ^9.0
次に my-app/databese/seeds を my-app/database/seeder にフォルダ名を変更します。
そして各seederファイルに名前空間の追記を行います。
編集前
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
編集後
namespace Database\Seeders; // 追加
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
それではアップデートしていきましょう。
$ composer update
なんかエラーでました。
[RuntimeException]
Could not scan for classes inside "database/seeds" which does not appear to be a file nor a folder
psr-4という、seedをcsvファイルから作成できるプラグインを入れていたため、composer.json内にさっき変更したseedsフォルダのパスの記載が残っていました。
composer.jsonを変更します。
編集前
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeds/"
},
"classmap": [
"database/seeds",
"database/factories"
]
編集後
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/" //編集
},
"classmap": [
"database/seeders", //編集
"database/factories"
]
再度composer updateを実行し
$ php artisan --version
で8がでればOKです。
8.xから9.0にアップグレード(約30分)
8から9へのアップグレードは気合が入ります。がんばりましょう!
まずPHP8.0.2以上なので、PHPのバージョンを上げましょう!
ローカル環境のPHPをまず上げます。
※dockerの方は適宜対応してください。
私はMAMPを利用しているのでMAMPのPHPのバージョンを上げます。
画像の「PHP version」からPHPのバージョンを変更できます。
変更したら、serverをstop->startで再起動しよう!
$ php -v
これで8.0.2とかになっているはずです。
tips!
もしMAMPのPHPの選択肢に8.0.2以上がない場合は、MAMPの公式から最新版をダウンロードします。
今まで利用していた[/Applications/MAMP]は、上書きされたら困るので一旦別名に変更します。
[/Applications/MAMP] -> [/Applications/MAMP_ORIGIN]
先ほどダウンロードしたMAMPのインストーラーを実行すると、最新版のMAMPがApplications配下に作成されます。
/Applications/MAMP/bin/php/ 配下にphp8.0.8があると思うのでそれを /Applications/MAMP_ORIGIN/bin/php/ 内にコピーします。
最新版の/Applications/MAMPを削除し、今まで利用したMAMP_ORIGINの名前をMAMPに戻し、MAMPアプリを再起動すると選択肢にPHP8.0.8が出ているはずです。
tips!
PHPのバージョンを変更しStart Servers をクリックすると「Apache couldn’t be started. Please check your MAMP installation and configuration.」というエラーが表示されます。
このようになったら、MAMPのPreference -> Portsを開き、Apache Portを80、Nginx Portを80、MySQL Portを3306に設定し再起動すると、うまくサーバーを起動できます。
MAMPのPHPのバージョンを変更しても反映されない場合は、パスが通っていない可能性があります。
その場合はbash_profileを編集しましょう。
$ cd ~/
$ vi .bash_profile
i を押しインサートモードにし、
ファイル末に以下を追記します。
export PATH="/Applications/MAMP/bin/php/php8.0.8/bin:${PATH}"
escボタンでインサートモードを終わり、:qwで上書き保存します。
$ source ~/.bash_profile
これで再起動するとPHPのバージョンが変わっています。
次はcomposer.jsonの変更です。
・laravel/frameworkを ^9.0
・nunomaduro/collisionを ^6.1
・facade/ignition 箇所は ”spatie/laravel-ignition”: “^1.0” に変更しましょう。
修正前 “facade/ignition”: “^1.4”,
編集後 “spatie/laravel-ignition”: “^1.0”,
例の如くcomposer.lockは削除しておきましょう。
それではcomposer updateを実行します。
“php”は、開発元を検証できないため開けません。というエラーが出ました。
これは先ほど.bash_profileに追加したphp8.0.8で認証を行なってないからです。
finderから/Applications/MAMP/bin/php/php8.0.8に行きます。
phpという名前のunixファイルをダブルクリックし、聞かれたことに「はい」を押すとOKです。
再度composer updateを実行します。
また、エラーが出ました。
Undefined constant Illuminate\Http\Request::HEADER_X_FORWARDED_ALL
色々調べるとこの記事が参考になりました。
https://stackoverflow.com/questions/71103241/error-while-updating-laravel-8-to-9-script-php-artisan-packagediscover-ans
1 . app/Http/Middleware/TrustProxies.php を編集します。
編集前
use Fideloper\Proxy\TrustProxies as Middleware;
編集後
use Illuminate\Http\Middleware\TrustProxies as Middleware;
2 . 同ファイルの$headersを編集します。
編集前
protected $headers = Request::HEADER_X_FORWARDED_ALL;
編集後
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
3 . 最後にfideloper/proxyを削除します。
$ composer remove fideloper/proxy
これでOKです。
再度composer updateを実行すると、9.7.0にアップデートできていました!
めでたしめでたし!
tips!
追加
別プロジェクトでlaravel 9にアップグレードしたところ、そのプロジェクトはAWSのS3を利用して追加で対応が必要でした。
修正前
"league/flysystem-aws-s3-v3": "~1.0",
"league/flysystem-cached-adapter": "~1.0",
修正後
"league/flysystem-aws-s3-v3": "^3.0",
"lustmored/flysystem-v2-simple-cache-adapter": "^0.3.0"
詰まったので共有です。ここを参考にしました。
league/flysystem-cached-adapterは、パフォーマンスを上げるため、絶対に必要なキャッシュアダプタらしいです。
localできたので、本番サーバーもやっちゃいましょう!
今回はAmazon linuxでの説明になります。
ほかのサーバーの場合であっても、基本的にはPHPのバージョンを8.0.2以上あげればOKです。
Amzon linuxにssh接続します。
まずインストールすることのできるソフトウェアおよびバージョンを確認します。
$ sudo amazon-linux-extras | grep php
後はこちらの記事通りでいけました。
https://w.atwiki.jp/sanosoft/pages/204.html
まとめ
この記事でlaravelをアップデートできればと思います。
途中回りくどいことをしているかもしれないので、適宜修正しながらやってください。
それでは!
著者のプロフィールはこちら