WordPressプラグインは、公式プラグインだけでも5万個以上存在します。そのため、必要なタスクの実行や問題解決のために、類似プラグインをいくつか試して、比較することはよくあるはず。そしてその後、目的を達成したら、プラグインを無効化し、削除している方が多いでしょう。ところが、こうした使い方ではWordPressのデータベースにテーブルや行が残ってしまい、蓄積されるとサイトパフォーマンスに影響したり、ディスクスペースの使いすぎで無駄な費用が発生することもあります。この記事では、データベースがコンパクトで高速な状態を保てるよう、WordPressプラグインを適切にアンインストールするヒントをご紹介します。
WordPress管理画面でプラグインを削除する方法
WordPressプラグインの適切なアンインストール方法を解説する前に、まずは一般的な方法について触れておきます。1つ目は管理画面から行う方法です。WordPressを通常の(データを削除しない)方法で削除するには、以下の手順に従います。
手順1
管理画面の「インストール済みプラグイン」に移動し、対象プラグインの「無効化」リンクをクリックします。ここでは例として、Wordfence Securityプラグインを削除します。

手順2
次に「削除」をクリックすれば完了です。

FTP経由でWordPressプラグインを削除する方法
もうひとつの一般的な方法は、FTP経由で(データを削除せずに)プラグインを削除する方法です。手順は以下の通りです。
手順1
SFTPでWordPressサイトに接続します。
手順2
「/wp-content/plugins/」フォルダを参照し、サーバーから対象のプラグインフォルダを削除します。

このように非常にシンプルですが、実はこれだけでは不十分であることがほとんど。特に、今後使用する予定がないプラグインの場合は、適切に削除しなければなりません。
WordPressプラグインのアンインストールにまつわる大きな課題
WordPressのプラグインやテーマは、データベースに情報を保存する仕組みになっています。先ほどのような簡易的な方法でプラグインを削除しただけでは、データベースにテーブルと行が残ってしまうことがあります。繰り返していると、多くのデータが蓄積され、サイトの速度を低下させることさえあります。この例では、Wordfence Securityプラグインを削除したところ、以下のスクリーンショットが示すように、データベースに24件のテーブルが残りました。

プラグインの多くは、データベースのテーブルや行だけでなく、フォルダやファイルも残します。
とくにセキュリティやキャッシュのプラグインでは、ログ保存用の追加ディレクトリを生成する傾向があります。Wordfenceプラグインの例では、プラグインの削除後、wp-contentディレクトリに「wflogs」フォルダが残りました。Wordfenceが悪いと言いたいわけではなく、一般的なプラグインやテーマの多くはこのような仕組みになっています。

先ほどの一般的な削除方法では、クリーンアップが必要になります。プラグインの無効化は、あくまで「有効でない」状態でしかないことを念頭に置いてください。停止中のプラグインが使用しているプラグインの数を上回るようであれば、削除してしまうことをおすすめします。停止中のプラグインは、たとえ使用していなくてもセキュリティリスクを引き起こす可能性がありますし、データベースを肥大化してしまいます。

なぜこのような仕様なのか
プラグインのアンインストール時、なぜ自動的にクリーンアップする仕様になっていないのでしょうか。実際にはクリーンアップ機能が用意されていることもありますが、わかりにくい場合がほとんどです。これには、以下のような理由があります。
サイト独自の設定を保持するため
最初の理由は、多くのWordPressユーザーが、高頻度でプラグインを入れたり消したりを繰り返すことを想定しているためです。データベースにテーブルと行を残し、設定を保持しておけば、後日プラグインを再インストールしてもすべてのデータが再利用できます。また、何らかの理由でプラグインを削除してしまっても、慌てずに済みます。非技術者にとっては確かに恩恵となりますが、効率面ではベストな方法とは言えないでしょう。
もちろん、後からまたプラグインを利用するかもしれない事情がある場合も、先ほどの簡単なプラグイン削除方法のどちらかを使ったほうがいいでしょう。
パフォーマンスについて軽視している
プラグイン削除時にテーブルを残しても、サイトのパフォーマンスには影響を与えないと主張する開発者もいます。しかし、想像してみてください。10年以上にわたって何百ものプラグインを使用し、何千もの行やテーブルを生成してしまうこともあり得ます。データベースクエリは、WordPressのサイトパフォーマンスに大きな影響を与えますし、きちんと設計されたプラグインでなければ、データベースへのリクエストを大量に行う可能性があります。通常、良質なプラグインであれば必要なテーブルや行のみをクエリするはずですが、必ずしもそうとは限りません。
Kinstaでは、wp_optionsテーブルに不要な自動読み込みデータが残っていることが原因で、長いデータベースクエリが発生し、速度が低下してしまっているサイトを実際に見てきています。
そして、ディスク容量の問題もあります。ほとんどのサーバーでは、使用するディスク容量によって料金が変動するか、速度などに制限がありますが、データベースもこれに含まれます。
単なる開発ミス
プラグイン開発者向けドキュメントであるWordPressプラグインハンドブックでは、プラグインを無効化する方法と、プラグインをアンインストール(データを削除)する方法のベストプラクティスの項目で、以下のように補足しています。
経験の浅い開発者は、アンインストールのフックと無効化のフックを混合してしまうことがあります。
プラグインの仕様が間違っていた場合、アンインストール時にすべてのデータを削除するべきところが、無効化するだけになり、データがすべて残ってしまいます。
たいていはクリーンアップ方法が用意されている
しかしながら、適切なクリーンアップ方法が準備されているプラグインも多数あります。そうであっても、適切なアンインストール方法をはっきり明示していないことがほとんどです。ウェブマーケターでブロガーのKevin Muldoon氏は最近、WordPress.orgがアンインストール方法の選択を義務化すべき理由についてブログ記事を投稿しました。記事によれば、WordPressプラグインをアンインストールする際、3つのオプションから選択できることが望ましいとしています。
- プラグインの削除
- プラグインとデータの削除
- プラグイン、データ、設定の削除(完全削除)
未だ実現されていませんが、いずれはこのような義務化が行われるのを期待したいものです。
WordPressプラグインを適切にアンインストールする方法
ここではWordPressプラグインやテーマを適切に削除するヒントをご紹介します。状況に応じて、プラグイン作者があらかじめ用意した削除方法を使用するか、データベースのセルフクリーンアップを実施します。
手順1
ここでも引き続き、Wordfenceプラグインを例に解説します。各WordPressプラグインの適切なアンインストール方法は、プラグインの開発元によって異なります。そのため、Googleで検索したり、公式ドキュメントを読んだり、メールで問い合わせたりするなどして確認する必要があります。以下のスクリーンショットは、「Wordfenceをアンインストールする方法」で検索したものです。1件目にWordfenceを完全に削除する方法の公式ドキュメントがヒットしています。

手順2
信頼できる開発元のプラグインであれば、プラグインの設定画面に、完全アンインストールのオプションが用意されているはずです。以下は、有名プラグイン「Gravity Forms」の例です。アンインストールボタンをクリックすれば、すべてのテーブルとデータを消去できます。

こちらは、多言語プラグイン「Polylang」の例です。「ツール」セクションに、「プラグイン削除時にすべてのデータを削除」のオプションが用意されています。プラグインを削除するとき、管理画面プラグインページ内の「削除」リンクをクリックする前に、あらかじめこれを有効化しておく必要があります。

多言語プラグインが適切にアンインストールされてないと、対象の言語を使用していないにもかかわらず、プラグインなどの翻訳ファイルを不必要に更新し続けることがあります。

Wordfenceは少し特殊で、Wordfence Assistantという別のプラグインが必要です。プラグインをインストールすると、Wordfenceのデータとテーブルの削除、ブロック対象IPの消去、ライブトラフィックデータの消去が可能になります。

他にも、さらに複雑な手順が必要なプラグインが多数あります。例えばWooCommerceでは、すべてのデータを完全に削除するには、事前にwp-config.phpファイルに以下のコードを記述する必要があります。
define( 'WC_REMOVE_ALL_DATA', true);
こうした手順が必要なため、プラグインの無効化や削除を行う前に、きちんと削除するための適切な対応を確認することが重要です。以下に、各有名プラグインのアンインストール方法の解説記事例をまとめています。
- WP Rocketのアンインストール
- WP Super Cacheのアンインストール
- UpdraftPlusのアンインストール
- W3 Total Cacheのアンインストール
- Comet Cacheのアンインストール
使わなくなったショートコードの削除
ショートコードを使ったプラグインを削除すると、ショートコードを置き換えるまでの間、サイトに不要なコードが表示されてしまうかもしれません。このような場合は、functions.phpファイルに以下のコードを追加するだけで、古いプラグインのショートコードを一時的に無効化できます。この例では「pluginshortcode」というショートコードの実行内容を直接指定します。
add_shortcode( 'pluginshortcode', '__return_false' );
これで、ショートコードは非表示になります。ただし、元のプラグインを再度使用する場合、このコードを削除し忘れないようにしてください。それさえ念頭に置けば、元のショートコードを、例えば別のプラグイン用のショートコードで置き換えるまでの間、サイトに余計なコードを表示させずに済む手軽な方法と言えます。
プラグインが残したテーブルを手動でクリーンアップする方法
クリーンアップしたいプラグインが、すでにアンインストール済みという場合もあるでしょう。あるいは、そもそもプラグイン作者自身が、データベーステーブルの手動削除を推奨している場合もあります。いくつかやり方がありますが、プラグインを使用する方法と、phpMyAdminで直接テーブルを削除する方法をご紹介します。
いずれの方法でも、事前にWordPressサイトのバックアップを取ることを強くおすすめします。Kinstaユーザーであれば、MyKinstaでワンクリックでバックアップを作成できます。

または、人気のWordPressバックアッププラグインを利用しましょう。
プラグインでテーブルをクリーンアップ
プラグインを使用する場合、一番のおすすめは、Advanced Database Cleanerです。有料ですが、使用中のWordPressをスキャンし、孤立したテーブルを削除することができます。以下のスクリーンショットでは、使わなくなったプラグインであるEDD(wp_edd*)、Gravity Forms(wp_gf*)、Bloom(et_bloom*、et_social*)、の各テーブルを検出しました。

phpMyAdminでテーブルをクリーンアップ
phpMyAdminが使用できる場合、プラグインを使うよりも、手動でテーブルをクリーンアップするほうがおすすめです。各プラグインは、一般的にプラグイン名にちなんでテーブル名を命名しています。例として、公式ドキュメントに従ってYoast SEOを完全に削除してみましょう。Yoast SEOには専用の削除画面が用意されていないため、データを削除し、完全にアンインストールするにはphpMyAdminを使うほかありません。公式ドキュメントでは以下のように説明されています。
プラグインデータをすべて削除するには、wpseoを含むエントリーをデータベースから検索し、手動でデータを削除してください。
これを行うには、まずphpMyAdminにログインします。「検索」タブに移動し、検索条件に「wpseo」と入力し、すべてのテーブルを選択して「実行」をクリックします。

私たちのサイトでは、3件のテーブル(wp_options、wp_postmeta、wp_usermeta)に一致する行が見つかりました。各テーブルをクリックして、「wpseo」を含む行を削除します。

下記はwp_optionsテーブルです。WordPressのcronジョブ用の行など、option_value内にあるWordPress独自の行が「wpseo」を含んでいる場合もあります。重要なステップとして、必ず最初に「wpseo」で行をフィルタリングしてください。フィルタリング結果をすべて選択し、削除します。

以下はwp_postmetaテーブルです。「wpseo」を含む行を削除します。

以下はwp_usermetaテーブルです。ここでも最初に「wpseo」で行をフィルタリングすることがとても重要です。その後、一致した行を選択し、削除します。

新機能の「テキストリンクカウンター」を使用している場合、さらに「wp_yoast_seo_links」と「wp_yoast_seo_meta」の2つのテーブルの削除が必要です。

最後に、プラグインで実行されるcronジョブがある場合、クリーンアップが必要です。もちろん、wp_optionsテーブルの「cron job」行を編集することもできますが、間違った行を変更しないためには、無料のWP Crontrolプラグインを使用したほうが簡単にcronジョブを削除できます。Yoast SEOプラグインでは「wpseo_onpage_fetch」というcronジョブを使用しており、簡単に削除できます。

まとめ
WordPressプラグインの適切なアンインストール方法について、今までご存知なかった方も、概要をご理解いただけたかと思います。現在使用可能なプラグインの大半には、適切な削除方法に関するドキュメントが用意されていおり、設定内に削除機能があるものもあります。いずれも見当たらない場合は、Googleで検索してみてください。
WordPressの管理者権限なしでプラグインを無効化する方法はこちらをご覧ください。
今後プラグインを削除する際には、データを残す必要があるかを考え、不要であれば、プラグインを適切にアンインストールするようにしてください。そうすれば、データベースをコンパクトに保ち、ディスク容量を最小限に抑えることができます。また、リビジョンの削除や制御により、データベースを最適化することもお忘れなく。