Upgrade Guide
High Impact Changes
Medium Impact Changes
Low Impact Changes
Upgrading to 10.0 from 9.x
Estimated Upgrade Time: 10 Minutes
私たちは、考えられるすべての重大な変更を文書化するよう努めます。これらの重大な変更の一部はフレームワークのあいまいな部分にあるため、実際にアプリケーションに影響を与える可能性があるのは、これらの変更の一部だけです。時間を節約したいですか? Laravel Shift を使用すると、アプリケーションのアップグレードを自動化できます。
Updating Dependencies
影響の可能性: 高
PHP 8.1.0 Required
Laravel には PHP 8.1.0 以降が必要になりました。
Composer 2.2.0 Required
Laravel には Composer 2.2.0 以降が必要になりました。
Composer Dependencies
アプリケーションの composer.json ファイル内の次の依存関係を更新する必要があります。
laravel/framework~^10.0laravel/sanctum~^3.2doctrine/dbal~^3.0spatie/laravel-ignition~^2.0laravel/passport~^11.0(Upgrade Guide)laravel/ui~^4.0
2.x リリース シリーズから Sanctum 3.x にアップグレードする場合は、Sanctum upgrade guide を参照してください。
さらに、PHPUnit 10 を使用したい場合は、アプリケーションの phpunit.xml 構成ファイルの <coverage> セクションから processUncoveredFiles 属性を削除する必要があります。次に、アプリケーションの composer.json ファイル内の次の依存関係を更新します。
nunomaduro/collision~^7.0phpunit/phpunit~^10.0
最後に、アプリケーションで使用される他のサードパーティパッケージを調べて、Laravel 10 をサポートする適切なバージョンを使用していることを確認します。
Minimum Stability
アプリケーションの composer.json ファイル内の minimum-stability 設定を stable に更新する必要があります。または、minimum-stability のデフォルト値は stable であるため、アプリケーションの composer.json ファイルからこの設定を削除することもできます。
"minimum-stability": "stable",
Application
Public Path Binding
影響の可能性: 低い
アプリケーションが path.public をコンテナーにバインドすることで「パブリック パス」をカスタマイズしている場合は、代わりにコードを更新して、Illuminate\Foundation\Application オブジェクトによって提供される usePublicPath メソッドを呼び出す必要があります。
app()->usePublicPath(__DIR__.'/public');
Authorization
The registerPolicies Method
影響の可能性: 低い
AuthServiceProvider の registerPolicies メソッドがフレームワークによって自動的に呼び出されるようになりました。したがって、アプリケーションの AuthServiceProvider の boot メソッドからこのメソッドの呼び出しを削除できます。
Cache
Redis Cache Tags
影響の可能性: 中
Cache::tags() の使用は、Memcached を使用するアプリケーションにのみ推奨されます。アプリケーションのキャッシュドライバとして Redis を使用している場合は、Memcached に移行するか、アプリケーションを Laravel 12.30.0 にアップグレードすることを検討する必要があります。
Database
Database Expressions
影響の可能性: 中
データベースの「式」(通常は DB::raw によって生成される) は、将来追加機能を提供するために Laravel 10.x で書き直されました。特に、文法の生の文字列値は、式の getValue(Grammar $grammar) メソッドを介して取得する必要があることに注意してください。 (string) を使用した式の文字列へのcastはサポートされなくなりました。
通常、これはエンドユーザー アプリケーションには影響しません。ただし、アプリケーションが (string) を使用してデータベース式を手動で文字列にcastしている場合、または式に対して __toString メソッドを直接呼び出している場合は、代わりに getValue メソッドを呼び出すようにコードを更新する必要があります。
use Illuminate\Support\Facades\DB;
$expression = DB::raw('select 1');
$string = $expression->getValue(DB::connection()->getQueryGrammar());
Query Exception Constructor
影響の可能性: 非常に低い
Illuminate\Database\QueryException コンストラクターは、最初の引数として文字列接続名を受け入れるようになりました。アプリケーションがこの例外を手動でスローしている場合は、それに応じてコードを調整する必要があります。
ULID Columns
影響の可能性: 低い
移行で引数を指定せずに ulid メソッドを呼び出すと、列の名前は ulid になります。 Laravel の以前のリリースでは、引数を指定せずにこのメソッドを呼び出すと、誤って uuid という名前の列が作成されました。
$table->ulid();
ulid メソッドを呼び出すときに列名を明示的に指定するには、列名をメソッドに渡すことができます。
$table->ulid('ulid');
Eloquent
Model "Dates" Property
影響の可能性: 中
Eloquent モデルの非推奨の $dates プロパティは削除されました。アプリケーションは $casts プロパティを使用する必要があります。
protected $casts = [
'deployed_at' => 'datetime',
];
Localization
The Language Directory
影響の可能性: なし
既存のアプリケーションには関係ありませんが、Laravel アプリケーション スケルトンにはデフォルトで lang ディレクトリが含まれなくなりました。代わりに、新しい Laravel アプリケーションを作成するときは、lang:publish Artisan コマンドを使用して公開できます。
php artisan lang:publish
Logging
Monolog 3
影響の可能性: 中
Laravel の Monolog 依存関係が Monolog 3.x に更新されました。アプリケーション内で Monolog と直接対話している場合は、Monolog の upgrade guide を確認する必要があります。
BugSnag や Rollbar などのサードパーティのログ サービスを使用している場合は、それらのサードパーティ パッケージを Monolog 3.x および Laravel 10.x をサポートするバージョンにアップグレードする必要がある場合があります。
Queues
The Bus::dispatchNow Method
影響の可能性: 低い
非推奨の Bus::dispatchNow メソッドと dispatch_now メソッドは削除されました。代わりに、アプリケーションでは Bus::dispatchSync メソッドと dispatch_sync メソッドをそれぞれ使用する必要があります。
The dispatch() Helper Return Value
影響の可能性: 低い
Illuminate\Contracts\Queue を実装していないクラスで dispatch を呼び出すと、以前はクラスの handle メソッドの結果が返されていました。ただし、これにより Illuminate\Foundation\Bus\PendingBatch インスタンスが返されるようになります。 dispatch_sync() を使用して、以前の動作を複製できます。
Routing
Middleware Aliases
影響の可能性: オプション
新しい Laravel アプリケーションでは、その目的をより適切に反映するために、App\Http\Kernel クラスの $routeMiddleware プロパティの名前が $middlewareAliases に変更されました。既存のアプリケーションでこのプロパティの名前を変更しても構いません。ただし、必須ではありません。
Rate Limiter Return Values
影響の可能性: 低い
RateLimiter::attempt メソッドを呼び出すと、提供されたクロージャによって返される値がメソッドによって返されるようになります。何も返されない場合、または null が返された場合、attempt メソッドは true を返します。
$value = RateLimiter::attempt('key', 10, fn () => ['example'], 1);
$value; // ['example']
The Redirect::home Method
影響の可能性: 非常に低い
非推奨の Redirect::home メソッドは削除されました。代わりに、アプリケーションは明示的に名前を付けたルートにリダイレクトする必要があります。
return Redirect::route('home');
Testing
Service Mocking
影響の可能性: 中
非推奨の MocksApplicationServices 特性はフレームワークから削除されました。この特性により、expectsEvents、expectsJobs、expectsNotifications などのテスト メソッドが提供されました。
アプリケーションでこれらのメソッドを使用している場合は、それぞれ Event::fake、Bus::fake、および Notification::fake に移行することをお勧めします。フェイクによるモックの詳細については、偽装しようとしているコンポーネントの対応するドキュメントを参照してください。
Validation
Closure Validation Rule Messages
影響の可能性: 非常に低い
クロージャ ベースのカスタム検証ルールを作成する場合、$fail コールバックを複数回呼び出すと、前のメッセージを上書きするのではなく、メッセージが配列に追加されるようになりました。通常、これはアプリケーションには影響しません。
さらに、$fail コールバックはオブジェクトを返すようになりました。以前に検証クロージャの戻り値の型をタイプヒントで指定していた場合は、タイプヒントの更新が必要になる場合があります。
public function rules()
{
'name' => [
function ($attribute, $value, $fail) {
$fail('validation.translation.key')->translate();
},
],
}
Validation Messages and Closure Rules
影響の可能性: 非常に低い
以前は、クロージャ ベースの検証ルールに挿入される $fail コールバックに配列を提供することで、失敗メッセージを別のキーに割り当てることができました。ただし、最初の引数としてキーを指定し、2 番目の引数として失敗メッセージを指定する必要があります。
Validator::make([
'foo' => 'string',
'bar' => [function ($attribute, $value, $fail) {
$fail('foo', 'Something went wrong!');
}],
]);
Form Request After Method
影響の可能性: 非常に低い
フォームリクエスト内では、after メソッドは reserved by Laravel になりました。フォームリクエストで after メソッドが定義されている場合は、Laravel のフォームリクエストの新しい「検証後」機能を利用するようにメソッドの名前を変更または変更する必要があります。
Miscellaneous
laravel/laravel GitHub repository の変更内容も確認することをお勧めします。これらの変更の多くは必要ありませんが、これらのファイルをアプリケーションと同期させておきたい場合があります。これらの変更の一部はこのアップグレード ガイドで説明されますが、構成ファイルやコメントへの変更などのその他の変更については説明されません。
GitHub comparison tool を使用して変更を簡単に表示し、どの更新が自分にとって重要かを選択できます。ただし、GitHub 比較ツールによって示される変更の多くは、組織が PHP ネイティブ タイプを採用したことによるものです。これらの変更には下位互換性があり、Laravel 10 への移行中の変更の導入はオプションです。