タイトル: Your requirements could not be resolved to an installable set of packages. ... To enable extensions, verify that they are enabled in your .ini files:
SEOタイトル: Composerのext-mbstring未有効エラーの対処法|php.ini設定
エラー内容
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework v5.5.9 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.5.8 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.5.7 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
(以下、候補バージョンの数だけ同じ行が続く)
composer install や composer create-project の実行時に出ます。同じ行が何十行も並ぶので驚きますが、原因は 1 つで、候補になったバージョンを 1 つずつ試して全部だめだった、という報告が並んでいるだけです。
このメッセージの読み方
Composer は「要求を満たす組み合わせが 1 つも作れなかった」ときにこのメッセージを出します。本当の原因は Problem ブロックの中に書かれています。
Problem 1の行だけを読む — 同じ内容が並んでいるなら原因は 1 つです。Problem 2以降があれば原因は複数あります。->の右側が結論 — 「何が足りないか」はここに書かれます。- いちばん新しいバージョンの行を見る — 古いバージョンの行は「そちらでも駄目だった」という補足にすぎません。
よくある 4 つの原因
| Problem 行の書かれ方 | 原因 | 対処 |
|---|---|---|
requires ext-xxx * -> the requested PHP extension xxx is missing |
PHP 拡張が入っていない | PHP 拡張が無いときの対処 |
requires php ^8.1 -> your php version (8.0.x) does not satisfy that requirement |
PHP 本体のバージョンが要求を満たさない | PHP を上げるか、要求の緩い版を指定する |
conflicts with / don't satisfy が出る |
パッケージ同士のバージョン競合 | 片方の制約を緩める。composer why-not ベンダー名/パッケージ名 バージョン で理由が出る |
requires ext-... だが本番では入っている |
CLI と Web で読む php.ini が違う | php -m と php --ini で CLI 側を確認する |
原因の切り分け
まずどのパッケージが何を要求しているかを確定させます。
# 入れたいバージョンが入らない理由を Composer に説明させる
composer why-not laravel/framework 10.0
# 今の環境が満たしているプラットフォーム要件を一覧する
composer show --platform
# 何が変わるかだけ見る(実際には入れない)
composer update --dry-run
composer why-not は「なぜそのバージョンにできないのか」を 1 行で返してくれるため、Problem ブロックを読むより早いことが多いです。
対処法(Linux)
上の例のように ext-mbstring が足りない場合は、拡張を入れて再実行します。
sudo apt install php-mbstring
sudo systemctl restart php8.2-fpm # FPM を使っている場合
composer install
拡張の入れ方や、入れたのに認識されない場合の確認手順はthe requested PHP extension ... is missing from your systemに分けてまとめています。
--ignore-platform-reqs を使う前に
このオプションを付けるとプラットフォーム要件のチェックを飛ばしてインストールが通ります。ただし通るだけで、実行時に Call to undefined function mb_strlen() のような致命的エラーになります。
- 使ってよい場面: CI でコードの静的解析だけしたい、といった実行しない用途
- 使ってはいけない場面: 本番・開発サーバへのインストール。必ず拡張を入れて解決してください
関連記事
- the requested PHP extension ... is missing from your system — PHP 拡張が足りない場合の対処
- PHP — 言語のカテゴリ