Home > ブログ > Laravel10への更新作業

ブログ

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

タグ: PHP 作業実績 laravel

Top

アーカイブ