Readouble

Laravel 11.x アップグレードガイド

影響度の高い変更High Impact Changes

影響度が中程度の変更Medium Impact Changes

影響度の低い変更Low Impact Changes

10.xから11.xへのアップグレードUpgrading To 11.0 From 10.x

アップグレード見積もり時間:15分Estimated Upgrade Time: 15 Minutes

lightbulb Note: 私たちは、互換性のない変更を可能な限りすべて文書化するよう努力しています。これらの互換性のない変更の一部はフレームワークの不明瞭な部分であり、こうした変更の一部が実際にあなたのアプリケーションに影響を与える可能性があります。時間を節約したいですか?Laravel Shift を使用すると、アプリケーションのアップグレードを自動化できます。[!NOTE]
We attempt to document every possible breaking change. Since some of these breaking changes are in obscure parts of the framework only a portion of these changes may actually affect your application. Want to save time? You can use Laravel Shift[https://laravelshift.com/] to help automate your application upgrades.

依存パッケージのアップデートUpdating Dependencies

影響の可能性: 高いLikelihood Of Impact: High

PHP8.2.0必須PHP 8.2.0 Required

Laravelは、PHP8.2.0以上が必要になりました。Laravel now requires PHP 8.2.0 or greater.

curl7.34.0必須curl 7.34.0 Required

LaravelのHTTPクライアントは、curl7.34.0以上が必要になりました。Laravel's HTTP client now requires curl 7.34.0 or greater.

Composerの依存パッケージComposer Dependencies

アプリケーションのcomposer.jsonファイルにある、以下の依存パッケージを更新してください。You should update the following dependencies in your application's composer.json file:

  • laravel/framework^11.0laravel/framework to ^11.0
  • nunomaduro/collision^8.1nunomaduro/collision to ^8.1
  • laravel/breeze^2.0へ(インストール済みの場合)laravel/breeze to ^2.0 (If installed)
  • laravel/cashier^15.0へ(インストール済みの場合)laravel/cashier to ^15.0 (If installed)
  • laravel/dusk^8.0へ(インストール済みの場合)laravel/dusk to ^8.0 (If installed)
  • laravel/jetstream^5.0へ(インストール済みの場合)laravel/jetstream to ^5.0 (If installed)
  • laravel/octane^2.3へ(インストール済みの場合)laravel/octane to ^2.3 (If installed)
  • laravel/passport^12.0へ(インストール済みの場合)laravel/passport to ^12.0 (If installed)
  • laravel/sanctum^4.0へ(インストール済みの場合)laravel/sanctum to ^4.0 (If installed)
  • laravel/scout^10.0へ(インストール済みの場合)laravel/scout to ^10.0 (If installed)
  • laravel/spark-stripe^5.0へ(インストール済みの場合)laravel/spark-stripe to ^5.0 (If installed)
  • laravel/telescope^5.0へ(インストール済みの場合)laravel/telescope to ^5.0 (If installed)
  • livewire/livewire^3.4へ(インストール済みの場合)livewire/livewire to ^3.4 (If installed)
  • inertiajs/inertia-laravel^1.0へ(インストール済みの場合)inertiajs/inertia-laravel to ^1.0 (If installed)

アプリケーションがLaravel Cashier Stripe、Passport、Sanctum、Spark Stripe、Telescopeを使用している場合、それらのマイグレーションをアプリケーションへリソース公開する必要があります。Cashier Stripe、Passport、Sanctum、Spark Stripe、Telescopeは、それ自体のマイグレーションディレクトリから自動的にマイグレーションをロードしなくなりました。そのため、以下のコマンドを実行して、アプリケーションへマイグレーションをリソース公開する必要があります。If your application is using Laravel Cashier Stripe, Passport, Sanctum, Spark Stripe, or Telescope, you will need to publish their migrations to your application. Cashier Stripe, Passport, Sanctum, Spark Stripe, and Telescope no longer automatically load migrations from their own migrations directory. Therefore, you should run the following command to publish their migrations to your application:

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

さらに、これらの各パッケージのアップグレードガイドを確認して、追加の変更点を確実に把握してください。In addition, you should review the upgrade guides for each of these packages to ensure you are aware of any additional breaking changes:

Laravelインストーラを自分でインストールした場合は、Composer経由でインストーラを更新してください:If you have manually installed the Laravel installer, you should update the installer via Composer:

composer global require laravel/installer:^5.6

最後に、Laravelがこのパッケージに依存しなくなったので、doctrine/dbal Composer依存パッケージを削除してください。Finally, you may remove the doctrine/dbal Composer dependency if you have previously added it to your application, as Laravel is no longer dependent on this package.

アプリケーション構造Application Structure

Laravel11では、新しいデフォルトのアプリケーション構造が導入され、デフォルトのファイルが少なくなっています。つまり、新しいLaravelアプリケーションには、サービスプロバイダ、ミドルウェア、設定ファイルの数が少なくなっています。Laravel 11 introduces a new default application structure with fewer default files. Namely, new Laravel applications contain fewer service providers, middleware, and configuration files.

しかし、Laravel10アプリケーションをLaravel11にアップグレードするときに、アプリケーション構造の移行を試みることはお勧めしません。Laravel11はLaravel10のアプリケーション構造もサポートするように注意深く調整してあります。However, we do not recommend that Laravel 10 applications upgrading to Laravel 11 attempt to migrate their application structure, as Laravel 11 has been carefully tuned to also support the Laravel 10 application structure.

認証Authentication

パスワードの再ハッシュPassword Rehashing

影響の可能性: 低いLikelihood Of Impact: Low

Laravel11は、パスワードを最後にハッシュ化した後、ハッシュ化アルゴリズムの"work factor"が更新された場合、認証時にユーザーのパスワードを自動的に再ハッシュ化します。Laravel 11 will automatically rehash your user's passwords during authentication if your hashing algorithm's "work factor" has been updated since the password was last hashed.

通常、これはアプリケーションに支障をきたしません。しかし、Userモデルの「password」フィールドに、password以外の名前がある場合は、モデルのauthPasswordNameプロパティでフィールド名を指定する必要があります。Typically, this should not disrupt your application; however, if your User model's "password" field has a name other than password, you should specify the field's name via the model's authPasswordName property:

protected $authPasswordName = 'custom_password_field';

あるいは、アプリケーションのconfig/hashing.php設定ファイルで、rehash_on_loginオプションを追加して、パスワードの再ハッシュを無効にすることもできます。Alternatively, you may disable password rehashing by adding the rehash_on_login option to your application's config/hashing.php configuration file:

'rehash_on_login' => false,

UserProvider契約The UserProvider Contract

影響の可能性: 低いLikelihood Of Impact: Low

Illuminate\Contracts\Auth\UserProviderに新しいrehashPasswordIfRequiredメソッドを追加しました。このメソッドは、アプリケーションのハッシュアルゴリズムのワークファクタが変更されたときに、ユーザーのパスワードを再ハッシュしてストレージに保存する役割を担っています。The Illuminate\Contracts\Auth\UserProvider contract has received a new rehashPasswordIfRequired method. This method is responsible for re-hashing and storing the user's password in storage when the application's hashing algorithm work factor has changed.

アプリケーションやパッケージがこのインタフェースを実装するクラスを定義している場合、新しいrehashPasswordIfRequiredメソッドを追加で実装する必要があります。参照になる実装は、Illuminate\Auth\EloquentUserProviderクラス内にあります。If your application or package defines a class that implements this interface, you should add the new rehashPasswordIfRequired method to your implementation. A reference implementation can be found within the Illuminate\Auth\EloquentUserProvider class:

public function rehashPasswordIfRequired(Authenticatable $user, array $credentials, bool $force = false);

Authenticatable契約The Authenticatable Contract

影響の可能性: 低いLikelihood Of Impact: Low

Illuminate\Contracts\Auth\Authenticatable契約に、新しくgetAuthPasswordNameメソッドを追加しました。このメソッドは、認証可能エンティティのパスワードカラムの名前を返す役割を負っています。The Illuminate\Contracts\Auth\Authenticatable contract has received a new getAuthPasswordName method. This method is responsible for returning the name of your authenticatable entity's password column.

アプリケーションやパッケージがこのインターフェイスを実装したクラスを定義している場合は、新しい getAuthPasswordNameメソッドを実装に追加する必要があります:If your application or package defines a class that implements this interface, you should add the new getAuthPasswordName method to your implementation:

public function getAuthPasswordName()
{
    return 'password';
}

Laravelに含まれるデフォルトのUserモデルでは、このメソッドがIlluminate\Auth\Authenticatableトレイトに含まれているため、自動的にこのメソッドを受け取ります。The default User model included with Laravel receives this method automatically since the method is included within the Illuminate\Auth\Authenticatable trait.

AuthenticationExceptionクラスThe AuthenticationException Class

影響の可能性: かなり低いLikelihood Of Impact: Very Low

Illuminate\Auth\AuthenticationExceptionクラスのredirectToメソッドは、最初の引数にIlluminate\Http\Requestインスタンスが必要になりました。この例外を手作業でキャッチし、redirectToメソッドを呼び出している場合は、それに応じてコードを更新してください。The redirectTo method of the Illuminate\Auth\AuthenticationException class now requires an Illuminate\Http\Request instance as its first argument. If you are manually catching this exception and calling the redirectTo method, you should update your code accordingly:

if ($e instanceof AuthenticationException) {
    $path = $e->redirectTo($request);
}

登録時のメール確認通知Email Verification Notification on Registration

影響の可能性: かなり低いLikelihood Of Impact: Very Low

SendEmailVerificationNotificationリスナをアプリケーションのEventServiceProviderに登録していない場合、自動的にRegisteredイベントへ登録するようにしました。もし、アプリケーションのEventServiceProviderでこのリスナを登録せず、Laravelに自動登録させたくない場合は、アプリケーションのEventServiceProviderの中に、空のconfigureEmailVerificationメソッドを定義してください。The SendEmailVerificationNotification listener is now automatically registered for the Registered event if it is not already registered by your application's EventServiceProvider. If your application's EventServiceProvider does not register this listener and you do not want Laravel to automatically register it for you, you should define an empty configureEmailVerification method in your application's EventServiceProvider:

protected function configureEmailVerification()
{
    // ...
}

キャッシュCache

Cache Key PrefixesCache Key Prefixes

影響の可能性: かなり低いLikelihood Of Impact: Very Low

以前は、DynamoDB、Memcached、Redisのキャッシュストアで、キャッシュキーの接頭辞を定義した場合、Laravelは接頭辞へ:を追加していました。Laravel11では、キャッシュキーの接頭辞へ:を追加しなくなりました。以前の接頭辞動作を維持したい場合は、キャッシュキーの接頭辞の最後に手作業で:を追加してください。Previously, if a cache key prefix was defined for the DynamoDB, Memcached, or Redis cache stores, Laravel would append a : to the prefix. In Laravel 11, the cache key prefix does not receive the : suffix. If you would like to maintain the previous prefixing behavior, you can manually add the : suffix to your cache key prefix.

コレクションCollections

Enumerable契約The Enumerable Contract

影響の可能性: 低いLikelihood Of Impact: Low

Illuminate\Support\Enumerable契約のdumpメソッドを更新し、...$args可変長引数を取るようにしました。このインタフェースを実装している場合は、これに合わせて実装を更新する必要があります。The dump method of the Illuminate\Support\Enumerable contract has been updated to accept a variadic ...$args argument. If you are implementing this interface you should update your implementation accordingly:

public function dump(...$args);

データベースDatabase

SQLite3.26.0以上SQLite 3.26.0+

影響の可能性: 高いLikelihood Of Impact: High

アプリケーションでSQLiteデータベースを使用する場合は、SQLite3.26.0以上が必要です。If your application is utilizing an SQLite database, SQLite 3.26.0 or greater is required.

EloquentモデルのcastsメソッドEloquent Model casts Method

影響の可能性: 低いLikelihood Of Impact: Low

Eloquentモデルのベースクラスは、属性キャストの定義をサポートするため、castsメソッドを定義するようになりました。もし、アプリケーションのモデルでcastsリレーションを定義している場合、Eloquentベースモデルクラスのcastsメソッドと衝突する可能性があります。The base Eloquent model class now defines a casts method in order to support the definition of attribute casts. If one of your application's models is defining a casts relationship, it may conflict with the casts method now present on the base Eloquent model class.

カラムの変更Modifying Columns

影響の可能性: 高いLikelihood Of Impact: High

カラムを変更する場合、変更後もカラム定義を維持したいすべての修飾子を明示的に含める必要があります。足りない属性は削除されます。例えば、unsigned属性、default属性、comment属性を保持するためには、カラムを変更する際にそれぞれの修飾子を明示的に呼び出す必要があります。When modifying a column, you must now explicitly include all the modifiers you want to keep on the column definition after it is changed. Any missing attributes will be dropped. For example, to retain the unsigned, default, and comment attributes, you must call each modifier explicitly when changing the column, even if those attributes have been assigned to the column by a previous migration.

例えば、unsigneddefaultcomment属性を持つ votesカラムを作成するマイグレーションがあるとします。For example, imagine you have a migration that creates a votes column with the unsigned, default, and comment attributes:

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

その後で、カラムをnullableに変更するマイグレーションを書いてみましょう。Later, you write a migration that changes the column to be nullable as well:

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

Laravel10では、このマイグレーションはカラムのunsigneddefaultcomment属性を保持していました。しかし、Laravel11からマイグレーションにはカラムに以前定義していた属性もすべて含める必要があります。含めなければ、それらを削除します。In Laravel 10, this migration would retain the unsigned, default, and comment attributes on the column. However, in Laravel 11, the migration must now also include all of the attributes that were previously defined on the column. Otherwise, they will be dropped:

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

changeメソッドはカラムのインデックスを変更しません。そのため、カラムを変更する際には、インデックス修飾子を使って明示的にインデックスを追加したり削除したりしてください。The change method does not change the indexes of the column. Therefore, you may use index modifiers to explicitly add or drop an index when modifying the column:

// インデックス追加
$table->bigIncrements('id')->primary()->change();

// インデックス削除
$table->char('postal_code', 10)->unique(false)->change();

既存カラムの属性を保持するために、アプリケーション内の既存の全「変更(change)」マイグレーションを更新したくない場合は、単純にマイグレーションを圧縮してください。If you do not want to update all of the existing "change" migrations in your application to retain the column's existing attributes, you may simply squash your migrations[/docs/{{version}}/migrations#squashing-migrations]:

php artisan schema:dump

一度マイグレーション圧縮したら、Laravelは保留中のマイグレーションを実行する前に、アプリケーションのスキーマファイルを使ってデータベースを「マイグレーション」します。Once your migrations have been squashed, Laravel will "migrate" the database using your application's schema file before running any pending migrations.

浮動小数点タイプFloating-Point Types

影響の可能性: 高いLikelihood Of Impact: High

doublefloatのマイグレーションカラム型は、すべてのデータベースで一貫性があるように書き直されました。The double and float migration column types have been rewritten to be consistent across all databases.

doubleカラムタイプは、合計桁数と桁数(小数点以下の桁数) を含まない、DOUBLEと同等のカラムを作成するようになりました。そのため、$total$placesの引数を削除してください。The double column type now creates a DOUBLE equivalent column without total digits and places (digits after decimal point), which is the standard SQL syntax. Therefore, you may remove the arguments for $total and $places:

$table->double('amount');

floatカラム型は、合計桁数と桁数(小数点以下の桁数)のないFLOAT相当の列を作成するようになりましたが、格納サイズを4バイトの単精度列または8バイトの倍精度列として決定するためのオプションの$precision指定があります。したがって、$total$placesの引数を削除し、オプションの$precisionをデータベースのドキュメントに従って目的の値に指定することができます。The float column type now creates a FLOAT equivalent column without total digits and places (digits after decimal point), but with an optional $precision specification to determine storage size as a 4-byte single-precision column or an 8-byte double-precision column. Therefore, you may remove the arguments for $total and $places and specify the optional $precision to your desired value and according to your database's documentation:

$table->float('amount', precision: 53);

unsignedDecimalunsignedDoubleunsignedFloatメソッドは削除しました。これは、これらのカラム型のunsigned修飾子がMySQLによって廃止され、他のデータベースシステムでは標準化されなかったからです。ただし、これらのカラム型に対して廃止されたunsigned属性を引き続き使用する場合は、unsignedメソッドをカラムの定義にチェーンできます。The unsignedDecimal, unsignedDouble, and unsignedFloat methods have been removed, as the unsigned modifier for these column types has been deprecated by MySQL, and was never standardized on other database systems. However, if you wish to continue using the deprecated unsigned attribute for these column types, you may chain the unsigned method onto the column's definition:

$table->decimal('amount', total: 8, places: 2)->unsigned();
$table->double('amount')->unsigned();
$table->float('amount', precision: 53)->unsigned();

MariaDB専用ドライバDedicated MariaDB Driver

影響の可能性: かなり低いLikelihood Of Impact: Very Low

Laravel11では、MariaDBデータベースに接続する際、常にMySQLドライバを利用しなくなり、MariaDB専用のデータベースドライバを追加しました。Instead of always utilizing the MySQL driver when connecting to MariaDB databases, Laravel 11 adds a dedicated database driver for MariaDB.

アプリケーションがMariaDBデータベースへ接続する場合、将来のMariaDB固有の機能を利用するために、接続設定を新しいmariadbドライバへ更新することができます。If your application connects to a MariaDB database, you may update the connection configuration to the new mariadb driver to benefit from MariaDB specific features in the future:

'driver' => 'mariadb',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
// ...

現在のところ、新しいMariaDBドライバは現在のMySQLドライバと同じように動作しますが、一つだけ例外があります。それは、uuidスキーマビルダメソッドは、char(36)カラムの代わりに、ネイティブのUUIDカラムを作成することです。Currently, the new MariaDB driver behaves like the current MySQL driver with one exception: the uuid schema builder method creates native UUID columns instead of char(36) columns.

既存のマイグレーションが、uuidスキーマビルダメソッドを使用していて、新しいmariadbデータベースドライバを使用する場合は、マイグレーションのuuidメソッドの呼び出しをcharに更新して、ブレイキングチェンジや想定外の振る舞いを防いでください。If your existing migrations utilize the uuid schema builder method and you choose to use the new mariadb database driver, you should update your migration's invocations of the uuid method to char to avoid breaking changes or unexpected behavior:

Schema::table('users', function (Blueprint $table) {
    $table->char('uuid', 36);

    // ...
});

空間タイプSpatial Types

影響の可能性: 低いLikelihood Of Impact: Low

データベースマイグレーションの空間カラムタイプは、すべてのデータベースに渡り一貫性があるように書き換えました。そのため、point,lineString,polygon,geometryCollection,multiPoint,multiLineString,multiPolygon,multiPolygonZメソッドをマイグレーションから削除し、代わりにgeometryまたはgeographyメソッドを使用してください。The spatial column types of database migrations have been rewritten to be consistent across all databases. Therefore, you may remove point, lineString, polygon, geometryCollection, multiPoint, multiLineString, multiPolygon, and multiPolygonZ methods from your migrations and use geometry or geography methods instead:

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

MySQL、MariaDB、PostgreSQLのカラムに格納する値の型や空間参照システムの識別子を明示的に制限するには、subtypesridをメソッドへ渡します。To explicitly restrict the type or the spatial reference system identifier for values stored in the column on MySQL, MariaDB, and PostgreSQL, you may pass the subtype and srid to the method:

$table->geometry('dimension', subtype: 'polygon', srid: 0);
$table->geography('latitude', subtype: 'point', srid: 4326);

これに伴い、PostgreSQL文法のisGeometryおよびprojectionカラム修飾子を削除しました。The isGeometry and projection column modifiers of the PostgreSQL grammar have been removed accordingly.

Doctrine DBALの削除Doctrine DBAL Removal

影響の可能性: 低いLikelihood Of Impact: Low

以下のリスト中のDoctrine DBAL関連のクラスとメソッドを削除しました。Laravelはこのパッケージに依存しなくなり、以前はカスタム型を必要としていたさまざまなカラム型の適切な作成と変更のために、Doctrineのカスタム型を登録する必要はなくなりました。The following list of Doctrine DBAL related classes and methods have been removed. Laravel is no longer dependent on this package and registering custom Doctrines types is no longer necessary for the proper creation and alteration of various column types that previously required custom types:

  • Illuminate\Database\Schema\Builder::$alwaysUsesNativeSchemaOperationsIfPossible class propertyIlluminate\Database\Schema\Builder::$alwaysUsesNativeSchemaOperationsIfPossible class property
  • Illuminate\Database\Schema\Builder::useNativeSchemaOperationsIfPossible() methodIlluminate\Database\Schema\Builder::useNativeSchemaOperationsIfPossible() method
  • Illuminate\Database\Connection::usingNativeSchemaOperations() methodIlluminate\Database\Connection::usingNativeSchemaOperations() method
  • Illuminate\Database\Connection::isDoctrineAvailable() methodIlluminate\Database\Connection::isDoctrineAvailable() method
  • Illuminate\Database\Connection::getDoctrineConnection() methodIlluminate\Database\Connection::getDoctrineConnection() method
  • Illuminate\Database\Connection::getDoctrineSchemaManager() methodIlluminate\Database\Connection::getDoctrineSchemaManager() method
  • Illuminate\Database\Connection::getDoctrineColumn() methodIlluminate\Database\Connection::getDoctrineColumn() method
  • Illuminate\Database\Connection::registerDoctrineType() methodIlluminate\Database\Connection::registerDoctrineType() method
  • Illuminate\Database\DatabaseManager::registerDoctrineType() methodIlluminate\Database\DatabaseManager::registerDoctrineType() method
  • Illuminate\Database\PDO directoryIlluminate\Database\PDO directory
  • Illuminate\Database\DBAL\TimestampType classIlluminate\Database\DBAL\TimestampType class
  • Illuminate\Database\Schema\Grammars\ChangeColumn classIlluminate\Database\Schema\Grammars\ChangeColumn class
  • Illuminate\Database\Schema\Grammars\RenameColumn classIlluminate\Database\Schema\Grammars\RenameColumn class
  • Illuminate\Database\Schema\Grammars\Grammar::getDoctrineTableDiff() methodIlluminate\Database\Schema\Grammars\Grammar::getDoctrineTableDiff() method

さらに、アプリケーションのdatabase設定ファイルで dbal.typesを使い、カスタムDoctrineの型を登録する必要はなくなりました。In addition, registering custom Doctrine types via dbal.types in your application's database configuration file is no longer required.

Doctrine DBALを使ってデータベースと関連テーブルを調べていたのであれば、代わりに Laravelの新しいネイティブスキーマメソッド (Schema::getTables()Schema::getColumns()Schema::getIndexes()Schema::getForeignKeys()など) を使用してください。If you were previously using Doctrine DBAL to inspect your database and its associated tables, you may use Laravel's new native schema methods (Schema::getTables(), Schema::getColumns(), Schema::getIndexes(), Schema::getForeignKeys(), etc.) instead.

非推奨のスキマメソッドDeprecated Schema Methods

影響の可能性: かなり低いLikelihood Of Impact: Very Low

Doctrineベースの非推奨であったSchema::getAllTables()Schema::getAllViews()Schema::getAllTypes()メソッドを削除し、新しいLaravelネイティブのSchema::getTables()Schema::getViews()Schema::getTypes()メソッドを使ってください。The deprecated, Doctrine based Schema::getAllTables(), Schema::getAllViews(), and Schema::getAllTypes() methods have been removed in favor of new Laravel native Schema::getTables(), Schema::getViews(), and Schema::getTypes() methods.

PostgreSQLとSQLServerを使用する場合、新しいスキーマメソッドはどれも3つの部分からなる参照(例えば database.schema.table)を受け付けません。したがって、代わりにconnection()を使用してデータベースを宣言する必要があります。When using PostgreSQL and SQL Server, none of the new schema methods will accept a three-part reference (e.g. database.schema.table). Therefore, you should use connection() to declare the database instead:

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

スキマビルダのgetColumnType()メソッドSchema Builder getColumnType() Method

影響の可能性: かなり低いLikelihood Of Impact: Very Low

Schema::getColumnType()メソッドは、Doctrine DBALと同等の型ではなく、常に指定カラムの実際の型を返すようになりました。The Schema::getColumnType() method now always returns actual type of the given column, not the Doctrine DBAL equivalent type.

データベース接続インターフェイスDatabase Connection Interface

影響の可能性: かなり低いLikelihood Of Impact: Very Low

Illuminate\Database\ConnectionInterfaceインターフェイスに、新しいscalarメソッドを追加しました。このインターフェイスの独自の実装を定義している場合は、scalarメソッドを実装に追加する必要があります。The Illuminate\Database\ConnectionInterface interface has received a new scalar method. If you are defining your own implementation of this interface, you should add the scalar method to your implementation:

public function scalar($query, $bindings = [], $useReadPdo = true);

日付Dates

Carbon3Carbon 3

影響の可能性: 中程度Likelihood Of Impact: Medium

Laravel11は、Carbon2とCarbon3の両方をサポートしています。Carbonは、Laravelやエコシステム全体のパッケージで広く利用されている日付操作ライブラリです。Carbon3にアップグレードする場合、diffIn*メソッドが浮動小数点数を返すようになり、時差を示す負の値を返す可能性があることに注意してください。Carbonの 変更履歴ドキュメントに、これやその他の変更点に対する処理の詳細が記載されています。Laravel 11 supports both Carbon 2 and Carbon 3. Carbon is a date manipulation library utilized extensively by Laravel and packages throughout the ecosystem. If you upgrade to Carbon 3, be aware that diffIn* methods now return floating-point numbers and may return negative values to indicate time direction, which is a significant change from Carbon 2. Review Carbon's change log[https://github.com/briannesbitt/Carbon/releases/tag/3.0.0] and documentation[https://carbon.nesbot.com/docs/#api-carbon-3] for detailed information on how to handle these and other changes.

メールMail

Mailer契約The Mailer Contract

影響の可能性: かなり低いLikelihood Of Impact: Very Low

Illuminate\Contracts\Mail\Mailer契約に新しいsendNowメソッドを追加しました。この契約を実装しているアプリケーションやパッケージは、新しくsendNowメソッドを実装に追加してください。The Illuminate\Contracts\Mail\Mailer contract has received a new sendNow method. If your application or package is manually implementing this contract, you should add the new sendNow method to your implementation:

public function sendNow($mailable, array $data = [], $callback = null);

パッケージPackages

アプリケーションへのサービスプロバイダのリソース公開Publishing Service Providers to the Application

影響の可能性: かなり低いLikelihood Of Impact: Very Low

アプリケーションのapp/Providersディレクトリに手作業でサービスプロバイダをリソース公開し、アプリケーションのconfig/app.php設定ファイルを手作業で修正してサービスプロバイダを登録していたLaravelパッケージを書いていた場合、新しいServiceProvider::addProviderToBootstrapFileメソッドを利用するように、パッケージを更新する必要があります。If you have written a Laravel package that manually publishes a service provider to the application's app/Providers directory and manually modifies the application's config/app.php configuration file to register the service provider, you should update your package to utilize the new ServiceProvider::addProviderToBootstrapFile method.

新しい Laravel11アプリケーションでは、config/app.php設定ファイル内にproviders配列が存在しないため、addProviderToBootstrapFileメソッドは、リソース公開したサービスプロバイダを自動的にアプリケーションのbootstrap/providers.phpファイルへ追加します。The addProviderToBootstrapFile method will automatically add the service provider you have published to the application's bootstrap/providers.php file, since the providers array does not exist within the config/app.php configuration file in new Laravel 11 applications.

use Illuminate\Support\ServiceProvider;

ServiceProvider::addProviderToBootstrapFile(Provider::class);

キューQueues

BatchRepositoryインターフェイスThe BatchRepository Interface

影響の可能性: かなり低いLikelihood Of Impact: Very Low

Illuminate\Bus\BatchRepositoryインターフェイスに新しいrollBackメソッドを追加しました。自分のパッケージやアプリケーションでこのインタフェースを実装している場合、このメソッドを実装に追加する必要があります。The Illuminate\Bus\BatchRepository interface has received a new rollBack method. If you are implementing this interface within your own package or application, you should add this method to your implementation:

public function rollBack();

データベーストランザクション中の同期ジョブSynchronous Jobs in Database Transactions

影響の可能性: かなり低いLikelihood Of Impact: Very Low

以前は、キュー接続のafter_commit設定オプションがtrueに設定されているか、ジョブに対してafterCommitメソッドが呼び出されているかに関係なく、同期ジョブ (syncキュードライバを使用するジョブ)すぐを即時に実行していました。Previously, synchronous jobs (jobs using the sync queue driver) would execute immediately, regardless of whether the after_commit configuration option of the queue connection was set to true or the afterCommit method was invoked on the job.

Laravel11では、同期キュージョブはキュー接続やジョブの「コミット後(after commit)」設定を尊重するようにしました。In Laravel 11, synchronous queue jobs will now respect the "after commit" configuration of the queue connection or job.

レート制限Rate Limiting

毎秒のレート制限Per-Second Rate Limiting

影響の可能性: 中程度Likelihood Of Impact: Medium

Laravel11では、これまで分単位のレート制限をサポートしていましたが、秒単位になりました。この変更に関連して、様々な潜在的なブレイキングチェンジに注意する必要があります。Laravel 11 supports per-second rate limiting instead of being limited to per-minute granularity. There are a variety of potential breaking changes you should be aware of related to this change.

GlobalLimitクラスのコンストラクタは、分単位の代わりに秒単位で引数を取るようにしました。このクラスはドキュメント化しておらず、通常アプリケーションで使用されることはないでしょう。The GlobalLimit class constructor now accepts seconds instead of minutes. This class is not documented and would not typically be used by your application:

new GlobalLimit($attempts, 2 * 60);

Limitクラスのコンストラクタは、分単位ではなく秒単位で指定できるようにしました。このクラスの使用法はすべてLimit::perMinuteLimit::perSecondなどの静的コンストラクタに限定しています。しかし、このクラスを手作業でインスタンス化する場合は、このクラスのコンストラクタへ秒を指定するようにアプリケーションを更新する必要があります。The Limit class constructor now accepts seconds instead of minutes. All documented usages of this class are limited to static constructors such as Limit::perMinute and Limit::perSecond. However, if you are instantiating this class manually, you should update your application to provide seconds to the class's constructor:

new Limit($key, $attempts, 2 * 60);

LimitクラスのdecayMinutesプロパティの名前をdecaySecondsへ変更し、分単位ではなく秒単位になりました。The Limit class's decayMinutes property has been renamed to decaySeconds and now contains seconds instead of minutes.

Illuminate\Queue\Middleware\ThrottlesExceptionsIlluminate\Queue\Middleware\ThrottlesExceptionsWithRedisクラスのコンストラクタが、分単位ではなく秒単位で受け付けるようにしました。The Illuminate\Queue\Middleware\ThrottlesExceptions and Illuminate\Queue\Middleware\ThrottlesExceptionsWithRedis class constructors now accept seconds instead of minutes:

new ThrottlesExceptions($attempts, 2 * 60);
new ThrottlesExceptionsWithRedis($attempts, 2 * 60);

Cashier StripeCashier Stripe

Cashier StripeのアップデートUpdating Cashier Stripe

影響の可能性: 高いLikelihood Of Impact: High

Laravel11はCashier Stripe14.xをサポートしなくなりました。そのため、composer.jsonファイルでアプリケーションのLaravel Cashier Stripeパッケージ依存関係を^15.0へ更新する必要があります。Laravel 11 no longer supports Cashier Stripe 14.x. Therefore, you should update your application's Laravel Cashier Stripe dependency to ^15.0 in your composer.json file.

Cashier Stripe15.0では、migrationディレクトリからマイグレーションを自動的にロードしなくなりました。代わりに、以下のコマンドを実行してCashier Stripeのマイグレーションをアプリケーションへリソース公開する必要があります。Cashier Stripe 15.0 no longer automatically loads migrations from its own migrations directory. Instead, you should run the following command to publish Cashier Stripe's migrations to your application:

php artisan vendor:publish --tag=cashier-migrations

その他の変更点については、Cashier Stripeアップグレードガイドを確認してください。Please review the complete Cashier Stripe upgrade guide[https://github.com/laravel/cashier-stripe/blob/15.x/UPGRADE.md] for additional breaking changes.

Spark (Stripe)Spark (Stripe)

Spark StripeアップデートUpdating Spark Stripe

影響の可能性: 高いLikelihood Of Impact: High

Laravel11はLaravel Spark Stripe4.xをサポートしなくなったため、composer.jsonファイルでアプリケーションのLaravel Spark Stripeパッケージ依存関係を^5.0へ更新する必要があります。Laravel 11 no longer supports Laravel Spark Stripe 4.x. Therefore, you should update your application's Laravel Spark Stripe dependency to ^5.0 in your composer.json file.

Spark Stripe5.0では、migrationsディレクトリからマイグレーションを自動的にロードしなくなりました。代わりに、以下のコマンドを実行してSpark Stripeのマイグレーションをアプリケーションへリソース公開する必要があります:Spark Stripe 5.0 no longer automatically loads migrations from its own migrations directory. Instead, you should run the following command to publish Spark Stripe's migrations to your application:

php artisan vendor:publish --tag=spark-migrations

その他の変更点については、Spark Stripeアップグレードガイドをご覧ください。Please review the complete Spark Stripe upgrade guide[https://spark.laravel.com/docs/spark-stripe/upgrade.html] for additional breaking changes.

PassportPassport

PassportアップデートUpdating Passport

影響の可能性: 高いLikelihood Of Impact: High

Laravel11はLaravel Passport11.xをサポートしなくなったため、composer.jsonファイルでアプリケーションのLaravel Passportパッケージ依存関係を^12.0へ更新する必要があります。Laravel 11 no longer supports Laravel Passport 11.x. Therefore, you should update your application's Laravel Passport dependency to ^12.0 in your composer.json file.

Passport12.0では、自身のmigrationsディレクトリからマイグレーションを自動的にロードしなくなりました。代わりに、以下のコマンドを実行して、Passportのマイグレーションをアプリケーションへリソース公開する必要があります:Passport 12.0 no longer automatically loads migrations from its own migrations directory. Instead, you should run the following command to publish Passport's migrations to your application:

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

さらに、パスワードグラントタイプはデフォルトで無効にしてあります。有効にするには、アプリケーションの AppServiceProviderbootメソッドでenablePasswordGrantメソッドを呼び出してください。In addition, the password grant type is disabled by default. You may enable it by invoking the enablePasswordGrant method in the boot method of your application's AppServiceProvider:

public function boot(): void
{
    Passport::enablePasswordGrant();
}

SanctumSanctum

SanctumアップデートUpdating Sanctum

影響の可能性: 高いLikelihood Of Impact: High

Laravel11はLaravel Sanctum3.xをサポートしなくなったため、composer.jsonファイルでアプリケーションのLaravel Sanctumパッケージ依存関係を^4.0へ更新する必要があります。Laravel 11 no longer supports Laravel Sanctum 3.x. Therefore, you should update your application's Laravel Sanctum dependency to ^4.0 in your composer.json file.

Sanctum 4.0は migrationsディレクトリから自動的にマイグレーションをロードしなくなりました。代わりに、次のコマンドを実行してSanctumのマイグレーションをアプリケーションへリソース公開する必要があります。Sanctum 4.0 no longer automatically loads migrations from its own migrations directory. Instead, you should run the following command to publish Sanctum's migrations to your application:

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

次に、アプリケーションのconfig/sanctum.php設定ファイルで、authenticate_session, encrypt_cookies, validate_csrf_tokenミドルウェアへの参照を以下のように更新してください。Then, in your application's config/sanctum.php configuration file, you should update the references to the authenticate_session, encrypt_cookies, and validate_csrf_token middleware to the following:

'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,
],

TelescopeTelescope

TelescopeアップデートUpdating Telescope

影響の可能性: 高いLikelihood Of Impact: High

Laravel11はLaravel Telescope4.xをサポートしなくなったため、composer.jsonファイルでアプリケーションのLaravel Telescopeパッケージ依存関係を^5.0へ更新する必要があります。Laravel 11 no longer supports Laravel Telescope 4.x. Therefore, you should update your application's Laravel Telescope dependency to ^5.0 in your composer.json file.

Telescope5.0 では、migrationsディレクトリから自動的にマイグレーションをロードしなくなりました。代わりに、以下のコマンドを実行してTelescopeのマイグレーションをアプリケーションへリソース公開する必要があります:Telescope 5.0 no longer automatically loads migrations from its own migrations directory. Instead, you should run the following command to publish Telescope's migrations to your application:

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

SpatieのOnceパッケージSpatie Once Package

影響の可能性: 中程度Likelihood Of Impact: Medium

Laravel11は独自のonce関数を提供し、指定クロージャを一度だけ実行することを保証します。そのため、アプリケーションがspatie/onceパッケージへ依存している場合は、競合を避けるためにアプリケーションの composer.json ファイルからこれを削除する必要があります。Laravel 11 now provides its own once function[/docs/{{version}}/helpers#method-once] to ensure that a given closure is only executed once. Therefore, if your application has a dependency on the spatie/once package, you should remove it from your application's composer.json file to avoid conflicts.

その他Miscellaneous

また、laravel/laravel GitHubリポジトリの変更点をご覧になることをお勧めします。これらの変更の多くは必須ではありませんが、これらのファイルをあなたのアプリケーションと同期させておくとよいでしょう。これらの変更のいくつかはこのアップグレードガイドでカバーしていますが、設定ファイルやコメントの変更など、他のものはカバーしていません。GitHub 比較ツール を使えば簡単に変更点を確認することができ、どこのアップデートがあなたにとって重要かを選ぶことができます。We also encourage you to view the changes in the laravel/laravel GitHub repository[https://github.com/laravel/laravel]. While many of these changes are not required, you may wish to keep these files in sync with your application. Some of these changes will be covered in this upgrade guide, but others, such as changes to configuration files or comments, will not be. You can easily view the changes with the GitHub comparison tool[https://github.com/laravel/laravel/compare/10.x...11.x] and choose which updates are important to you.

章選択

設定

明暗テーマ
light_mode
dark_mode
brightness_auto システム設定に合わせる
テーマ選択
photo_size_select_actual デフォルト
photo_size_select_actual モノクローム(白黒)
photo_size_select_actual Solarized風
photo_size_select_actual GitHub風(青ベース)
photo_size_select_actual Viva(黄緑ベース)
photo_size_select_actual Happy(紫ベース)
photo_size_select_actual Mint(緑ベース)
コードハイライトテーマ選択

明暗テーマごとに、コードハイライトのテーマを指定できます。

テーマ配色確認
スクリーン表示幅
640px
80%
90%
100%

768px以上の幅があるときのドキュメント部分表示幅です。

インデント
無し
1rem
2rem
3rem
原文確認
原文を全行表示
原文を一行ずつ表示
使用しない

※ 段落末のEボタンへカーソルオンで原文をPopupします。

Diff表示形式
色分けのみで区別
行頭の±で区別
削除線と追記で区別

※ [tl!…]形式の挿入削除行の表示形式です。

テストコード表示
両コード表示
Pestのみ表示
PHPUnitのみ表示
OS表示
全OS表示
macOSのみ表示
windowsのみ表示
linuxのみ表示
和文変換

対象文字列と置換文字列を半角スペースで区切ってください。(最大5組各10文字まで)

本文フォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

コードフォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

保存内容リセット

localStrageに保存してある設定項目をすべて削除し、デフォルト状態へ戻します。

ヘッダー項目移動

キーボード操作