コンテンツへスキップ

アップグレードガイド

影響の大きい変更

影響の小さい変更

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/laravelGitHubリポジトリの変更点も確認することをお勧めします。これらの変更の多くは必須ではありませんが、これらのファイルをアプリケーションと同期させたいと思うかもしれません。これらの変更の一部はこのアップグレードガイドでカバーされますが、設定ファイルやコメントの変更など、その他の変更はカバーされません。GitHub比較ツールを使えば、変更点を簡単に確認でき、どのアップデートが自分にとって重要かを選択できます。

Laravelは最も生産的な方法です
ソフトウェアを構築、デプロイ、監視します。