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

アーカイブ

タグ

Server (28) 作業実績 (21) PHP (19) ネットワーク (17) プログラミング (15) OpenSSL (10) C (8) C++ (8) PHP関連更新作業 (8) EC-CUBE (7) Webアプリ (7) laravel (6) 書籍 (5) Nginx (5) Linux (5) AWS (4) Vue.js (4) JavaScript (4) 与太話 (4) Rust (3) Symfony (2) お知らせ (2) Golang (2) OSS (1) MySQL (1) デモ (1) CreateJS (1) Apache (1)