WordPressの更新が突然止まってしまう理由
今日、クライアントのカスタムテーマを更新している時に、よくあるけれど厄介な障害にぶつかりました。新しい.zipファイルをアップロードして、すぐに完了メッセージが出ると思っていたのですが、WordPressにこう言われて遮られてしまったのです。
Installation failed: Destination folder already exists
このエラーは通常、更新の失敗や手動アップロードのミスを意味します。WooCommerceやElementorのような大規模なプラグインの更新がタイムアウト(多くの場合、PHPのデフォルトの30秒という max_execution_time 制限に達すること)すると、半分だけ解凍されたフォルダが残されます。WordPressはそのディレクトリを見つけると、データの上書きを恐れて処理を中断してしまいます。
「ゴースト」フォルダの特定
このエラーが発生した時、WordPressは保護機能が働いています。アップロードしようとしているものと同じ名前のフォルダがあるのを見つけ、それを勝手に触ることを拒否しているのです。まず最初に行うべきは、wp-content/plugins/ ディレクトリの確認です。ダッシュボードでプラグインが有効になっていなくても、物理的にフォルダが存在していることがあります。その「ゴースト」フォルダが原因です。
解決策1:SFTPによる手動クリーンアップ(確実な方法)
手動での削除は、ピンポイントで対処できるため私のお気に入りの方法です。FileZillaやWinSCPなどでSFTPアクセスができる場合は、以下の手順でパスをクリアしてください。
- サーバーに接続し、
/public_html/wp-content/plugins/(または/themes/)へ移動します。 - インストールしようとしているプラグインと同じ名前のフォルダを探します。
- プロのヒント: 削除する前に、そのフォルダのバックアップをデスクトップにダウンロードしておきましょう。
- サーバーからフォルダを削除します。
コマンドラインを使用している場合は、さらに高速です。ただし rm コマンドの使用には注意してください:
# pluginsディレクトリに移動
cd /var/www/html/wp-content/plugins/
# フォルダ名を確認
ls -d */
# 問題のフォルダを削除('plugin-slug' を実際のフォルダ名に置き換えてください)
rm -rf plugin-slug/
残骸がクリアされたら、ダッシュボードに戻ってアップロードを再試行してください。完璧に動作するはずです。
解決策2:WP-CLIで強制インストール
ターミナル操作を好むなら、WP-CLIが救世主になります。--force フラグを使用することで、手動削除の手間を完全に省くことができます。これにより、既存のファイルを無視してZIPファイルの内容で強制的に上書きするようWordPressに指示できます。
# プラグインの場合
wp plugin install /path/to/plugin.zip --force
# テーマの場合
wp theme install /path/to/theme.zip --force
これは、複数の環境を管理する開発者にとって最も効率的なルートです。
解決策3:ダッシュボードの「現在のものを置換」機能を使用する
バージョン5.5以降、WordPressには組み込みの安全策が用意されています。通常、既に存在するZIPをアップロードすると、「現在のものをアップロードしたもので置き換える」かどうかを尋ねる画面が表示されます。バージョン番号を比較して確認することも可能です。
ただし、この機能は有効な style.css やプラグインヘッダーが存在していることが前提です。前回のインストールが展開の途中で失敗した場合、それらのメタデータが欠落している可能性があります。もし「置換」ボタンが表示されない場合は、解決策1のSFTPメソッドを使用する必要があります。
パーミッションへの対処(403エラー)
フォルダを削除しようとしても「Permission Denied(アクセス拒否)」エラーが出ることがあります。これは、Webサーバーのユーザー(www-data や nginx など)がファイルを所有しており、SFTPユーザーに権限がない場合に発生します。所有権をリセットすることで解決できます:
# Webユーザーに所有権をリセット
sudo chown -R www-data:www-data /var/www/html/wp-content/plugins/plugin-name
# または、パーミッションを755に設定
sudo chmod -R 755 /var/www/html/wp-content/plugins/plugin-name
修正の再確認
インストールが完了したら、作業内容を確認しましょう。プラグインページでバージョン番号が正しいかチェックし、有効化します。また、すぐにサイトのフロントエンドを確認することをお勧めします。ls -l でファイルシステムを確認し、新しいフォルダに現在のタイムスタンプが付いていれば、上書きが成功した証拠です。
予防策:二度と行き詰まらないために
環境をクリーンに保ちましょう。こうしたトラブルの多くは、自動更新中のサーバータイムアウトが原因です。頻繁に発生する場合は、php.ini で memory_limit を 256M に、max_execution_time を 300 に増やすことを検討してください。大規模な更新には WP-CLI を使用することも、ブラウザベースの接続切断を避けるための優れた方法です。

