一部のWordPressプラグインがデータベースに孤立したテーブルを残す理由

公開: 2016-06-23

ディレクトリ上のWordPressプラグインのレビューは、あらゆる形とサイズで提供されます。 他の人が短くて要点にある間、いくつかは本当に役に立ちます。 たとえば、最近のWP eCommerceユーザーからのこのレビューでは、「アンインストールしたところ、孤立したテーブルが残ったため、手動でクリーンアップする必要があります。 よくできていません。」

この種のレビューは簡単に肩をすくめることができますが、WPeコマースの共同創設者であるJustinSaintonは可能な限り最善の方法で対応しました。 彼はユーザーの苦情を認め、チームがより良い方法で文書化できる重要なポイントを提起することを認めます。

「人々がWPeコマースをアンインストールまたは非アクティブ化するときにデータベースからテーブルを削除しないという非常に意図的な決定を下します」とSainton氏は述べています。

「私たちが何年にもわたって遭遇した多くの理由により、誰かがプラグインを非アクティブ化してアンインストールすることになります。 WordPressは(アンインストールルーチンがある場合)データを削除していることを明確にしていますが、これは何かをする使命を帯びているときに無視するのが非常に簡単な通知です。

「これらの理由から、アンインストール時にデータを削除しないことを意図的に決定しました(その多くは、意図せずに削除された場合、ビジネスに多大な悪影響を及ぼします)。」

孤立したテーブルとは何ですか?

孤立したテーブルとは、アンインストール時にテーブルのクリーンアップを実行しないプラグインによって残されたテーブルです。 これらのテーブルには、フォーム、エントリ、設定などのデータが含まれていることがよくあります。たとえば、TavernのテストサイトにGravityForms 2.0をインストールしたとき、6年前に作成したフォームがまだデータベースに残っていることがわかりました。 驚いただけでなく、何年も前にGravityFormsにデータを削除するように指示しなかったことに感謝しています。

プラグインを非アクティブ化してもデータは削除されません

プラグインの非アクティブ化とアンインストールには明確な違いがあります。 プラグインを非アクティブ化するプロセスは、主にトラブルシューティングプロセスが原因で、アンインストールよりも頻繁に発生します。 プラグインを非アクティブ化しても、データベースからデータが削除されることはありません。 プラグインを非アクティブ化してから、その設定を再構成する必要があるとしたら、どれほど苛立たしいことか考えてみてください。

データの削除は明示的である必要があります

代わりに、データの削除はユーザーからの明示的なアクションである必要があります。 アンインストール時にデータを削除する機能をユーザーに提供したいプラグイン開発者は、アンインストールフックを登録し、Uninstall.phpファイルを追加できます。 Uninstall.phpに関するWordPress開発者リファレンスガイドから。

プラグイン内でコードを実行せずにプラグインを記述できない場合、プラグインはベースプラグインフォルダーに「uninstall.php」という名前のファイルを作成する必要があります。 このファイルが存在する場合は、アンインストールフックをバイパスしてアンインストールプロセス中に呼び出されます。 プラグインは、「uninstall.php」を使用する場合、実行する前に常に「WP_UNINSTALL_PLUGIN」定数をチェックする必要があります。

この方法を使用する開発者は、データが削除されることを警告する明確で簡潔な確認プロンプトをユーザーに提供する必要があります。 これをうまく行うプラグインの良い例はGravityFormsです。 アンインストールルーチンは非アクティブ化プロセスとは別のものであり、警告はデータが失われることをユーザーに明確に示します。

GravityFormsのアンインストールプロセス
GravityFormsのアンインストールプロセス

2013年に居酒屋に公開されたコメントの中で、RocketGeniusの創設者であるCarl Hancockは、Uninstall.phpの提案された使用法よりも独自のアンインストールプロセスを使用する理由を説明しました。

たとえば、プラグインマネージャーを使用して、独自のテストマシンでGFとアドオンのバージョンを非アクティブ化および削除してから、異なるバージョンをアップロードしてインストールするのが一般的です。 それは、すべてのデータを失いたいという意味ではありません。 したがって、プラグインマネージャーでプラグインを削除するときに、これが発生することは望ましくありません。

これが、Gravity Forms Settings領域内に独自のバージョンのフルアンインストールを実装することを選択した理由です。これにより、エンドユーザーは、すべてのデータを削除し、すべてのデータベーステーブルを削除することが非常に明確になります。

孤立したテーブルは通常、サイトのパフォーマンスに影響を与えません

孤立したテーブルが多すぎると、サイトのパフォーマンスに悪影響を与える可能性があると考える人もいます。 私はこれが本当かどうかセントンに尋ねました、「一般的に言えば、いいえ」とセントンは答えました。

「データベースに存在するテーブルの数が特定のクエリのパフォーマンスに影響を与える可能性がある場合は確かにありますが、これらのタイプのクエリはほとんどのコンテキストで実際に実行されるべきではありません。WordPress開発者が関心を持つほとんどのコンテキストでは確かにそうではありません。 。」

孤立したテーブルとその中のデータは、WordPressデータベース内に含まれています。これは、ほとんどの平均的なユーザーがめったに飛び込むことはありません。 ほとんどの場合、データベースにあるデータとテーブルの量がバイト単位のスペースを占めていることに気付いていない可能性があります。 ほとんどの場合、孤立したテーブルはサイトのパフォーマンスを低下させず、あまり気にする必要はないことを知っておくとよいでしょう。

孤立したテーブルのクリーンアップ

データベースから孤立したテーブルを最適化してクリーンアップするプラグインは多数あります。 プラグインディレクトリをざっと検索すると、次の結果が得られます。

  • WP-最適化
  • P3(プラグインパフォーマンスプロファイラー)
  • WP-DBManager
  • WPパフォーマンスパック

ここにリストしたものよりも多くのプラグインがありますが、それぞれがWordPressデータベースと相互作用して操作します。 私は経験から、データベースのクリーニングと最適化のプラグインを使用する前に、サイトの完全バックアップを作成する必要があることを学びました。

私はかつてデータベースクリーニングプラグインを使用しましたが、それは機能しましたが、編集フローによって生成されたカスタム投稿ステータスなど、予期していなかったものを削除しました。

アンインストールプロセスはプラグインディレクトリガイドラインである必要がありますか?

プラグイン管理ページの設定リンクと同様に、ディレクトリ内の多くのプラグインは、Uninstall.phpを使用したり、アンインストールフックを登録したりしません。 データベースにデータを追加するプラグインは、データベースを削除する簡単な方法を提供するはずだと固く信じています。 これは、強制された場合、よりクリーンなデータベースの維持を支援することでユーザーに利益をもたらすというガイドラインです。

開発者の方は、プラグインによってデータが追加された後、ユーザーがデータベースからデータを削除できるようにするために何をするかをコメントでお知らせください。