Documentation Index
Fetch the complete documentation index at: https://kawax.biz/llms.txt
Use this file to discover all available pages before exploring further.
はじめに
Laravel 11 は 2024年3月にリリースされました。このガイドでは Laravel 10.x から 11.x へのアップグレード手順を説明します。アップグレードに必要な推定時間は 約15分 です。ただし、破壊的変更がアプリケーションに与える影響は規模や使用している機能によって異なります。
Laravel Shift を使った自動アップグレード
Laravel Shift を使ってアップグレードを自動化することもできます。Shift はアプリケーションの依存関係や設定ファイルを自動的に更新してくれます。影響度別の変更点
影響度: 高
- 依存関係の更新
- アプリケーション構造の変更
- 浮動小数点型の変更
- カラム変更時の属性保持
- SQLite 最小バージョン
- Sanctum の更新
影響度: 中
- Carbon 3
- パスワードの再ハッシュ
- 秒単位のレート制限
- Spatie Once パッケージ
影響度: 低
- Doctrine DBAL の削除
- Eloquent モデルの
castsメソッド - 空間型の変更
EnumerableコントラクトUserProviderコントラクトAuthenticatableコントラクト
アップグレード手順
依存関係の更新
影響度: 高composer.json の以下の依存関係を更新してください。
doctrine/dbal を手動で追加していた場合は削除できます。Laravel 11 ではこのパッケージへの依存がなくなりました。
PHPバージョン要件
影響度: 高 Laravel 11 では PHP 8.2.0 以上 が必要です。また、Laravel の HTTP クライアントには curl 7.34.0 以上 が必要です。アプリケーション構造の変更
影響度: 高 Laravel 11 ではデフォルトのアプリケーション構造が簡素化されました。サービスプロバイダー、ミドルウェア、設定ファイルの数が大幅に削減されています。 ただし、Laravel 10 のアプリケーションを Laravel 11 にアップグレードする際に、アプリケーション構造の移行を試みることは 推奨しません。Laravel 11 は Laravel 10 のアプリケーション構造もサポートするように設計されています。 主な構造的変更点:bootstrap/app.phpでミドルウェア、例外ハンドラー、ルーティングを直接設定するように変更app/Http/Kernel.phpが廃止されbootstrap/app.phpに統合- デフォルトのサービスプロバイダー数が削減され
bootstrap/providers.phpで管理 config/ディレクトリのファイル数が削減(必要に応じてphp artisan config:publishで公開可能)
破壊的変更 (Breaking Changes)
認証
パスワードの再ハッシュ
影響度: 中 Laravel 11 では、認証時にハッシュアルゴリズムの「ワークファクター」が変更されていた場合、自動的にパスワードを再ハッシュします。User モデルのパスワードフィールドの名前が password 以外の場合は、モデルの authPasswordName プロパティで指定してください。
config/hashing.php に以下を追加してください。
UserProvider コントラクト
影響度: 低
Illuminate\Contracts\Auth\UserProvider コントラクトに rehashPasswordIfRequired メソッドが追加されました。このインターフェースを実装しているクラスがある場合は、メソッドを追加してください。
Authenticatable コントラクト
影響度: 低
Illuminate\Contracts\Auth\Authenticatable コントラクトに getAuthPasswordName メソッドが追加されました。このインターフェースを実装しているクラスがある場合は、メソッドを追加してください。
データベース
SQLite 最小バージョン
影響度: 高 SQLite を使用している場合は SQLite 3.26.0 以上 が必要です。 なお、Laravel 11 の新規プロジェクトではデフォルトのデータベースドライバーが SQLite に変更されました。カラム変更時の属性保持
影響度: 高 カラムを変更する際、変更後も保持したいすべての修飾子を明示的に指定する必要があります。指定されていない属性は削除されます。浮動小数点型の変更
影響度: 高double と float のマイグレーションカラム型が全データベースで統一されました。
unsignedDecimal、unsignedDouble、unsignedFloat メソッドは削除されました。引き続き unsigned 属性を使う場合はメソッドチェーンで指定してください。
Eloquent モデルの casts メソッド
影響度: 低
基底の Eloquent モデルクラスに casts メソッドが定義されました。アプリケーションのモデルで casts というリレーションを定義している場合は名前が競合するため変更が必要です。
MariaDB 専用ドライバー
影響度: 非常に低 Laravel 11 では MariaDB 用の専用データベースドライバーが追加されました。MariaDB に接続する場合は、設定でmariadb ドライバーを使用できます。
空間型の変更
影響度: 低 空間カラム型が全データベースで統一されました。point、lineString、polygon などのメソッドの代わりに geometry または geography を使用してください。
subtype と srid を渡してください。
Doctrine DBAL の削除
影響度: 低 Laravel は Doctrine DBAL への依存をなくしました。以下のクラスやメソッドが削除されています。Schema\Builder::useNativeSchemaOperationsIfPossible()Connection::getDoctrineConnection()Connection::getDoctrineSchemaManager()Connection::registerDoctrineType()DatabaseManager::registerDoctrineType()Schema\Grammars\ChangeColumnクラスSchema\Grammars\RenameColumnクラス
Schema::getTables()、Schema::getColumns()、Schema::getIndexes()、Schema::getForeignKeys() などの新しいネイティブメソッドを使用してください。
日付
Carbon 3
影響度: 中 Laravel 11 は Carbon 2 と Carbon 3 の両方をサポートします。Carbon 3 にアップグレードする場合、diffIn* メソッドが浮動小数点数を返すようになり、負の値で時間の方向を表すことに注意してください。
レート制限
秒単位のレート制限
影響度: 中 Laravel 11 では分単位ではなく秒単位のレート制限がサポートされました。GlobalLimit、Limit クラスのコンストラクターが秒単位を受け取るようになっています。
Limit クラスの decayMinutes プロパティは decaySeconds に改名され、秒単位になりました。
ThrottlesExceptions と ThrottlesExceptionsWithRedis のコンストラクターも秒単位を受け取るようになりました。
パッケージ
サービスプロバイダーのパブリッシュ
影響度: 非常に低 Laravel 11 の新規アプリケーションにはconfig/app.php の providers 配列がありません。パッケージでサービスプロバイダーをパブリッシュしている場合は、ServiceProvider::addProviderToBootstrapFile メソッドを使用してください。
Sanctum
Sanctum のアップデート
影響度: 高 Laravel 11 は Sanctum 3.x をサポートしません。composer.json の Sanctum 依存関係を ^4.0 に更新してください。
Sanctum 4.0 はマイグレーションを自動でロードしなくなりました。以下のコマンドでパブリッシュしてください。
config/sanctum.php のミドルウェア設定を更新してください。
Spatie Once パッケージ
影響度: 中 Laravel 11 は独自のonce 関数 を提供するようになりました。spatie/once パッケージを使用している場合は、競合を避けるために composer.json から削除してください。
まとめ
Laravel 11 は大きな構造変更を含むバージョンですが、Laravel 10 のアプリケーション構造はそのまま動作するため、段階的に移行できます。| 変更点 | 影響度 | 対応 |
|---|---|---|
composer.json の依存関係更新 | 高 | laravel/framework ^11.0 に変更 |
| PHP 8.2 必須 | 高 | PHP のバージョンを確認 |
| カラム変更時の属性保持 | 高 | change() 使用箇所を確認 |
| 浮動小数点型の変更 | 高 | double/float カラムの定義を確認 |
| SQLite 3.26.0+ 必須 | 高 | SQLite のバージョンを確認 |
Sanctum ^4.0 | 高 | マイグレーションをパブリッシュ |
| Carbon 3 | 中 | diffIn* メソッドの戻り値を確認 |
| 秒単位のレート制限 | 中 | decayMinutes を decaySeconds に変更 |
| Doctrine DBAL の削除 | 低 | ネイティブスキーマメソッドに移行 |
参考資料
- 公式アップグレードガイド (英語)
- laravel/laravel リポジトリの差分 (10.x → 11.x)
- Laravel Shift — アップグレードを自動化するコミュニティサービス
- Carbon 3 変更ログ