WPEngineによる非推奨のWordPressプラグインリストにみるWordPressプラグインの選び方のコツ


WPEngineというのはアメリカに本社を置く大手のホスティング企業のひとつです。

名前のとおりWordPressにとても精通している企業で、海外のWordCampでは必ずスポンサーとして参加しています。

この記事で紹介するリストはそのWPEngineさんが公開している "Disallowed Plugins" というリストです。

https://wpengine.com/support/disallowed-plugins/

あらかじめ強調しておきますが、ここで紹介されているプラグインの多くはそれ自体に問題があるというよりも、不自由なインフラを使っているユーザーのニーズに応えた結果こうなったというのが現実であると思います。

なので、プラグインそのもののリストはこの記事では紹介しません。オリジナルの記事をご覧になってください。

このプラグインいいよーみたいな記事に飛びついて自分のサイトにインストールしたらハマったみたいなことは、多くの方が経験していると思いますが、WordPressプラグインにはこのように特定のインフラと相性が悪い、もしくは意味がないプラグインがあります。また仕組み的にサーバーの負荷をとても増大させるプラグインもあります。

プラグインを選択する考え方のひとつとして参考になればと思います。

## キャッシュ系プラグイン

たとえばリバースプロキシやCDNなどインフラ側でコンテンツをキャッシュしている場合、キャッシュ系のプラグインはオーバーヘッドになるだけで効果はありません。

複数のキャッシュ系のプラグインをインストールすることも同様ですね。

WPEngineでは、これらのプラグインを見つけると自動的に削除しているようですね。へー。

以下の文章が個人的にはすばらしーなーと思いました。

> you shouldn’t have to worry about the speed of your site… that’s our job. 
> サイトのスピードについてみなさんが気にする必要はありません。それは私たちの仕事です。

## バックアップ系プラグイン

WPEngineではバックアップサービスを提供しており、このバックアップはドキュメントルート外に安全に保管されているようです。

> They needlessly duplicate our built-in functionality, rely on a large amount of local storage and can store files in an insecure manner.

> それらのプラグインはWPEngineの機能と重複しており、さらに大量のファイルをローカルストレージに生成し、安全でない方法で保存しています。

補足すると、多くの汎用プラグインは、みなさんのインフラがどういう構成であるかを予測し得ないため、確実にバックアップファイルを保存できるであろう領域、つまりドキュメントルート内にバックアップを保存します。

これは、第三者によるバックアップファイルへのアクセスが可能であるかもしれないというリスクを伴うという意味で、どこにバックアップが保存されるのか、それらに対するアクセスコントロールは確実に行われているかを皆さんご自身が把握する必要があることを意味しています。

> Not only that, many of these plugins run their backup jobs at inopportune times. This can slow database connectivity with extra — and sometimes very large — MySQL queries and cause timeouts on larger sites.
> 多くのバックアッププラグインは、不適切なタイミングでバックアップジョブを開始しているため、MySQLに対して余分な、そして時には大きなクエリーを発行しており、タイムアウトの原因になることがあります。

汎用的なバックアッププラグインは皆さんのインフラがたとえばCronのような定期的なジョブを実行できるかどうかを知り得ないので、WordPressサイトにアクセスがあったことをトリガーにして、一定時間ごとのアクセスのたびにバックアップジョブを開始します。

ユーザーによるサイトへのアクセスとバックアップジョブがまったく同じタイミングで行われることは、そのユーザーにとって表示が遅い等のトラブルを招く可能性があることを理解しておきましょう。

WPEngineさんでは、バックアッププラグインでは [VaultPress](https://vaultpress.com/) をおすすめしているようです。負荷についてはどうかはわかりませんが、個人的にももし使うならこれですかね。

でもWordPressプラグインのレベルでバックアップをとること自体をあまりオススメしませんが。

## 高負荷なプラグイン

たとえばリンク切れをチェックするプラグインは、何らかのタイミングでHTTPリクエストを外部に送信するはずで、そういったプロセスはサーバー負荷の増大につながります。

他にもアクセスのたびにデータベースになんらかの情報を書き込むプラグインもあるかもしれません。

記事の人気ランキングなど、なんらかのアクセス解析結果を必要とするプラグインは、ユーザーのアクセス情報を毎アクセスのたびにデータベースに保存しているはずです。

> Almost all “Related Posts” plugins suffer from the same fundamental problems regarding MySQL, indexing and search.
> ほぼ全ての「関連記事」系のプラグインは、MySQLデータベースに対する、インデックス作成、検索等に関して根本的な問題を抱えています。

関連記事もあるあるですね。関連記事を抽出するためにデータベースをフルスキャンしている可能性があります。

一方でGoogle AnalyticsやJetPackのような外部サービスならそれらの大きなプロセスがサービス側のインフラで行われるので、みなさんのサーバーの負荷を増大させるリスクはほとんどありません。

表面的な機能だけではなく、その機能を実現するためになにが行われるのか？を想像してプラグインを導入するスキルはとても重要です。

本文の方では非推奨に対するプラグインに対する代替プラグインが紹介されていますので、ぜひご覧になってください。

## その他のプラグイン

> Hello Dolly! — Sorry, Matt.

Hello Dolly - 「ごめんマット」だそうです。笑

phpMyAdminなんちゃらなプラグインは本番環境には不要ですね。それを入れたいと思うならワークフローから見直しましょう。

もっと楽で確実な方法がたくさんあるはずです。

画像のサイズをだだーって変更する系のプラグインも本番環境でインストールする必要はないですね。WP-CLIでもできますので、開発環境でやりましょう。

別のあるプラグインはアドウエアが仕込まれているらしくプラグインディレクトリからも削除したよとのこと。これは僕はちょっと詳細わかりません。

* TimThumb — Older versions of TimThumb are known to contain vulnerabilities. When our system scan identifies an older version, it will automatically update the script. After the upgrade has been completed, the system will notify you by email.
* Uploadify — Access to this script is blocked due to known security threats. The reasoning behind this was largely informed by this blog post from our partners at Sucuri.

この二つは、特定のプラグインではなく、この二つのライブラリが使われているもの全てを使うのをやめましょうという意味です。

公式のプラグインディレクトリにこれらを使っているものはないと思いますが、もし見つけたら通報してあげましょう。

## 最後に

海外のWordCampに参加するととても多くのホスティング企業が参加しています。

それらの企業の多くは、ここで紹介したような特定のプラグインに関する知見を有しており、多くの場合インフラ事業者側の判断で不適切なプラグインの削除を行なっているようです。

また、WordPress本体のアップデートも自動的におこなっているとのこと。

ユーザーからするとこれはちょっと心配な気もしますが、かれらはその一方でWordPressそのものの開発にも積極的に参加しており、ベータ版によるテスト等もきちんと行なっているそうです。

先日WordCamp東京にきてくれたDreamHostのMikeさんも「そのほうがサポートコストが下がりますよ」とおっしゃっていました。

サポートに対して攻めの姿勢が日本とはちょっと違う印象があるんですがいかがでしょう。