高影響の変更

中影響の変更

低影響の変更

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はもはや自動的に自分のマイグレーションディレクトリからマイグレーションを読み込むことはありません。したがって、次のコマンドを実行して、これらのマイグレーションをアプリケーションに公開する必要があります:

  1. php artisan vendor:publish --tag=cashier-migrations
  2. php artisan vendor:publish --tag=passport-migrations
  3. php artisan vendor:publish --tag=sanctum-migrations
  4. php artisan vendor:publish --tag=spark-migrations
  5. php artisan vendor:publish --tag=telescope-migrations

さらに、これらのパッケージのアップグレードガイドを確認して、追加の破壊的変更について把握しておく必要があります:

Laravelインストーラーを手動でインストールした場合、Composerを介してインストーラーを更新する必要があります:

  1. 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プロパティを介してフィールドの名前を指定する必要があります:

  1. protected $authPasswordName = 'custom_password_field';

または、アプリケーションのconfig/hashing.php設定ファイルにrehash_on_loginオプションを追加することで、パスワードの再ハッシュを無効にすることができます:

  1. 'rehash_on_login' => false,

UserProvider契約

影響の可能性: 低

  1. アプリケーションまたはパッケージがこのインターフェースを実装するクラスを定義している場合は、新しい`````rehashPasswordIfRequired`````メソッドを実装に追加する必要があります。参照実装は`````Illuminate\Auth\EloquentUserProvider`````クラス内にあります:
  2. ``````php
  3. public function rehashPasswordIfRequired(Authenticatable $user, array $credentials, bool $force = false);
  4. `

Authenticatable契約

影響の可能性: 低

  1. アプリケーションまたはパッケージがこのインターフェースを実装するクラスを定義している場合は、新しい`````getAuthPasswordName`````メソッドを実装に追加する必要があります:
  2. ``````php
  3. public function getAuthPasswordName()
  4. {
  5. return 'password';
  6. }
  7. `

Laravelに含まれるデフォルトのUserモデルは、このメソッドがIlluminate\Auth\Authenticatableトレイト内に含まれているため、自動的にこのメソッドを受け取ります。

AuthenticationExceptionクラス

影響の可能性: 非常に低

  1. ``````php
  2. if ($e instanceof AuthenticationException) {
  3. $path = $e->redirectTo($request);
  4. }
  5. `

キャッシュ

キャッシュキーのプレフィックス

影響の可能性: 非常に低

以前は、DynamoDB、Memcached、またはRedisキャッシュストアのためにキャッシュキーのプレフィックスが定義されている場合、Laravelはプレフィックスに:を追加していました。Laravel 11では、キャッシュキーのプレフィックスは:サフィックスを受け取りません。以前のプレフィックス動作を維持したい場合は、キャッシュキーのプレフィックスに:サフィックスを手動で追加できます。

コレクション

Enumerable契約

影響の可能性: 低

  1. ``````php
  2. public function dump(...$args);
  3. `

データベース

SQLite 3.26.0以上

影響の可能性: 高

アプリケーションがSQLiteデータベースを利用している場合、SQLite 3.26.0以上が必要です。

Eloquentモデルキャストメソッド

影響の可能性: 低

基本のEloquentモデルクラスは、属性キャストの定義をサポートするためにcastsメソッドを定義しました。アプリケーションのモデルの1つがcastsリレーションシップを定義している場合、これは基本のEloquentモデルクラスに現在存在するcastsメソッドと競合する可能性があります。

カラムの変更

影響の可能性: 高

カラムを変更する際は、変更後に保持したいすべての修飾子を明示的にカラム定義に含める必要があります。欠落している属性は削除されます。たとえば、unsigneddefault、およびcomment属性を保持するには、カラムを変更する際に各修飾子を明示的に呼び出す必要があります。たとえそれらの属性が以前のマイグレーションによってカラムに割り当てられていたとしてもです。

たとえば、votesカラムをunsigneddefaultcomment属性で作成するマイグレーションがあるとします:

  1. Schema::create('users', function (Blueprint $table) {
  2. $table->integer('votes')->unsigned()->default(1)->comment('The vote count');
  3. });

その後、カラムをnullableに変更するマイグレーションを書きます:

  1. Schema::table('users', function (Blueprint $table) {
  2. $table->integer('votes')->nullable()->change();
  3. });

Laravel 10では、このマイグレーションはカラムのunsigneddefaultcomment属性を保持します。しかし、Laravel 11では、マイグレーションは以前にカラムに定義されていたすべての属性も含める必要があります。そうでないと、それらは削除されます:

  1. Schema::table('users', function (Blueprint $table) {
  2. $table->integer('votes')
  3. ->unsigned()
  4. ->default(1)
  5. ->comment('The vote count')
  6. ->nullable()
  7. ->change();
  8. });
  1. ``````php
  2. // Add an index...
  3. $table->bigIncrements('id')->primary()->change();
  4. // Drop an index...
  5. $table->char('postal_code', 10)->unique(false)->change();
  6. `

カラムの既存の属性を保持するためにアプリケーション内のすべての「変更」マイグレーションを更新したくない場合は、単にマイグレーションを圧縮する:

  1. php artisan schema:dump

マイグレーションが圧縮されると、Laravelはアプリケーションのスキーマファイルを使用してデータベースを「マイグレーション」し、その後に保留中のマイグレーションを実行します。

浮動小数点型

影響の可能性: 高

  1. `````double`````カラム型は、合計桁数と小数点以下の桁数を持たない`````DOUBLE`````相当のカラムを作成します。これは標準SQL構文です。したがって、`````$total`````および`````$places`````の引数を削除できます:
  2. ``````php
  3. $table->double('amount');
  4. `
  1. ``````php
  2. $table->float('amount', precision: 53);
  3. `
  1. ``````php
  2. $table->decimal('amount', total: 8, places: 2)->unsigned();
  3. $table->double('amount')->unsigned();
  4. $table->float('amount', precision: 53)->unsigned();
  5. `

専用MariaDBドライバー

影響の可能性: 非常に低

MariaDBデータベースに接続する際に常にMySQLドライバーを使用するのではなく、Laravel 11はMariaDB用の専用データベースドライバーを追加します。

アプリケーションがMariaDBデータベースに接続する場合、将来的にMariaDB特有の機能を利用するために新しいmariadbドライバーに接続設定を更新できます:

  1. 'driver' => 'mariadb',
  2. 'url' => env('DB_URL'),
  3. 'host' => env('DB_HOST', '127.0.0.1'),
  4. 'port' => env('DB_PORT', '3306'),
  5. // ...

現在、新しいMariaDBドライバーは、1つの例外を除いて、現在のMySQLドライバーのように動作します。uuidスキーマビルダーメソッドは、char(36)カラムの代わりにネイティブUUIDカラムを作成します。

既存のマイグレーションがuuidスキーマビルダーメソッドを利用していて、新しいmariadbデータベースドライバーを使用することを選択した場合、uuidメソッドのマイグレーションの呼び出しをcharに更新して、破壊的変更や予期しない動作を避ける必要があります:

  1. Schema::table('users', function (Blueprint $table) {
  2. $table->char('uuid', 36);
  3. // ...
  4. });

空間型

影響の可能性: 低

データベースマイグレーションの空間カラム型は、すべてのデータベースで一貫性を持つように書き直されました。したがって、マイグレーションからpointlineStringpolygongeometryCollectionmultiPointmultiLineStringmultiPolygonmultiPolygonZメソッドを削除し、geometryまたはgeographyメソッドを使用できます:

  1. $table->geometry('shapes');
  2. $table->geography('coordinates');

MySQL、MariaDB、およびPostgreSQLのカラムに格納される値の型または空間参照システム識別子を明示的に制限するには、subtypeおよびsridをメソッドに渡すことができます:

  1. $table->geometry('dimension', subtype: 'polygon', srid: 0);
  2. $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()を使用してデータベースを宣言する必要があります:

  1. Schema::connection('database')->hasTable('schema.table');

Schema Builder getColumnType() メソッド

影響の可能性: 非常に低

Schema::getColumnType()メソッドは、常に指定されたカラムの実際の型を返すようになりました。Doctrine DBALの同等の型ではありません。

データベース接続インターフェース

影響の可能性: 非常に低

  1. ``````php
  2. public function scalar($query, $bindings = [], $useReadPdo = true);
  3. `

日付

Carbon 3

影響の可能性: 中

Laravel 11はCarbon 2とCarbon 3の両方をサポートしています。Carbonは、Laravelおよびエコシステム全体で広く利用されている日付操作ライブラリです。Carbon 3にアップグレードする場合、diffIn*メソッドが浮動小数点数を返し、時間の方向を示すために負の値を返す可能性があることに注意してください。これはCarbon 2からの重要な変更です。これらの変更やその他の変更を処理する方法についての詳細情報は、Carbonの変更ログを確認してください。

メール

Mailer契約

影響の可能性: 非常に低

  1. ``````php
  2. public function sendNow($mailable, array $data = [], $callback = null);
  3. `

パッケージ

アプリケーションへのサービスプロバイダーの公開

影響の可能性: 非常に低

アプリケーションのapp/Providersディレクトリにサービスプロバイダーを手動で公開し、サービスプロバイダーを登録するためにアプリケーションのconfig/app.php設定ファイルを手動で変更したLaravelパッケージを作成した場合は、パッケージを更新して新しいServiceProvider::addProviderToBootstrapFileメソッドを利用する必要があります。

addProviderToBootstrapFileメソッドは、providers配列が新しいLaravel 11アプリケーションのconfig/app.php設定ファイル内に存在しないため、公開したサービスプロバイダーをアプリケーションのbootstrap/providers.phpファイルに自動的に追加します。

  1. use Illuminate\Support\ServiceProvider;
  2. ServiceProvider::addProviderToBootstrapFile(Provider::class);

キュー

BatchRepositoryインターフェース

影響の可能性: 非常に低

  1. ``````php
  2. public function rollBack();
  3. `

データベーストランザクション内の同期ジョブ

影響の可能性: 非常に低

以前は、同期ジョブ(syncキュードライバーを使用するジョブ)は、after_commit接続の設定オプションがtrueに設定されているか、ジョブでafterCommitメソッドが呼び出されているかに関係なく、即座に実行されていました。

Laravel 11では、同期キュージョブはキュー接続またはジョブの「コミット後」設定を尊重するようになります。

レート制限

毎秒レート制限

影響の可能性: 中

Laravel 11は、毎分の粒度に制限されるのではなく、毎秒のレート制限をサポートします。この変更に関連するさまざまな潜在的な破壊的変更に注意する必要があります。

  1. ``````php
  2. new GlobalLimit($attempts, 2 * 60);
  3. `
  1. ``````php
  2. new Limit($key, $attempts, 2 * 60);
  3. `
  1. `````Illuminate\Queue\Middleware\ThrottlesExceptions`````および`````Illuminate\Queue\Middleware\ThrottlesExceptionsWithRedis`````クラスのコンストラクタは、分の代わりに秒を受け入れるようになりました:
  2. ``````php
  3. new ThrottlesExceptions($attempts, 2 * 60);
  4. new ThrottlesExceptionsWithRedis($attempts, 2 * 60);
  5. `

Cashier Stripe

Cashier Stripeの更新

影響の可能性: 高

Laravel 11はもはやCashier Stripe 14.xをサポートしていません。したがって、アプリケーションのLaravel Cashier Stripe依存関係を^15.0に更新する必要があります。

Cashier Stripe 15.0はもはや自分のマイグレーションディレクトリからマイグレーションを自動的に読み込むことはありません。代わりに、次のコマンドを実行してCashier Stripeのマイグレーションをアプリケーションに公開する必要があります:

  1. 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のマイグレーションをアプリケーションに公開する必要があります:

  1. 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のマイグレーションをアプリケーションに公開する必要があります:

  1. php artisan vendor:publish --tag=passport-migrations

さらに、パスワードグラントタイプはデフォルトで無効になっています。アプリケーションのAppServiceProviderメソッドのbootメソッド内でenablePasswordGrantメソッドを呼び出すことで有効にできます:

  1. public function boot(): void
  2. {
  3. Passport::enablePasswordGrant();
  4. }

Sanctum

Sanctumの更新

影響の可能性: 高

Laravel 11はもはやLaravel Sanctum 3.xをサポートしていません。したがって、アプリケーションのLaravel Sanctum依存関係を^4.0に更新する必要があります。

Sanctum 4.0はもはや自分のマイグレーションディレクトリからマイグレーションを自動的に読み込むことはありません。代わりに、次のコマンドを実行してSanctumのマイグレーションをアプリケーションに公開する必要があります:

  1. php artisan vendor:publish --tag=sanctum-migrations

その後、アプリケーションのconfig/sanctum.php設定ファイルで、authenticate_sessionencrypt_cookies、およびvalidate_csrf_tokenミドルウェアへの参照を次のように更新する必要があります:

  1. 'middleware' => [
  2. 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
  3. 'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
  4. 'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
  5. ],

Telescope

Telescopeの更新

影響の可能性: 高

Laravel 11はもはやLaravel Telescope 4.xをサポートしていません。したがって、アプリケーションのLaravel Telescope依存関係を^5.0に更新する必要があります。

Telescope 5.0はもはや自分のマイグレーションディレクトリからマイグレーションを自動的に読み込むことはありません。代わりに、次のコマンドを実行してTelescopeのマイグレーションをアプリケーションに公開する必要があります:

  1. php artisan vendor:publish --tag=telescope-migrations

Spatie Onceパッケージ

影響の可能性: 中

Laravel 11は、指定されたクロージャが1回だけ実行されることを保証する独自のonce関数を提供します。したがって、アプリケーションがspatie/onceパッケージに依存している場合は、競合を避けるためにアプリケーションのcomposer.jsonファイルからそれを削除する必要があります。

その他

また、laravel/laravelGitHubリポジトリの変更を確認することをお勧めします。これらの変更の多くは必須ではありませんが、アプリケーションと同期を保つためにこれらのファイルを保持したい場合があります。これらの変更の一部はこのアップグレードガイドでカバーされますが、設定ファイルやコメントの変更など、他の変更はカバーされません。 GitHub比較ツールを使用して変更を簡単に確認し、重要な更新を選択できます。