Laravel9からLaravel10へアップグレードする手順を説明します。
一番のポイントは、Laravel10ではPHPのバージョンが8.1以上必要になる点かと思います。この部分からお伝えしていきます。
なお今回の記事は、下記の公式記事にある方法をベースにしています。
Laravel10へアップグレードするための必要条件
まず前提条件として、Laravel10では下記が必要です。
- PHP8.1以上
- composer2.2以上
それぞれ、下記のコマンドで現在のバージョンを確認できます。
【phpバージョン】
1 |
php --version |
【composerバージョン】
1 |
composer --version |
開発環境がLaravel Sailの場合、PHPのバージョン変更については下記記事をご覧ください。
XAMPPの場合には、下記にて、一台のPCで複数バージョンのXAMPPを使う方法を説明しています。
Laravel Sailは、プロジェクトごとにPHPのバージョンを割り当てられます。この点は、XAMPPよりも使いやすいと感じます。
Laravel10にアップグレードする手順
まずは、どのプロジェクトにも共通する部分からお伝えします。
ライブラリのバージョンを変更
Laravel10用に、ライブラリのバージョンを修正します。プロジェクト内のcomposer.jsonファイルを開きます。
3箇所のバージョンを下記のとおり変えておきましょう
- laravel/framework: ^10.0
- laravel/sanctum: ^3.2
- spatie/laravel-ignition: ^2.0
composer.jsonの変更後例の画像は下記のとおりです。
【変更後例】
最初にキャレット(^マーク)がついていますが、これは、ゼロではない一番左側の数字を変えない更新を許可するという意味になります。
たとえば「laravel/framework: ^10.0」とありますが、これは、「laravel10.0から11未満まで」ということになります。この記事を書いている2023年2月28日時点では、最新版はLaravel 10.1.5です。そのため、本日、上記の設定でアップデートを実行すると、Laravel10.1.5がインストールされます。
「このバージョンにしたい」というこだわりがない時は、キャレットを使ってバージョンを指定しておくと便利です。
Minimum Stabilityを変更
同じくcomposer.jsonの中のminimum stabilityを変更します。こちらは、devから、stableにします。
【変更前例】
【変更後例】
PHPUnit 10を使いたい場合
phpunit.xml 設定ファイルの <coverage> セクションから processUncoveredFiles 属性を削除します。composer.json ファイル内の2箇所のバージョンを下記のとおり変えておきましょう
- nunomaduro/collision: ^7.0
- phpunit/phpunit to ^10.0
使っているライブラリに応じて修正
ご利用のコードによっては、他の変更も必要となります。ざっとご覧になって、該当する場合には、公式ページを参考にコードを修正しておきましょう。
かなりざっくり翻訳しました^^;
「あてはまるものはない」と思ったら、ここは飛ばしてください。
そこそこ影響がありそうな変更
- データベースの構文(通常 DB::rawで生成されるもの)は、Laravel10で書きなおされました。この変更はエンドユーザーには影響はないものの、もしstringを使って手動でキャストしていたり、_toString メソッドを直接呼び出している場合は、代わりに getValue メソッドを呼び出すようにコードを更新する必要があります。
- Eloquentモデルの非推奨の$datesプロパティは削除されました。アプリケーションでは、$castsプロパティを使用する必要があります。
- LaravelのMonolog依存関係は、Monolog 3.xに更新されました。アプリケーション内でMonologと直接やりとりしている場合は、Monologのアップグレードガイドを確認してください。
- Redis cache tagが改良されました。古いキャッシュタグエントリを使用している場合には、新しいコマンドを設定しておく必要があります。
- 非推奨の MocksApplicationServices トレイトは、フレームワークから削除されました。
- Langディレクトリはデフォルトでは、Laravel10にありません。ただ、既にLangディレクトリが存在する場合には問題ありません。Laravel10でのLangディレクトリについて知りたい場合は、こちらの記事を参考にしてください。
あまり影響がなさそうな変更
- path.publicをコンテナにバインディングすることでpublic pathをカスタマイズしている場合は、コードの修正が必要です。
- AuthServiceProviderのregisterPoliciesは今後自動で呼び出されるので、もしAuthServiceProviderのbootメソッドで呼び出すようにしていれば、削除してOKです。
- Illuminate\Database\QueryExceptionコンストラクタは、最初の引数で接続文字列を受け入れるようになりました。
- migrationsが引数なしにulidメソッドを呼び出すと、カラムはulidという名前になります。
- Illuminate\Database\Eloquent\Relations\RelationクラスのgetBaseQueryメソッドはtoBaseにリネームされました。
- 非推奨の Bus::dispatchNow と dispatch_now メソッドは削除されました。代わりに、アプリケーションは Bus::dispatchSync と dispatch_sync メソッドをそれぞれ使用しなければなりません。
- RateLimiter::attempt メソッドを呼び出すと、提供されたクロージャによって返される値がメソッドによって返されるようになりました。何もないか null が返された場合、attempt メソッドは true を返します。
- 非推奨の Redirect::home メソッドは削除されました。代わりに、アプリケーションは明示的に指定されたルートにリダイレクトする必要があります。
- クロージャベースのカスタム検証ルールを記述する際、$failコールバックを複数回呼び出すと、前のメッセージを上書きする代わりに、メッセージを配列に追加するようになりました。通常、これはアプリケーションに影響を与えません。さらに、$failコールバックはオブジェクトを返すようになりました。以前、検証クロージャの戻り値の型ヒントを出していた場合は、型ヒントの更新が必要になる場合があります。
composer updateを実行
composer.jsonを修正した後は、composer updateを実行します。するとライブラリ情報が composer.jsonの情報に沿って更新されます。
1 |
composer update |
Laravel10への変更を確認
最後に、下記コマンドを実行してプロジェクトのLaravelのバージョンを確認しておきましょう。
1 |
php artisan --version |
【コマンド実行時の画面】
またcomposer.lockファイルを見ると、実際にインストールされたライブラリのバージョンを確認できます。
注意点:既存のファイルが自動で書き替えられたりはしない
なお、Laravel10にアップグレードしても、既存のファイルが自動で書き替えられたりはしません。
たとえばwelcome.blade.phpファイルは、Laravel9バージョンのままです。
記事の一番上の画像では、Laravel10のトップページをだしちゃいましたが。実はアップグレードしても、古いトップページのままなんです。
またLaravel10では、日本語翻訳が入るLangディレクトリはデフォルトでは存在しません。ですが既存プロジェクトにLangディレクトリがある場合には、そのまま残ります。
「勝手に書き替えられたりはしない」ということで、安心ではありますよね。
ただ、自動で変更してほしいときには、ご注意ください。たとえばLaravel9は、途中から、Laravel Mixに変わってLaravel Viteが採用されるようになりました。Laravel10でも、Laravel Viteが採用されています。
ですが、既存のプロジェクトでLaravel Mixを使っていた場合には、Laravel Viteに自動で切り替わったりしません。Laravel Viteにしたい場合には、設定の修正が必要になります。
その場合、下記の公式記事が参考になります。
個人的には、既にLaravel Mixである程度プロジェクトを進めている場合には、そのままLaravel Mixを使い続けたほうがラクだと思います。
さいごに
以上、ざっとですが、Laravel9からLaravel10へのアップグレード方法をご紹介しました。
「Laravel10って、どんな機能があるんだろう?」と思ったら、下記の記事も併せて参考にしてくださいね。Laravel10の新機能・変更点ご紹介しています。
なお、わたしのほうでは近々、Laravel10対応のLaravelの本を出版予定です。
「Laravel10に対応した教本で、基本からLaravelの使い方を学んでおきたい」と思ったら、こちらお役立ていただけます。
なお現在の最新版はLaravel11です。Laravel11に対応した書籍のサポートガイドご用意しています。書籍に関する詳細はこちらご覧ください。