この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: the requested PHP extension dom is missing from your system.
SEOタイトル: composer install「PHP extension dom is missing」の原因と OS 別インストール手順

この記事の要点
  • composer install / update 実行時に出る PHP 拡張不足エラー
  • 不足しやすい拡張: dom / xml / mbstring / zip / curl / gd / intl
  • Ubuntu/Debian: sudo apt install php-xml php-mbstring php-zip(dom は php-xml に含まれる)
  • CentOS/RHEL: sudo yum install php-xml php-mbstring
  • Docker: RUN docker-php-ext-install dom xml mbstring zip を Dockerfile に追加
  • 確認: php -m | grep dom で有効化済か確認、php --ini で php.ini の場所を特定

このエラーの概要

Laravel / Symfony プロジェクトで composer installcomposer update を実行したときに、次のようなメッセージが出て止まります:

Problem 1
  - laravel/framework[v10.0.0, ..., v10.48.0] require ext-dom * -> it is missing
    from your system. Install or enable PHP's dom extension.
  - Root composer.json requires laravel/framework ^10.0 -> satisfiable by
    laravel/framework[v10.0.0, ...].

To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php/8.2/cli/php.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

これは Composer が依存パッケージの require セクションで指定された PHP 拡張(ext-dom 等)が、現在の PHP に組み込まれていないことを検知したときに出るエラーです。

不足しがちな PHP 拡張一覧

拡張名用途Ubuntu パッケージCentOS パッケージ
domXML/HTML パース(DOMDocument)php-xmlphp-xml
xmlXML 全般php-xmlphp-xml
mbstringマルチバイト文字列php-mbstringphp-mbstring
zipZip 圧縮・展開php-zipphp-pecl-zip
curlHTTP クライアントphp-curlphp-curl
gd画像処理php-gdphp-gd
intl国際化・ロケールphp-intlphp-intl
bcmath任意精度演算php-bcmathphp-bcmath
pdo_mysqlMySQL 接続php-mysqlphp-mysqlnd

対処1: Ubuntu / Debian の場合

# 現在の PHP バージョンを確認
php -v
# PHP 8.2.x のように表示される

# dom / xml / mbstring / zip をまとめて入れる
sudo apt update
sudo apt install php-xml php-mbstring php-zip php-curl php-gd

# 特定バージョン指定(PHP 8.2 を使っているとき)
sudo apt install php8.2-xml php8.2-mbstring php8.2-zip

# 確認
php -m | grep -E "dom|xml|mbstring|zip"

# Apache を使っている場合は再起動
sudo systemctl restart apache2
# Nginx + PHP-FPM の場合
sudo systemctl restart php8.2-fpm

対処2: CentOS / RHEL / AlmaLinux の場合

# Remi リポジトリ利用が一般的
sudo yum install php-xml php-mbstring php-pecl-zip php-curl

# モジュール指定(PHP 8.2)
sudo dnf module reset php
sudo dnf module install php:remi-8.2
sudo dnf install php-xml php-mbstring php-pecl-zip

# 確認
php -m | grep dom

# php-fpm 再起動
sudo systemctl restart php-fpm

対処3: macOS (Homebrew) の場合

# Homebrew の PHP は dom / xml / mbstring が同梱
brew install php@8.2

# 切り替え
brew unlink php && brew link php@8.2 --force

# 確認
php -m | grep -E "dom|xml|mbstring"

対処4: Docker / Dockerfile の場合

公式 php:8.2-fpm 等のイメージは最小構成のため、多くの拡張が入っていません。Dockerfile で明示的にインストールします:

FROM php:8.2-fpm

# 必要な OS パッケージ
RUN apt-get update && apt-get install -y \
    libxml2-dev \
    libzip-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libicu-dev \
    libonig-dev \
    zip \
    unzip \
    git \
    && rm -rf /var/lib/apt/lists/*

# PHP 拡張をインストール
RUN docker-php-ext-install \
    dom \
    xml \
    mbstring \
    zip \
    pdo_mysql \
    bcmath \
    intl

# GD は configure が必要
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install gd

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

対処5: php.ini で明示的に有効化

パッケージはインストール済だが php.ini で有効化されていない場合もあります:

# php.ini の場所を確認
php --ini
# Loaded Configuration File: /etc/php/8.2/cli/php.ini
# Additional .ini files parsed:
#   /etc/php/8.2/cli/conf.d/20-dom.ini
#   /etc/php/8.2/cli/conf.d/20-xml.ini

# 拡張ディレクトリ確認
php -i | grep extension_dir
# extension_dir => /usr/lib/php/20220829

# 手動で有効化(自動で読み込まれない場合)
echo "extension=dom" | sudo tee -a /etc/php/8.2/cli/php.ini
echo "extension=xml" | sudo tee -a /etc/php/8.2/cli/php.ini

# CLI と Apache/FPM では別々の php.ini を持つので注意
sudo cp /etc/php/8.2/cli/conf.d/20-dom.ini /etc/php/8.2/fpm/conf.d/

対処6: 一時回避(非推奨)

テスト環境で拡張をすぐ入れられない場合、composer に拡張チェックをスキップさせる方法があります(本番では絶対に使わない):

# 拡張要件をスキップ
composer install --ignore-platform-req=ext-dom

# 複数指定
composer install \
  --ignore-platform-req=ext-dom \
  --ignore-platform-req=ext-xml \
  --ignore-platform-req=ext-mbstring

# 全プラットフォーム要件を無視(本当に最後の手段)
composer install --ignore-platform-reqs

確認方法

# インストール済拡張一覧
php -m

# 特定の拡張だけ確認
php -r "echo extension_loaded('dom') ? 'OK' : 'NG';"

# Composer 側から見たプラットフォーム
composer show --platform

# Composer が認識する PHP / 拡張
composer check-platform-reqs

よくあるトラブル

症状原因対処
apt install 後も「missing」CLI と Web で異なる php.iniFPM 側にも 20-dom.ini をコピー、FPM 再起動
複数 PHP バージョンが混在/usr/bin/php/opt/...which -a php で全候補、update-alternatives
Docker でビルドは通るが実行で失敗マルチステージで拡張未コピー最終ステージにも docker-php-ext-install
php-xml 入れても dom 出ないphp-fpm 再起動忘れsystemctl restart php-fpm

FAQ

Q: domxml の違いは?
A: dom は DOMDocument 系 API(HTML/XML パース)、xml は SimpleXML / XMLReader 系。Laravel は両方必要です。

Q: php.ini を編集したのに反映されない
A: CLI で確認したい場合は CLI の php.ini、Web (Apache/Nginx+FPM) の場合は SAPI 側の php.ini を編集する必要があります。phpinfo() で「Loaded Configuration File」を確認してください。

Q: Docker で docker-php-ext-install dom が遅い
A: 複数拡張を 1 行にまとめると共有部分のビルドが省略され速くなります。また mlocati/docker-php-extension-installer を使うと依存解決も自動になります。

関連エラー

  • Class 'DOMDocument' not found — 同じく ext-dom 未インストール
  • ext-mbstring * is missingphp-mbstring をインストール
  • ext-zip * is missingphp-zip(CentOS は php-pecl-zip