Laravel

【Laravel】PHP7.4からPHP8.2、Laravel6からLaravel10にアップデートする方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

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 に辿り着くことができました。

自分も軌跡を記録しましたので、みなさまのバグがこの記事で解決できることを祈ります。

以上です。誰かの参考になればと思います。

このブログは広告のクリックによって支えられています。

参考になったという方はぜひ、ぜひともよろしくお願いします!

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する