LaravelでIntervention Image v3が使えない!?v2にロールバックした話

Laravelプロジェクトで画像アップロードを実装中に、Intervention Image v3を使おうとしたところ…

use Intervention\Image\Facades\Image;
Image::make($photo)->resize(1200, null)->save($path);

なんと 「Class 'Intervention\Image\Facades\Image’ not found」 が出る事態に! Composerでインストールも確認済みなのに、なぜかLaravelが認識してくれませんでした。

原因を探る

調べてみると、v3では Facadesの自動解決やLaravel 12との互換性 に微妙な問題があることが判明。 公式ドキュメントにも v2 との互換性や Facade の扱いの違いに注意、と書かれています。

composer show intervention/image

で確認しても v3 が入っており、通常の use Intervention\Image\Facades\Image; では読み込めない状態でした。

解決策:v2へのロールバック

そこで、思い切って v2 に戻すことにしました。

composer require intervention/image:^2.7
  • Laravelの Facade も v2スタイルに戻る
  • Image::make() が問題なく使える
  • 既存のコードもほぼそのまま動作

結果、画像アップロード処理が復活しました。

ポイント

  • ImageManagerStatic を使えば v3 でも動くことはあるが、Laravel 12 の Facade との組み合わせでトラブルになりやすい
  • v2に戻すとキャッシュや Facade の問題が解消される
  • Composer で明示的にバージョン指定しておくと安心

まとめ

  • v3は最新だけど、Laravel 12や既存コードとの互換性問題がある
  • 激レア案件だけど、v2にロールバックすることで短期間で問題解決可能
  • LaravelでIntervention Imageを使う場合は バージョン管理とFacadeの扱いに注意

💡 Tip: 更新処理で古い画像が削除されない場合は、DBのキャストや update() に含める項目にも注意。 今回の案件では、 photos$validated に含めずに処理することで安全に古い画像を削除できました。

Laravel

Posted by bistro