MeWrite Docs

Your requirements could not be resolved to an installable set of packages

Composerが依存関係を解決できない場合に発生するエラー

概要

Your requirements could not be resolved to an installable set of packages は、Composerがパッケージの依存関係を解決できない場合に発生するエラーです。バージョンの競合、PHPバージョンの不一致、パッケージの廃止などが原因です。

エラーメッセージ

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires package/name ^2.0, found package/name[1.0.0, 1.1.0, 1.2.0] but it does not match the constraint.
  Problem 1
    - laravel/framework v10.0.0 requires php ^8.1 -> your php version (7.4.0) does not satisfy that requirement.

原因

  1. バージョンの競合: 複数のパッケージが互換性のないバージョンを要求
  2. PHPバージョンの不一致: パッケージが要求するPHPバージョンと異なる
  3. 拡張機能の不足: 必要なPHP拡張がインストールされていない
  4. パッケージが存在しない: リポジトリにパッケージがない
  5. 安定性の問題: dev バージョンのみ存在

解決策

1. エラーメッセージを詳しく確認

1
2
3
4
5
6
7
8
# 詳細な出力
composer install -vvv

# 依存関係の問題を確認
composer why-not package/name 2.0

# なぜ特定のバージョンが必要か確認
composer depends package/name

2. バージョン制約を緩和

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// composer.json
{
    "require": {
        // ❌ 厳格すぎる制約
        "package/name": "2.0.0",

        // ✅ 柔軟な制約
        "package/name": "^2.0",   // 2.0.0 以上 3.0.0 未満
        "package/name": "~2.0",   // 2.0.0 以上 2.1.0 未満
        "package/name": ">=2.0"   // 2.0.0 以上
    }
}

3. PHPバージョンの確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# PHPバージョンを確認
php -v

# Composer が認識しているバージョン
composer config platform.php

# プラットフォームを指定
composer config platform.php 8.1.0

# 設定を削除
composer config --unset platform.php
1
2
3
4
5
6
7
8
// composer.json でプラットフォームを指定
{
    "config": {
        "platform": {
            "php": "8.1.0"
        }
    }
}

4. 拡張機能の確認

1
2
3
4
5
6
7
8
# インストール済みの拡張
php -m

# 特定の拡張を確認
php -m | grep gd

# Composer の要件を確認
composer check-platform-reqs
1
2
3
4
5
6
7
8
// 拡張機能の要件を緩和
{
    "config": {
        "platform": {
            "ext-gd": "1.0"
        }
    }
}

5. パッケージの更新

1
2
3
4
5
6
7
8
# 単一パッケージを更新
composer update package/name

# すべてを更新
composer update

# ロックファイルを無視
composer update --with-all-dependencies

6. 競合するパッケージを特定

1
2
3
4
5
6
7
8
# 依存関係ツリーを表示
composer show --tree

# 特定のパッケージの依存
composer show package/name

# インストールされているバージョン
composer show -i

7. 安定性フラグの設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// composer.json
{
    "minimum-stability": "dev",
    "prefer-stable": true,

    "require": {
        // 特定のパッケージのみ dev を許可
        "package/name": "dev-master"
    }
}

8. キャッシュのクリア

1
2
3
4
5
6
7
# Composer キャッシュをクリア
composer clear-cache

# vendor を削除して再インストール
rm -rf vendor
rm composer.lock
composer install

9. パッケージの置き換え

1
2
3
4
5
6
// 競合するパッケージを置き換え
{
    "replace": {
        "old-package/name": "*"
    }
}

10. 代替パッケージを探す

1
2
3
4
5
# Packagist で検索
composer search package-name

# パッケージの情報を確認
composer show package/name --all

Laravel プロジェクトでの対処

1
2
3
4
5
# Laravel のバージョンに合わせてパッケージをインストール
composer require package/name:^1.0 --with-all-dependencies

# Laravel のアップグレード
composer require laravel/framework:^10.0 --update-with-all-dependencies
1
2
3
4
5
6
7
8
// Laravel プロジェクトの典型的な require
{
    "require": {
        "php": "^8.1",
        "laravel/framework": "^10.0",
        "laravel/sanctum": "^3.2"
    }
}

Docker での対処

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Dockerfile
FROM php:8.2-fpm

# 必要な拡張をインストール
RUN docker-php-ext-install pdo pdo_mysql
RUN apt-get update && apt-get install -y libpng-dev && docker-php-ext-install gd

# Composer をインストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader

デバッグのコツ

診断コマンド

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 問題を診断
composer diagnose

# プラットフォーム要件
composer check-platform-reqs

# 依存関係の矛盾を表示
composer validate

# 使用しないパッケージを確認
composer show --outdated

トラブルシューティング

1
2
3
4
5
6
7
8
# メモリ制限を増やす
COMPOSER_MEMORY_LIMIT=-1 composer install

# タイムアウトを延長
COMPOSER_PROCESS_TIMEOUT=600 composer install

# 並列ダウンロードを無効化
composer install --prefer-dist

最終更新: 2025-12-08