影響度の高い変更
影響度が中程度の変更
影響度の低い変更
9.xから10.0へのアップグレード
アップデート見積もり時間:10分
Note: 私たちは、互換性のない変更を可能な限りすべて文書化するよう努力しています。これらの互換性のない変更の一部はフレームワークの不明瞭な部分であり、こうした変更の一部が実際にあなたのアプリケーションに影響を与える可能性があります。時間を節約したいですか?Laravel Shift を使用すると、アプリケーションのアップグレードを自動化できます。
依存パッケージのアップデート
影響の可能性: 高い
PHP8.1.0必須
現バージョンのLaravelは、PHP8.1.0以上が必要です。
Composer2.2.0必須
現バージョンのLaravelは、Composer2.2.0以上が必要です。
Composerの依存パッケージ
アプリケーションのcomposer.json
ファイルにある、以下の依存パッケージを更新してください。
laravel/framework
を^10.0
laravel/sanctum
を^3.2
doctrine/dbal
を^3.0
spatie/laravel-ignition
を^2.0
laravel/passport
を^11.0
(アップグレードガイド)
Sanctum2.xリリースシリーズから3.xへアップグレードする場合は、Sanctumアップグレードガイドを参照してください。
さらに、PHPUnit10を使用したい場合は、アプリケーションのphpunit.xml
設定ファイルの<coverage>
セクションから、processUncoveredFiles
属性を削除する必要があります。次に、アプリケーションのcomposer.json
ファイルで、以下の依存関係を更新します。
nunomaduro/collision
を^7.0
phpunit/phpunit
を^10.0
最後に、アプリケーションで使用しているその他のサードパーティパッケージを調べ、Laravel10のサポートに適したバージョンを確実に使用してください。
最低安定度
アプリケーションのcomposer.json
ファイルのminimum-stability
設定をstable
へ更新する必要があります。もしくは、minimum-stability
のデフォルト値はstable
なので、アプリケーションの
composer.json
ファイルからこの設定を削除してください。
"minimum-stability": "stable",
アプリケーション
Publicパスの結合
影響の可能性: 低い
アプリケーションでコンテナへpath.public
を結合し、「公開パス」をカスタマイズしている場合は、代わりに
Illuminate\Foundation\Application
オブジェクトが提供するusePublicPath
メソッドを呼び出すようにコードを更新する必要があります。
app()->usePublicPath(__DIR__.'/public');
許可
registerPolicies
メソッド
影響の可能性: 低い
AuthServiceProvider
のregisterPolicies
メソッドをフレームワークが自動的に呼び出すようになりました。したがって、アプリケーションのAuthServiceProvider
のboot
メソッドから、このメソッドの呼び出しを削除できます。
キャッシュ
Redisキャッシュタグ
影響の可能性: 中程度
Redisのキャッシュタグサポートは、パフォーマンスとストレージ効率向上のために書き直しました。以前のLaravelのリリースでは、アプリケーションのキャッシュドライバにRedisを使用すると、古いキャッシュタグがキャッシュに蓄積していました。
そこで、古くなったキャッシュタグエントリーを適切に整理するため、Laravelの新しいcache:prune-stale-tags
ArtisanコマンドをアプリケーションのApp\Console\Kernel
クラスで定期実行してください。
$schedule->command('cache:prune-stale-tags')->hourly();
データベース
データベース構文
影響の可能性: 中程度
データベースの「構文」(通常は DB::raw
により生成)は、将来的に追加機能を提供するため、Laravel10.xで書き直しました。特に、構文の素の文字列の値は、構文のgetValue(Grammar $grammar)
メソッドで取得する必要があります。(string)
を使う構文から文字列へのキャストは、既にサポートしていません。
通常、これはエンドユーザーのアプリケーションには無影響です。しかし、もしアプリケーションで(string)
を使用してデータベース式を文字列へ手作業でキャストしたり、構文に対して__toString
メソッドを直接呼び出している場合は、代わりにgetValue
メソッドを呼び出すようにコードを更新する必要があります。
use Illuminate\Support\Facades\DB;
$expression = DB::raw('select 1');
$string = $expression->getValue(DB::connection()->getQueryGrammar());
クエリ例外コンストラクタ
影響の可能性: かなり低い
Illuminate\Database\QueryException
のコンストラクターで、文字列の接続名を最初の引数に取るようにしました。アプリケーションがこの例外を手作業で投げている場合は、それに応じてコードを調整する必要があります。
ULIDカラム
影響の可能性: 低い
マイグレーションで、ulid
メソッドを引数なしで呼び出すと、カラムはulid
という名前になります。Laravelの以前のリリースでは、引数なしでこのメソッドを呼び出すと、誤ってuuid
という名前のカラムが作成されていました。
$table->ulid();
ulid
メソッドを呼び出すとき、明示的にカラム名を指定するには、そのカラム名をメソッドへ渡してください。
$table->ulid('ulid');
Eloquent
モデルの"Dates"プロパティ
影響の可能性: 中程度
Eloquentモデルで非推奨になっていた$dates
プロパティを削除しました。アプリケーションでは、$casts
プロパティを使用する必要があります。
protected $casts = [
'deployed_at' => 'datetime',
];
多言語化
Languageディレクトリ
影響の可能性: なし
既存のアプリケーションには関係ありませんが、Laravelアプリケーションのスケルトンは、lang
ディレクトリをデフォルトで用意しなくなりました。代わりに、新しいLaravelアプリケーションを書く際には、lang:publish
Artisanコマンドを使用してリソース公開してください。
php artisan lang:publish
ログ
Monolog3
影響の可能性: 中程度
LaravelのMonolog依存バージョンをMonolog3.xへ更新しました。アプリケーション内でMonologと直接やりとりする場合は、Monologのアップグレードガイドを確認する必要があります。
BugSnagやRollbarなどのサードパーティのログサービスを使用している場合、それらのサードパーティのパッケージをMonolog3.xとLaravel10.xをサポートするバージョンへアップグレードする必要がある場合があります。
キュー
The Bus::dispatchNow
Method
影響の可能性: 低い
非推奨にしていたBus::dispatchNow
とdispatch_now
メソッドを削除しました。代わりに、アプリケーションでは、それぞれBus::dispatchSync
かdispatch_sync
メソッドを使用する必要があります。
ルート
ミドルウェアエイリアス
影響の可能性: 条件による
新しいLaravelアプリケーションでは、App\Http\Kernel
クラスの$routeMiddleware
プロパティは、その目的をよりよく表すために$middlewareAliases
へ名前を変更しました。既存のアプリケーションでこのプロパティの名前を変更することは歓迎しますが、必須ではありません。
レート制限の戻り値
影響の可能性: 低い
RateLimiter::attempt
メソッドを呼び出すと、指定したクロージャが返す値をメソッドからも返すようにしました。何も返さないかnull
を返すと、attempt
メソッドはtrue
を返します。
$value = RateLimiter::attempt('key', 10, fn () => ['example'], 1);
$value; // ['example']
Redirect::home
メソッド
影響の可能性: かなり低い
非推奨だったRedirect::home
メソッドを削除しました。代わりに、アプリケーションでは明示的に名付けたルートへリダイレクトする必要があります。
return Redirect::route('home');
テスト
サービスのモック
影響の可能性: 中程度
非推奨だったMocksApplicationServices
トレイトをフレームワークから削除しました。このトレイトはexpectsEvents
、expectsJobs
、expectsNotifications
といったテストメソッドを提供していました。
もしあなたのアプリケーションでこれらのメソッドを使用するなら、それぞれEvent::fake
、Bus::fake
、Notification::fake
へ移行することをお勧めします。フェイクを使ったモックについては、フェイクしようとしているコンポーネントの対応するドキュメントで詳しく説明されています。
バリデーション
クロージャバリデーションルールメッセージ
影響の可能性: かなり低い
クロージャベースのカスタムバリデーションルールを書くとき、$fail
コールバックを複数回呼び出すと、前のメッセージを上書きする代わりに、メッセージを配列へ追加するようになりました。通常、これはアプリケーションに影響を与えることはありません。
加えて、$fail
コールバックはオブジェクトを返すようになりました。これまでバリデーションクロージャの戻り値の型をタイプヒントしていた場合は、タイプヒントを更新する必要があります。
public function rules()
{
'name' => [
function ($attribute, $value, $fail) {
$fail('validation.translation.key')->translate();
},
],
}
フォームリクエストのafterメソッド
影響の可能性: かなり低い
フォームリクエスト内でafter
メソッドは、Laravelの予約語にしました。フォームリクエストでafter
メソッドを定義している場合は、Laravelのフォームリクエストの新しい機能である「バリデーションのafter」を利用するために、このメソッドの名前を変更するか、修正する必要があります。
その他
laravel/laravel
GitHubリポジトリの変更点をご覧いただくこともお勧めします。これらの変更の多くは必須ではありませんが、これらのファイルをあなたのアプリケーションと同期させておくとよいでしょう。これらの変更のいくつかは、このアップグレードガイドでカバーしていますが、設定ファイルやコメントの変更など、他のものはカバーしていません。
GitHubのソース比較ツールで簡単に変更点を確認し、どのアップデートが自分にとって重要かを選択できます。ただし、GitHubソース比較ツールで表示される変更点の多くは、当オーガニゼーションがPHPネイティブ型を採用したことによるものです。これらの変更は後方互換性があり、Laravel 10への移行時に採用するかは任意です。