【Laravel】PHP7.4からPHP8.2、Laravel6からLaravel10にアップデートする方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
目次
Laravel のプロジェクトを、PHP7.4 から PHP8.2、Laravel6 から Laravel10 にアップデートする方法についてまとめました。
Laravel6 から Laravel7 へ
一気に 6 から 10 にするのではなく、順番にやっていきます。
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
バグの発生
Using version ^1.0 for laravel/ui
./composer.json has been updated
Running composer update laravel/ui
~~~
Problem 1
- laravel/ui[v1.1.0, ..., 1.x-dev] require illuminate/console ^7.0 -> found illuminate/console[v7.0.0, ..., 8.x-dev] but it conflicts with another require.
こんなエラーが出てきました。
翻訳してみると、laravel/ui のバージョンが 1 ではダメみたいでした。
なので調べた結果、Laravel7 では laravel/ui 2.0^にする必要がありました。
composer.json に追記
さきほどと同じように以下の項目に変更
"laravel/ui": "2.*",
バグの発生
Your requirements could not be resolved to an installable set of packages.
コマンド
めっちゃ祈りながら
composer update
さらにバグが発生
PHP Fatal error: Declaration of App\Exceptions\Handler::report(Exception $exception) must be compatible with Illuminate\Foundation\Exceptions\Handler::report(Throwable $e) in /var/www/html/app/Exceptions/Handler.php on line 37
Exception というクラスが無くなって、
Throwable というクラスに変わったようです。
app/Exceptions/Handler.php を修正する
use Throwable; //追記
//関数2つを変更
public function report(Throwable $exception)
{
parent::report($exception);
}
public function render($request,Throwable $exception)
{
return parent::render($request,$exception);
}
コマンド
祈りながら
composer dump-autoload
うまくいきました。
これで Laravel6 から Laravel7 へのアップデートが完成です。
Laravel7 から Laravel8 へ
続いて Laravel7 から Laravel8 へアップグレードしていきます。
何も起こらないことを信じて進んでいきます。
composer.json を変更
以下の項目のバージョンを変更します。
自分の環境では guzzle の項目はありませんでした。
"laravel/framework": "^8.0",
"guzzlehttp/guzzle": "^7.0.1",
"facade/ignition": "^2.3.6",
"laravel/ui": "3.0",
"nunomaduro/collision": "^5.0",
"phpunit/phpunit": "^9.0"
コマンド
細心の祈りを捧げながらコマンドを実行します。
composer update
何事もなく成功しました。
不安になってコマンドで確認します。
php artisan -v
Laravel Framework 8.83.27
成功で間違いありません(画面も表示されます)
Laravel8 から Laravel9 へアップグレード
PHP7.4 から PHP8.0 へアップグレード
Dockerfile を変更してビルドしなおします。
FROM php:8.0-fpm
ビルドして更新します
docker compose up -d --build
php -v
PHP 8.0.30
何事もなく PHP がアップデートされました。
composer.json を書き換える
"php": "^8.0",
"laravel/framework": "^9.0",
"nunomaduro/collision": "^6.1",
"facade/ignition": "^2.3.6", → "spatie/laravel-ignition": "^1.0",
これまでと同様に、項目のバージョンを変更してコマンドを打ちます。
コマンドを打つ
無事を真剣に祈りながらコマンドを打ちます。
composer update
エラー発生
Your requirements could not be resolved to an installable set of packages.
Problem 1
- spatie/laravel-analytics[3.10.0, ..., 3.10.1] require php ^7.2 -> your php version (8.0.30) does not satisfy that requirement.
というエラーが発生。
spatie/laravel-analytics
というパッケージを使っており、その依存関係が原因みたいです。
spatie/laravel-analytics をバージョンアップ
spatie/laravel-analytics ドキュメント
同様に composer.json のバージョンを書き換えて
"spatie/laravel-analytics": "^4.0"にしてみましたが、
以下のようなエラーが発生。
Problem 1
- spatie/laravel-analytics 4.1.1 requires laravel/framework ^9.41|^10.0
4.1.1 じゃないとダメなようなので、
"spatie/laravel-analytics": "^4.1.1",
composer update
これは解決。
"pbmedia/laravel-ffmpeg"をバージョンアップ
さらに、"pbmedia/laravel-ffmpeg"の依存関係でエラーが出たので、
"pbmedia/laravel-ffmpeg": "^8.0",
composer update
これで OK!
Laravel9 から Laravel10 にアップデート
composer.json の以下のパッケージのバージョンを変更
"laravel/framework": "^10.0",
"laravel/ui": "^4.0",
"phpunit/phpunit": "^10.0",
"spatie/laravel-ignition": "^2.0",
"fakerphp/faker": "^1.9.1",
"nunomaduro/collision": "^7.1",
以下の部分を削除
"minimum-stability": "dev",
コマンド実行
composer update
以上で完了しました。
その後、発生したエラー
Filesystem でエラーが発生
AWS の S3 において exists でファイルの有無を確認する際に、空文字があるとエラーが発生するようになりました。
League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given
以下の部分がエラーになりました。
$url = Null; //Nullだとエラー
$isFile = $disk->exists($url); //Nullだとエラー
//以下に続く
なので、単純に以下のように対処。
$url = Null; //Nullだとエラー
if($url){
$isFile = $disk->exists($url);
//以下に続く
}
まとめ
みなさんの記事のおかげで、自分もついに Laravel10 に辿り着くことができました。
自分も軌跡を記録しましたので、みなさまのバグがこの記事で解決できることを祈ります。
以上です。誰かの参考になればと思います。
このブログは広告のクリックによって支えられています。
参考になったという方はぜひ、ぜひともよろしくお願いします!
それでは!
人気記事