アップグレードガイド
影響の大きい変更
影響の小さい変更
11.xから12.0へのアップグレード
推定アップグレード時間:5分
私たちは、起こりうるすべての破壊的変更を文書化するよう努めています。これらの破壊的変更の一部はフレームワークの目立たない部分にあるため、これらの変更のごく一部しか、みなさんのアプリケーションに実際に影響を与えないでしょう。時間を節約したいですか?Laravel Shiftを使用して、アプリケーションのアップグレードを自動化できます。
依存パッケージのアップデート
影響の可能性:高
アプリケーションのcomposer.jsonファイルで、以下の依存パッケージを更新する必要があります。
laravel/frameworkを^12.0へ
Carbon 3
影響の可能性:低
Carbon 2.xのサポートは終了しました。すべてのLaravel 12アプリケーションでCarbon 3.xが必要になりました。
Laravelインストーラのアップデート
LaravelインストーラのCLIツールを使用して新しいLaravelアプリケーションを作成している場合は、インストーラをLaravel 12.xと新しいLaravelスターターキットと互換性があるように更新する必要があります。composer global requireを介してLaravelインストーラをインストールした場合は、composer global updateを使用してインストーラを更新できます。
1composer global update laravel/installer
もともとphp.newを介してPHPとLaravelをインストールした場合は、使用しているオペレーティングシステムのphp.newインストールコマンドを再実行するだけで、最新バージョンのPHPとLaravelインストーラをインストールできます。
1/bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"
1# Run as administrator...2Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://php.new/install/windows/8.4'))
1/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.4)"
あるいは、Laravel HerdにバンドルされているLaravelインストーラのコピーを使用している場合は、Herdのインストールを最新リリースに更新する必要があります。
並行処理
並行処理結果のインデックスマッピング
影響の可能性:低
Concurrency::runメソッドを連想配列で呼び出すと、並行操作の結果が関連付けられたキーとともに返されるようになりました。
1$result = Concurrency::run([2 'task-1' => fn () => 1 + 1,3 'task-2' => fn () => 2 + 2,4]);5 6// ['task-1' => 2, 'task-2' => 4]
データベース
複数スキーマのデータベース調査
影響の可能性:低
Schema::getTables()、Schema::getViews()、Schema::getTypes()メソッドは、デフォルトですべてのスキーマからの結果を含むようになりました。特定のスキーマの結果のみを取得するには、schema引数を渡してください。
1// All tables on all schemas...2$tables = Schema::getTables();3 4// All tables on the 'main' schema...5$table = Schema::getTables(schema: 'main');6 7// All tables on the 'main' and 'blog' schemas...8$table = Schema::getTables(schema: ['main', 'blog']);
Schema::getTableListing()メソッドは、デフォルトでスキーマ修飾されたテーブル名を返すようになりました。必要に応じて動作を変更するには、schemaQualified引数を渡してください。
1$tables = Schema::getTableListing();2// ['main.migrations', 'main.users', 'blog.posts']3 4$table = Schema::getTableListing(schema: 'main');5// ['main.migrations', 'main.users']6 7$table = Schema::getTableListing(schema: 'main', schemaQualified: false);8// ['migrations', 'users']
db:tableコマンドとdb:showコマンドは、PostgreSQLやSQL Serverと同様に、MySQL、MariaDB、SQLiteでもすべてのスキーマの結果を出力するようになりました。
リクエスト
ネストした配列リクエストのマージ
影響の可能性:低
$request->mergeIfMissing()メソッドは、「ドット」記法を使用したネストされた配列データのマージを許可するようになりました。以前にこのメソッドを使用して、「ドット」記法版のキーを含むトップレベルの配列キーを作成していた場合は、この新しい動作に対応するためにアプリケーションを調整する必要があるかもしれません。
1$request->mergeIfMissing([2 'user.last_name' => 'Otwell',3]);
バリデーション
画像バリデーションでSVGを除外
imageバリデーションルールは、デフォルトでSVG画像を許可しなくなりました。imageルールを使用する際にSVGを許可したい場合は、明示的に許可する必要があります。
1use Illuminate\Validation\Rules\File;2 3'photo' => 'required|image:allow_svg'4 5// Or...6'photo' => ['required', File::image(allowSvg: true)],
その他
laravel/laravelのGitHubリポジトリの変更点も確認することをお勧めします。これらの変更の多くは必須ではありませんが、これらのファイルをアプリケーションと同期させたいと思うかもしれません。これらの変更の一部はこのアップグレードガイドでカバーされますが、設定ファイルやコメントの変更など、その他の変更はカバーされません。GitHub比較ツールを使えば、変更点を簡単に確認でき、どのアップデートが自分にとって重要かを選択できます。