Laravel10のプロジェクトをLaravel11にアップグレードする際の手順について解説します。
本記事では公式マニュアルで【影響の可能性:高い】とあったものを中心に取り上げています。
ただ変更すべき項目は、Webアプリによって異なります。ご了承ください。
Laravel10からLaravel11へのアップグレード
今回は、Laravel10で作成した下記のWebアプリを、実際にローカル環境でLaravel11に変更してみました。
ライブラリのアップデート
Laravel11にするために、ライブラリをアップデートします。
composer.jsonファイル内で該当のライブラリが含まれていたら、下記のようにバージョンを上げておきます。またphpバージョンも8.2以上とします(アップグレードの際には、あらかじめphp8.2以上の環境が必要となります)。
laravel/framework
を^11.0
へnunomaduro/collision
を^8.1
へlaravel/breeze
を^2.0
へ(インストール済みの場合)laravel/cashier
を^15.0
へ(インストール済みの場合)laravel/dusk
を^8.0
へ(インストール済みの場合)laravel/jetstream
を^5.0
へ(インストール済みの場合)laravel/octane
を^2.3
へ(インストール済みの場合)laravel/passport
を^12.0
へ(インストール済みの場合)laravel/sanctum
を^4.0
へ(インストール済みの場合)laravel/spark-stripe
を^5.0
へ(インストール済みの場合)laravel/telescope
を^5.0
へ(インストール済みの場合)inertiajs/inertia-laravel
を^1.0
へ(インストール済みの場合)
わたしの場合は、下記のように、phpを含めると5項目を変更しました。
composer.jsonファイルを変更後、下記コマンドを実行してライブラリをアップデートします。
1 |
composer update |
以上です。
ミドルウェアなどの登録場所はそのままで大丈夫
Laravel11ではミドルウェアの登録場所など変わっております。ですが、Laravel10からアップグレードした場合には、そのままの構造で大丈夫です。
公式マニュアルでも次のように記載があります。
Laravel10アプリケーションをLaravel11にアップグレードするときに、アプリケーション構造の移行を試みることはお勧めしません。Laravel11はLaravel10のアプリケーション構造もサポートするように注意深く調整してあります。
https://readouble.com/laravel/11.x/ja/upgrade.html
ちなみにLaravel10ではミドルウェアはapp/Http/Kernel.phpに登録しましたが、Laravel11では、bootstrap/app.phpに登録します。ですがLaravel10からLaravel11にアップグレード後は、引き続きapp/Http/Kernel.phpにミドルウェアを記述できました。
アップグレード後は、bootstrap/app.phpには、次のようにコードが記載されています。
【アップグレード後のbootstrap/app.php】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class ); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class ); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class ); |
Laravel11を通常どおりインストールした際のbootstrap/app.phpファイルの書き方は、下記記事で説明しています。上記コードと見比べてみると、違いが分かります。
Laravel11では、ミドルウェアやGateの登録場所の変更が必要かと思っていましたが、そういった変更は不要でした。
手間いらずのところは、嬉しいですよね。
Laravel Cashier Stripe、Passport、Sanctum、Spark Stripe、Telescopeを使用している場合
以下のコマンドを実行して、アプリケーションへマイグレーションをリソース公開する必要があります。さらに、これらの各パッケージのアップグレードガイドを確認して、追加の変更点を把握してください。
1 2 3 4 5 |
php artisan vendor:publish --tag=cashier-migrations php artisan vendor:publish --tag=passport-migrations php artisan vendor:publish --tag=sanctum-migrations php artisan vendor:publish --tag=spark-migrations php artisan vendor:publish --tag=telescope-migrations |
doctrine/dbalを使用している場合
composer.jsonでdoctrine/dbalを確認し、もしあれば、下記コマンドでアンインストールします。
1 |
composer remove doctrine/dbal |
SQLiteを使用している場合
データベース管理システムでSQLiteを使用している場合は、Laravel11からは、SQLite3.35.0以上が必要となります。
カラムの変更がある場合
カラムに対して属性等の変更がある場合、以前に設定した属性を保持するには、カラム変更時にそれらを呼び出す必要があります。
ちょっと分かりにくいので、例を使って説明しますね。
たとえばavatarカラムに、次のようにdefault()属性を加えていたとします。
このあと、avatarカラムにcomment属性を加えるとします。そのためにマイグレーションファイルを作成しますが、この時、書き方に注意が必要です。
もし以前の設定を含めず下記のようにマイグレーションファイルを作成したとすると、最初に設定したdefault属性が消えてしまいます。
【間違った例】
1 2 3 4 5 6 |
public function up(): void { Schema::table('users', function (Blueprint $table) { $table->string('avatar')->comment('test')->change(); }); } |
最初に設定したdefault属性を保つには、次のようにdefault属性も含めた形でマイグレーションファイルを記述する必要があります。
【正しい例】
1 2 3 4 5 6 |
public function up(): void { Schema::table('users', function (Blueprint $table) { $table->string('avatar')->default('user_default.jpg')->comment('test')->change(); }); } |
マイグレーションファイルのデータ型でdouble, float, unsignedDecimal, unsignedDouble, unsignedFloatが含まれる場合
書き方が変わっています。マニュアルを参考にしてください。
エラーになった場合
次のようなエラーになった場合には、該当ライブラリの公式ドキュメントまたは GitHub のリポジトリでLaravel11に対応する現在のバージョンを確認してください。
Problem 1
– Conclusion: don’t install laravel/framework v11.0.0 (conflict analysis result)
– Root composer.json requires spatie/laravel-ignition ^1.0 -> satisfiable by spatie/laravel-ignition[1.0.0, …, v1.x-dev].
たとえば上記のエラーは、spatie/laravel-ignition
パッケージが Laravel 11 との互換性がないことを示しています。GitHub で確認した結果、次のように composer.json
ファイルのバージョン指定を更新しました。
↓↓
このあと、再度composer updateを実行します。なお、下記のようにコマンドを実行すると、spatie/laravel-ignition
だけでなく、他の依存パッケージも適切にアップデートしてくれます。依存関係に関する問題を解決するのに役立ちます。
1 |
composer update --with-all-dependencies |
ライブラリ(Laravel Shift)を使ったアップグレード
なおLaravelではLaravel Shiftというバージョンアップ用ライブラリを用意してくれています。
わたしは使ったことがないのですが、Laravelの公式ページでも紹介されているライブラリです。手間をかけずにバージョンアップしたいという場合には役立ちそうです。
有料ライブラリで99ドル(年間)~ですが、1回限りのプランもあります。その場合どのバージョンをアップグレードするか等によって価格は異なります。詳細は公式ページご覧ください。
さいごに
本記事では、公式マニュアルで「影響の可能性:高い」とあったものをご紹介しました。ほかにも、Webアプリによっては処理が必要となります。アップグレード前には、公式マニュアルにも目を通してくださいね。
なお 今回バージョンアップテストに使ったWebアプリは、わたしが運営中の学習サイト【Laravelの教科書】のサンプルサイトとなります。
学習サイト【Laravelの教科書】は、Laravelの基本の使い方を学びつつ、フォーラムサイトを作っていける実践的な教材です。
【学習サイトを通じて作成するWebアプリ画面】
ご興味あれば、下記の案内ページを見てみてくださいね。なお学習サイトでは、Laravel8~Laravel11版の教材をご用意しています。基礎編は無料です♪