高影響の変更
中影響の変更
低影響の変更
10.xから11.0へのアップグレード
推定アップグレード時間: 15分
私たちは、可能な限りすべての破壊的変更を文書化しようとしています。これらの破壊的変更の一部はフレームワークの隠れた部分にあるため、実際にアプリケーションに影響を与えるのは一部の変更だけかもしれません。時間を節約したいですか? Laravel Shiftを使用して、アプリケーションのアップグレードを自動化することができます。
依存関係の更新
影響の可能性: 高
PHP 8.2.0が必要
Laravelは現在、PHP 8.2.0以上を必要とします。
curl 7.34.0が必要
LaravelのHTTPクライアントは現在、curl 7.34.0以上を必要とします。
Composer依存関係
アプリケーションのcomposer.json
ファイルで以下の依存関係を更新する必要があります:
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/scout
から^10.0
へ (インストールされている場合)laravel/spark-stripe
から^5.0
へ (インストールされている場合)laravel/telescope
から^5.0
へ (インストールされている場合)livewire/livewire
から^3.4
へ (インストールされている場合)inertiajs/inertia-laravel
から^1.0
へ (インストールされている場合)
アプリケーションがLaravel Cashier Stripe、Passport、Sanctum、Spark Stripe、またはTelescopeを使用している場合、これらのマイグレーションをアプリケーションに公開する必要があります。Cashier Stripe、Passport、Sanctum、Spark Stripe、およびTelescopeはもはや自動的に自分のマイグレーションディレクトリからマイグレーションを読み込むことはありません。したがって、次のコマンドを実行して、これらのマイグレーションをアプリケーションに公開する必要があります:
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
さらに、これらのパッケージのアップグレードガイドを確認して、追加の破壊的変更について把握しておく必要があります:
Laravelインストーラーを手動でインストールした場合、Composerを介してインストーラーを更新する必要があります:
composer global require laravel/installer:^5.6
最後に、doctrine/dbal
Composer依存関係をアプリケーションに以前追加していた場合は、Laravelがもはやこのパッケージに依存していないため、削除することができます。
アプリケーション構造
Laravel 11は、デフォルトのファイルが少ない新しいデフォルトのアプリケーション構造を導入します。具体的には、新しいLaravelアプリケーションには、サービスプロバイダー、ミドルウェア、および設定ファイルが少なくなっています。
ただし、Laravel 10アプリケーションがLaravel 11にアップグレードする際にアプリケーション構造を移行しようとすることは推奨しません。Laravel 11は、Laravel 10のアプリケーション構造もサポートするように慎重に調整されています。
認証
パスワードの再ハッシュ
影響の可能性: 低
Laravel 11は、認証中にユーザーのパスワードを自動的に再ハッシュします。これは、ハッシュアルゴリズムの「作業係数」がパスワードが最後にハッシュされたときから更新されている場合です。
通常、これによりアプリケーションが中断されることはありません。ただし、User
モデルの「password」フィールドの名前がpassword
以外の場合は、モデルのauthPasswordName
プロパティを介してフィールドの名前を指定する必要があります:
protected $authPasswordName = 'custom_password_field';
または、アプリケーションのconfig/hashing.php
設定ファイルにrehash_on_login
オプションを追加することで、パスワードの再ハッシュを無効にすることができます:
'rehash_on_login' => false,
UserProvider契約
影響の可能性: 低
アプリケーションまたはパッケージがこのインターフェースを実装するクラスを定義している場合は、新しい`````rehashPasswordIfRequired`````メソッドを実装に追加する必要があります。参照実装は`````Illuminate\Auth\EloquentUserProvider`````クラス内にあります:
``````php
public function rehashPasswordIfRequired(Authenticatable $user, array $credentials, bool $force = false);
`
Authenticatable契約
影響の可能性: 低
アプリケーションまたはパッケージがこのインターフェースを実装するクラスを定義している場合は、新しい`````getAuthPasswordName`````メソッドを実装に追加する必要があります:
``````php
public function getAuthPasswordName()
{
return 'password';
}
`
Laravelに含まれるデフォルトのUser
モデルは、このメソッドがIlluminate\Auth\Authenticatable
トレイト内に含まれているため、自動的にこのメソッドを受け取ります。
AuthenticationExceptionクラス
影響の可能性: 非常に低
``````php
if ($e instanceof AuthenticationException) {
$path = $e->redirectTo($request);
}
`
キャッシュ
キャッシュキーのプレフィックス
影響の可能性: 非常に低
以前は、DynamoDB、Memcached、またはRedisキャッシュストアのためにキャッシュキーのプレフィックスが定義されている場合、Laravelはプレフィックスに:
を追加していました。Laravel 11では、キャッシュキーのプレフィックスは:
サフィックスを受け取りません。以前のプレフィックス動作を維持したい場合は、キャッシュキーのプレフィックスに:
サフィックスを手動で追加できます。
コレクション
Enumerable契約
影響の可能性: 低
``````php
public function dump(...$args);
`
データベース
SQLite 3.26.0以上
影響の可能性: 高
アプリケーションがSQLiteデータベースを利用している場合、SQLite 3.26.0以上が必要です。
Eloquentモデルキャストメソッド
影響の可能性: 低
基本のEloquentモデルクラスは、属性キャストの定義をサポートするためにcasts
メソッドを定義しました。アプリケーションのモデルの1つがcasts
リレーションシップを定義している場合、これは基本のEloquentモデルクラスに現在存在するcasts
メソッドと競合する可能性があります。
カラムの変更
影響の可能性: 高
カラムを変更する際は、変更後に保持したいすべての修飾子を明示的にカラム定義に含める必要があります。欠落している属性は削除されます。たとえば、unsigned
、default
、およびcomment
属性を保持するには、カラムを変更する際に各修飾子を明示的に呼び出す必要があります。たとえそれらの属性が以前のマイグレーションによってカラムに割り当てられていたとしてもです。
たとえば、votes
カラムをunsigned
、default
、comment
属性で作成するマイグレーションがあるとします:
Schema::create('users', function (Blueprint $table) {
$table->integer('votes')->unsigned()->default(1)->comment('The vote count');
});
その後、カラムをnullable
に変更するマイグレーションを書きます:
Schema::table('users', function (Blueprint $table) {
$table->integer('votes')->nullable()->change();
});
Laravel 10では、このマイグレーションはカラムのunsigned
、default
、comment
属性を保持します。しかし、Laravel 11では、マイグレーションは以前にカラムに定義されていたすべての属性も含める必要があります。そうでないと、それらは削除されます:
Schema::table('users', function (Blueprint $table) {
$table->integer('votes')
->unsigned()
->default(1)
->comment('The vote count')
->nullable()
->change();
});
``````php
// Add an index...
$table->bigIncrements('id')->primary()->change();
// Drop an index...
$table->char('postal_code', 10)->unique(false)->change();
`
カラムの既存の属性を保持するためにアプリケーション内のすべての「変更」マイグレーションを更新したくない場合は、単にマイグレーションを圧縮する:
php artisan schema:dump
マイグレーションが圧縮されると、Laravelはアプリケーションのスキーマファイルを使用してデータベースを「マイグレーション」し、その後に保留中のマイグレーションを実行します。
浮動小数点型
影響の可能性: 高
`````double`````カラム型は、合計桁数と小数点以下の桁数を持たない`````DOUBLE`````相当のカラムを作成します。これは標準SQL構文です。したがって、`````$total`````および`````$places`````の引数を削除できます:
``````php
$table->double('amount');
`
``````php
$table->float('amount', precision: 53);
`
``````php
$table->decimal('amount', total: 8, places: 2)->unsigned();
$table->double('amount')->unsigned();
$table->float('amount', precision: 53)->unsigned();
`
専用MariaDBドライバー
影響の可能性: 非常に低
MariaDBデータベースに接続する際に常にMySQLドライバーを使用するのではなく、Laravel 11はMariaDB用の専用データベースドライバーを追加します。
アプリケーションがMariaDBデータベースに接続する場合、将来的にMariaDB特有の機能を利用するために新しいmariadb
ドライバーに接続設定を更新できます:
'driver' => 'mariadb',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
// ...
現在、新しいMariaDBドライバーは、1つの例外を除いて、現在のMySQLドライバーのように動作します。uuid
スキーマビルダーメソッドは、char(36)
カラムの代わりにネイティブUUIDカラムを作成します。
既存のマイグレーションがuuid
スキーマビルダーメソッドを利用していて、新しいmariadb
データベースドライバーを使用することを選択した場合、uuid
メソッドのマイグレーションの呼び出しをchar
に更新して、破壊的変更や予期しない動作を避ける必要があります:
Schema::table('users', function (Blueprint $table) {
$table->char('uuid', 36);
// ...
});
空間型
影響の可能性: 低
データベースマイグレーションの空間カラム型は、すべてのデータベースで一貫性を持つように書き直されました。したがって、マイグレーションからpoint
、lineString
、polygon
、geometryCollection
、multiPoint
、multiLineString
、multiPolygon
、multiPolygonZ
メソッドを削除し、geometry
またはgeography
メソッドを使用できます:
$table->geometry('shapes');
$table->geography('coordinates');
MySQL、MariaDB、およびPostgreSQLのカラムに格納される値の型または空間参照システム識別子を明示的に制限するには、subtype
およびsrid
をメソッドに渡すことができます:
$table->geometry('dimension', subtype: 'polygon', srid: 0);
$table->geography('latitude', subtype: 'point', srid: 4326);
PostgreSQL文法のisGeometry
およびprojection
カラム修飾子は、それに応じて削除されました。
Doctrine DBALの削除
影響の可能性: 低
以下のDoctrine DBAL関連のクラスとメソッドが削除されました。Laravelはもはやこのパッケージに依存しておらず、以前はカスタム型が必要だったさまざまなカラム型の適切な作成と変更のためにカスタムDoctrine型を登録する必要はありません:
Illuminate\Database\Schema\Builder::$alwaysUsesNativeSchemaOperationsIfPossible
クラスプロパティIlluminate\Database\Schema\Builder::useNativeSchemaOperationsIfPossible()
メソッドIlluminate\Database\Connection::usingNativeSchemaOperations()
メソッドIlluminate\Database\Connection::isDoctrineAvailable()
メソッドIlluminate\Database\Connection::getDoctrineConnection()
メソッドIlluminate\Database\Connection::getDoctrineSchemaManager()
メソッドIlluminate\Database\Connection::getDoctrineColumn()
メソッドIlluminate\Database\Connection::registerDoctrineType()
メソッドIlluminate\Database\DatabaseManager::registerDoctrineType()
メソッドIlluminate\Database\PDO
ディレクトリIlluminate\Database\DBAL\TimestampType
クラスIlluminate\Database\Schema\Grammars\ChangeColumn
クラスIlluminate\Database\Schema\Grammars\RenameColumn
クラスIlluminate\Database\Schema\Grammars\Grammar::getDoctrineTableDiff()
メソッド
さらに、アプリケーションのdatabase
設定ファイルでdbal.types
を介してカスタムDoctrine型を登録する必要はなくなりました。
以前にDoctrine DBALを使用してデータベースとその関連テーブルを検査していた場合は、Laravelの新しいネイティブスキーマメソッド(Schema::getTables()
、Schema::getColumns()
、Schema::getIndexes()
、Schema::getForeignKeys()
など)を代わりに使用できます。
非推奨のスキーマメソッド
影響の可能性: 非常に低
非推奨のDoctrineベースのSchema::getAllTables()
、Schema::getAllViews()
、およびSchema::getAllTypes()
メソッドは、新しいLaravelネイティブのSchema::getTables()
、Schema::getViews()
、およびSchema::getTypes()
メソッドに置き換えられました。
PostgreSQLおよびSQL Serverを使用する場合、新しいスキーマメソッドは三部参照(例: database.schema.table
)を受け入れません。したがって、connection()
を使用してデータベースを宣言する必要があります:
Schema::connection('database')->hasTable('schema.table');
Schema Builder getColumnType() メソッド
影響の可能性: 非常に低
Schema::getColumnType()
メソッドは、常に指定されたカラムの実際の型を返すようになりました。Doctrine DBALの同等の型ではありません。
データベース接続インターフェース
影響の可能性: 非常に低
``````php
public function scalar($query, $bindings = [], $useReadPdo = true);
`
日付
Carbon 3
影響の可能性: 中
Laravel 11はCarbon 2とCarbon 3の両方をサポートしています。Carbonは、Laravelおよびエコシステム全体で広く利用されている日付操作ライブラリです。Carbon 3にアップグレードする場合、diffIn*
メソッドが浮動小数点数を返し、時間の方向を示すために負の値を返す可能性があることに注意してください。これはCarbon 2からの重要な変更です。これらの変更やその他の変更を処理する方法についての詳細情報は、Carbonの変更ログを確認してください。
メール
Mailer契約
影響の可能性: 非常に低
``````php
public function sendNow($mailable, array $data = [], $callback = null);
`
パッケージ
アプリケーションへのサービスプロバイダーの公開
影響の可能性: 非常に低
アプリケーションのapp/Providers
ディレクトリにサービスプロバイダーを手動で公開し、サービスプロバイダーを登録するためにアプリケーションのconfig/app.php
設定ファイルを手動で変更したLaravelパッケージを作成した場合は、パッケージを更新して新しいServiceProvider::addProviderToBootstrapFile
メソッドを利用する必要があります。
addProviderToBootstrapFile
メソッドは、providers
配列が新しいLaravel 11アプリケーションのconfig/app.php
設定ファイル内に存在しないため、公開したサービスプロバイダーをアプリケーションのbootstrap/providers.php
ファイルに自動的に追加します。
use Illuminate\Support\ServiceProvider;
ServiceProvider::addProviderToBootstrapFile(Provider::class);
キュー
BatchRepositoryインターフェース
影響の可能性: 非常に低
``````php
public function rollBack();
`
データベーストランザクション内の同期ジョブ
影響の可能性: 非常に低
以前は、同期ジョブ(sync
キュードライバーを使用するジョブ)は、after_commit
接続の設定オプションがtrue
に設定されているか、ジョブでafterCommit
メソッドが呼び出されているかに関係なく、即座に実行されていました。
Laravel 11では、同期キュージョブはキュー接続またはジョブの「コミット後」設定を尊重するようになります。
レート制限
毎秒レート制限
影響の可能性: 中
Laravel 11は、毎分の粒度に制限されるのではなく、毎秒のレート制限をサポートします。この変更に関連するさまざまな潜在的な破壊的変更に注意する必要があります。
``````php
new GlobalLimit($attempts, 2 * 60);
`
``````php
new Limit($key, $attempts, 2 * 60);
`
`````Illuminate\Queue\Middleware\ThrottlesExceptions`````および`````Illuminate\Queue\Middleware\ThrottlesExceptionsWithRedis`````クラスのコンストラクタは、分の代わりに秒を受け入れるようになりました:
``````php
new ThrottlesExceptions($attempts, 2 * 60);
new ThrottlesExceptionsWithRedis($attempts, 2 * 60);
`
Cashier Stripe
Cashier Stripeの更新
影響の可能性: 高
Laravel 11はもはやCashier Stripe 14.xをサポートしていません。したがって、アプリケーションのLaravel Cashier Stripe依存関係を^15.0
に更新する必要があります。
Cashier Stripe 15.0はもはや自分のマイグレーションディレクトリからマイグレーションを自動的に読み込むことはありません。代わりに、次のコマンドを実行してCashier Stripeのマイグレーションをアプリケーションに公開する必要があります:
php artisan vendor:publish --tag=cashier-migrations
追加の破壊的変更については、完全なCashier Stripeアップグレードガイドを確認してください。
Spark (Stripe)
Spark Stripeの更新
影響の可能性: 高
Laravel 11はもはやLaravel Spark Stripe 4.xをサポートしていません。したがって、アプリケーションのLaravel Spark Stripe依存関係を^5.0
に更新する必要があります。
Spark Stripe 5.0はもはや自分のマイグレーションディレクトリからマイグレーションを自動的に読み込むことはありません。代わりに、次のコマンドを実行してSpark Stripeのマイグレーションをアプリケーションに公開する必要があります:
php artisan vendor:publish --tag=spark-migrations
追加の破壊的変更については、完全なSpark Stripeアップグレードガイドを確認してください。
Passport
Passportの更新
影響の可能性: 高
Laravel 11はもはやLaravel Passport 11.xをサポートしていません。したがって、アプリケーションのLaravel Passport依存関係を^12.0
に更新する必要があります。
Passport 12.0はもはや自分のマイグレーションディレクトリからマイグレーションを自動的に読み込むことはありません。代わりに、次のコマンドを実行してPassportのマイグレーションをアプリケーションに公開する必要があります:
php artisan vendor:publish --tag=passport-migrations
さらに、パスワードグラントタイプはデフォルトで無効になっています。アプリケーションのAppServiceProvider
メソッドのboot
メソッド内でenablePasswordGrant
メソッドを呼び出すことで有効にできます:
public function boot(): void
{
Passport::enablePasswordGrant();
}
Sanctum
Sanctumの更新
影響の可能性: 高
Laravel 11はもはやLaravel Sanctum 3.xをサポートしていません。したがって、アプリケーションのLaravel Sanctum依存関係を^4.0
に更新する必要があります。
Sanctum 4.0はもはや自分のマイグレーションディレクトリからマイグレーションを自動的に読み込むことはありません。代わりに、次のコマンドを実行してSanctumのマイグレーションをアプリケーションに公開する必要があります:
php artisan vendor:publish --tag=sanctum-migrations
その後、アプリケーションのconfig/sanctum.php
設定ファイルで、authenticate_session
、encrypt_cookies
、およびvalidate_csrf_token
ミドルウェアへの参照を次のように更新する必要があります:
'middleware' => [
'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
],
Telescope
Telescopeの更新
影響の可能性: 高
Laravel 11はもはやLaravel Telescope 4.xをサポートしていません。したがって、アプリケーションのLaravel Telescope依存関係を^5.0
に更新する必要があります。
Telescope 5.0はもはや自分のマイグレーションディレクトリからマイグレーションを自動的に読み込むことはありません。代わりに、次のコマンドを実行してTelescopeのマイグレーションをアプリケーションに公開する必要があります:
php artisan vendor:publish --tag=telescope-migrations
Spatie Onceパッケージ
影響の可能性: 中
Laravel 11は、指定されたクロージャが1回だけ実行されることを保証する独自のonce
関数を提供します。したがって、アプリケーションがspatie/once
パッケージに依存している場合は、競合を避けるためにアプリケーションのcomposer.json
ファイルからそれを削除する必要があります。
その他
また、laravel/laravel
のGitHubリポジトリの変更を確認することをお勧めします。これらの変更の多くは必須ではありませんが、アプリケーションと同期を保つためにこれらのファイルを保持したい場合があります。これらの変更の一部はこのアップグレードガイドでカバーされますが、設定ファイルやコメントの変更など、他の変更はカバーされません。 GitHub比較ツールを使用して変更を簡単に確認し、重要な更新を選択できます。