Laravel+Plesk環境でartisanコマンド実行時に「DOMDocument not found」エラーが発生する問題を、php-xml拡張のインストール方法から具体的に解説します。
こんな問題に悩んでいませんか?
「Laravel artisanコマンドを実行したら突然『Class 'DOMDocument' not found』エラーが表示された」 「サーバー移行後にLaravelアプリケーションが動かなくなった」 「php-xml拡張が見つからないと言われても、どこに問題があるのか分からない」
このようなエラーに遭遇して困っているWeb担当者の方は多いのではないでしょうか。特にPleskを使用したUbuntuサーバー環境では、この問題が頻繁に発生します。
20年以上Web制作に携わってきた弊社でも、クライアントのサーバー環境でこの問題に何度も直面してきました。一見複雑に見えるエラーですが、実は原因は明確で、適切な手順で対処すれば確実に解決できる問題です。
DOMDocument not foundエラーの原因と影響
エラーの正体
「DOMDocument not found」エラーは、PHPの標準拡張機能であるphp-xmlがサーバーにインストールされていない、または有効化されていない場合に発生します。
DOMDocumentクラスは、XML/HTMLドキュメントを操作するための重要なクラスです。Laravelでは以下のような場面で内部的に使用されています:
- HTMLパーサー機能
- XMLファイルの処理
- RSS/Atom フィードの生成
- サイトマップの作成
- 設定ファイルの読み込み
実際のクライアント事例
先月、あるクライアントから「本番サーバーでLaravelアプリケーションが突然動かなくなった」という緊急連絡がありました。詳しく調査すると、サーバー会社がOSアップデートを実施した際に、php-xml拡張がインストールされていない新しいPHP環境に切り替わったことが原因でした。
結果として:
- 管理画面にログインできない
- APIエンドポイントがエラーを返す
- 定期実行されるバッチ処理が停止
- サイトマップが生成されなくなる
このように、DOMDocumentエラーは単なる表示の問題ではなく、ビジネスに直接影響を与える重大な問題に発展する可能性があります。
Ubuntu+Plesk環境での具体的解決手順
ステップ1: 現在の状況を確認
まず、本当にphp-xml拡張が不足しているかを確認しましょう。
# PHPバージョンの確認
php -v
# インストール済み拡張の確認
php -m | grep -i xml
# DOMDocumentクラスの存在確認
php -r "if (class_exists('DOMDocument')) { echo 'DOMDocument is available'; } else { echo 'DOMDocument is NOT available'; }"
「DOMDocument is NOT available」と表示された場合、php-xml拡張がインストールされていません。
ステップ2: apt-getを使った拡張のインストール
Ubuntuサーバーでは、以下のコマンドでphp-xml拡張をインストールできます:
# PHP 8.3の場合(使用しているバージョンに合わせて変更)
sudo apt-get update
sudo apt-get install php8.3-xml
# PHP 8.2の場合
sudo apt-get install php8.2-xml
# PHP 8.1の場合
sudo apt-get install php8.1-xml
重要: 使用しているPHPのバージョンと一致させる必要があります。バージョンが不明な場合は php -v で確認してください。
ステップ3: Webサーバーの再起動
拡張をインストールした後は、Webサーバーを再起動する必要があります:
# Apacheの場合
sudo service apache2 restart
# Nginxの場合
sudo service nginx restart
sudo service php8.3-fpm restart
ステップ4: Plesk管理画面での設定確認
Pleskを使用している場合、管理画面からも拡張の状態を確認・有効化できます:
- Plesk管理画面にログイン
- 「ツールと設定」→ 「サービス管理」
- 使用しているPHPバージョンをクリック
- 「拡張」タブを開く
- 「xml」拡張が有効になっているか確認
- 無効の場合はチェックボックスにチェックを入れて「OK」
ステップ5: 動作確認
設定が完了したら、再度確認してみましょう:
# 拡張が読み込まれているか確認
php -m | grep -i xml
# DOMDocumentが使用可能か確認
php -r "echo class_exists('DOMDocument') ? 'Success!' : 'Still not working';"
# Laravelアプリケーションで確認
php artisan --version
正常に動作する場合、以下のような出力が得られます:
dom
libxml
xml
xmlreader
xmlwriter
Success!
Laravel Framework 10.x.x
複数PHP環境での対応
サーバーに複数のPHPバージョンがインストールされている場合は、すべてのバージョンでxml拡張を有効にする必要があります:
# 利用可能なPHPバージョンの確認
ls /etc/php/
# 各バージョンにxml拡張をインストール
sudo apt-get install php8.1-xml php8.2-xml php8.3-xml
よくある失敗パターンと対処法
失敗パターン1: PHPバージョンの不一致
症状: インストールしたはずなのに、まだエラーが出る
原因: コマンドラインのPHPとWebサーバーで使用されるPHPのバージョンが異なる
解決方法:
# コマンドラインのPHPバージョン確認
php -v
# Webサーバー用PHPバージョン確認
php-fpm8.3 -v # バージョンに応じて変更
# phpinfoでWeb経由での確認
echo "<?php phpinfo(); ?>" > /tmp/info.php
php /tmp/info.php | grep "PHP Version"
失敗パターン2: 権限不足でインストールできない
症状: Permission denied エラーが表示される
原因: sudo権限なしでインストールを試行している
解決方法:
# 管理者権限で実行
sudo apt-get install php8.3-xml
# 権限がない場合は、サーバー管理者に依頼
# または、Plesk管理画面経由で対応
失敗パターン3: キャッシュが残っている
症状: 拡張をインストールしたが、Laravelがまだエラーを出す
原因: Laravelのキャッシュが古い状態を保持している
解決方法:
# Laravel設定キャッシュのクリア
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
# OPcacheのリセット(可能であれば)
sudo service php8.3-fpm reload
失敗パターン4: 古いパッケージリスト
症状: Package 'php8.3-xml' has no installation candidate エラー
原因: パッケージリストが古い、またはリポジトリが追加されていない
解決方法:
# パッケージリストの更新
sudo apt-get update
# 必要に応じてPHPリポジトリの追加
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
予防策と今後の対応
本番環境での予防策
1. 依存関係の文書化
プロジェクトのREADMEやデプロイメントドキュメントに、必要なPHP拡張を明記しておきましょう:
## 必要なPHP拡張
- php-xml
- php-mbstring
- php-curl
- php-zip
- php-gd
2. 環境チェックスクリプト
デプロイ前に環境をチェックするスクリプトを作成:
<?php
// check-environment.php
$required_extensions = ['xml', 'mbstring', 'curl', 'zip'];
$missing = [];
foreach ($required_extensions as $ext) {
if (!extension_loaded($ext)) {
$missing[] = $ext;
}
}
if (empty($missing)) {
echo "✓ All required extensions are installed\n";
exit(0);
} else {
echo "✗ Missing extensions: " . implode(', ', $missing) . "\n";
exit(1);
}
3. Composerでの依存管理
composer.jsonで拡張要求を明示:
{
"require": {
"php": "^8.1",
"ext-xml": "*",
"ext-mbstring": "*"
}
}
監視体制の構築
前述のクライアント事例では、問題発生から弊社への連絡まで半日以上のタイムラグがありました。現在では以下の監視体制を構築しています:
- 死活監視: 5分間隔でのヘルスチェック
- エラーログ監視: 重要なエラーの即座通知
- 定期的な環境確認: 月次での依存関係チェック
これにより、問題発生から5分以内に検知できるようになり、クライアントのビジネス影響を最小限に抑えることができています。
まとめと次のステップ
DOMDocument not foundエラーは、php-xml拡張の不足という明確な原因があります。適切な手順で対処すれば、短時間で解決可能な問題です。
解決後の効果:
- Laravel アプリケーションの正常動作復旧
- 管理機能・API機能の完全復活
- バッチ処理の安定稼働
- サイトマップ生成などSEO機能の復旧
- 開発チームの生産性向上
重要なのは、問題が発生してから対処するのではなく、事前に予防策を講じることです。環境の文書化、チェックスクリプトの導入、適切な監視体制の構築により、同様の問題を未然に防ぐことができます。
もしこの記事の手順でも解決しない場合や、より複雑なサーバー環境での対応が必要な場合は、弊社までお気軽にご相談ください。20年以上の実績を活かして、迅速で確実な解決をサポートいたします。