nette/schema is locked to version v1.2.2

php 8.2.10 において、laravelのプロジェクトをクローンして、composer installしたときに出た。

git に上がってるものもphp8.2だと思ったが、マイナーバージョンによって違うのか。。。

とりあえず、netteのバージョンが、1.2で lockされているということなので、

composer.lockを探すと、確かに1.2で書いてあった。

これを消してもいいのだが、他の関連ファイルもあるので、composer.lockを削除して、composer.jsonのrequireに以下を追加

"nette/schema":"^1.2"

これである程度解決したが、以下の問題が出た。


対処法:

1. 依存関係の更新

まず、依存関係がアップグレード可能かを確認します:

bashコピーする編集するcomposer why nette/schema

これで、nette/schema を要求しているパッケージがわかります。

2. バージョン制約を緩めてアップデート

もし composer.json に直接指定されていないなら、以下のようにして依存関係の更新を試みます:

bashコピーする編集するcomposer update nette/schema

ただし、lockファイルの更新が前提なので、プロジェクトの整合性が崩れる可能性があります。

3. 互換性のあるバージョンに手動で上げる

nette/schema の互換性のあるバージョン(例:v1.2.3 以降)に更新可能であれば、composer.json に以下を追加:

jsonコピーする編集する"nette/schema": "^1.2.3"

そして:

bashコピーする編集するcomposer update nette/schema

4. PHPバージョンを下げる(非推奨)

一時的な回避策として、PHP のバージョンを 8.1 などに下げることも可能ですが、将来的な保守性を考えると推奨されません。


おすすめの進め方:

  1. composer why nette/schema で依存関係を特定
  2. その依存元が Laravel のどのパッケージか確認
  3. Laravel のバージョンが古ければ、アップグレードも検討

In RecursiveDirectoryIterator.php line 43:

RecursiveDirectoryIterator::__construct(): Argument #1 ($directory) cannot be empty

Script @php artisan package:discover –ansi handling the post-autoload-dump event returned with error code 1

以上のエラーの解決ができずに、cloneしたものを使うのはやめた。


対処手順(順に試してみてください)

1. キャッシュ関連をクリアする

bashコピーする編集するrm -rf bootstrap/cache/*.php
php artisan config:clear
php artisan cache:clear

2. vendor ディレクトリと composer.lock を削除して再インストール

bashコピーする編集するrm -rf vendor composer.lock
composer install

3. パーミッションの確認

storage/bootstrap/cache/ に正しい書き込み権限があるか確認してください。

bashコピーする編集するchmod -R 775 storage bootstrap/cache

あるいは、必要に応じて:

bashコピーする編集するsudo chown -R $USER:www-data storage bootstrap/cache

4. 原因の特定(artisan コマンドを直接実行して詳細を見る)

bashコピーする編集するphp artisan package:discover

このコマンド単体で実行すると、何が原因で失敗しているかのエラー内容がより詳しく表示される可能性があります。


⚠️ よくある原因:

  • PHP のバージョンが対応外(例:Laravel 6系 + PHP 8.2)
  • composer.lock 内の依存パッケージ(例:nette/schema)が PHP バージョンと非互換
  • .env ファイルが存在しない(Laravel の一部のバージョンでは必須)
  • Laravel Mix やその他のフロント系パッケージが壊れている