Laravel10への更新作業
お客様のシステムをLaravel10へ更新する作業をしていたところ、composer.json修正後のcomposer updateでエラーになりました。
いつもどおりアップグレードガイドに従って作業をしていたのですが、それでも、パッケージ間の依存関係でエラーになることはよくあります。
composer updateでのエラー
$ composer update Loading composer repositories with package information Updating dependencies Your requirements could not be resolved to an installable set of packages. Problem 1 - Conclusion: don't install fruitcake/laravel-cors v2.0.1 (conflict analysis result) - Conclusion: don't install fruitcake/laravel-cors v2.0.2 (conflict analysis result) - Conclusion: don't install fruitcake/laravel-cors v2.0.4 (conflict analysis result) 以下略
fruitcake/laravel-corsのバージョン指定が競合してインストールできないようです。この手のエラーもよくあることなので、こういう場合は、各バージョンの素のLaravelを新規インストールをしてcomposer.jsonを比較してみると手っ取り早く原因を調べられます。
差分を確認してみたところfruitcake/laravel-corsはLaravel8まではデフォルトでインストールするようになっていましたが、Laravel9からは削除されています。
Laravel8のcomposer.json
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
"php": "^7.3|^8.0",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.75",
"laravel/sanctum": "^2.11",
"laravel/tinker": "^2.5"
},
略
Laravel9のcomposer.json
{ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "php": "^8.0.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.19", "laravel/sanctum": "^3.0", "laravel/tinker": "^2.7" }, 略
https://github.com/fruitcake/laravel-cors によると
This package is deprecated because all supported Laravel versions now include the CORS middleware in the core.
現在サポート中の全LaravelバージョンではlaravelコアにCORSミドルウェアを含んでいるので、このパッケージ非推奨です。
とあります。
リンク先によるとLaravel9.2から標準でCORSがサポートされたのでfruitcake/laravel-corsは不要になったようです。Laravel9では"fruitcake/laravel-cors": "^2.0"の指定があってもインストールには問題はありませんでしたが、Laravel10ではきちんと削除しないとだめなようです。
また、修正は"fruitcake/laravel-cors"を削除するだけでなく、app/Http/Kernel.phpの書き換えも必要です(詳細は修正はリンク先参照)。
app/Http/Kernel.phpの修正
protected $middleware = [ // \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, - \Fruitcake\Cors\HandleCors::class, + \Illuminate\Http\Middleware\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
CORSのサポートに関する説明はLaravel9,10どちらのアップグレードガイドにものっていなかったのでこちらにまとめておきます。
投稿日:2023/03/29 21:39