WordPressを遅くする原因のアイツ「wp-cron.php」について解説

この記事にはプロモーションが含まれます

wp-cron.php とは何か

wp-cron.php は WordPress のプログラムの一つです。

WordPress はページが読み込まれると同時に wp-cron.php も自動的に読み込む仕組みになっています。

wp-cron.php が読み込まれると、記事の予約投稿など様々な自動処理を実行します。この wp-cron.php がある事によって、予約投稿など WordPress の便利な機能が簡単に利用できるようになっています。

そもそも cron とは何か

cron はサーバーでよく使われている Linux などの Unix系OS にて、プログラムやコマンドを決められた時間に実行し、自動処理を行うタスクスケジューラです。ギリシャ語の chronos (時間)が名前の由来と言われています。

何かを決まった時間に実行したい時、たとえば定期的なバックアップなどを設定する時には cron が使われることが良くあります。

WordPress が産まれる以前は、ブログの記事を決まった時間に公開状態にする予約投稿のためなどにも、 cron が使われることがありました。しかし、 cron は非常に専門的な操作が必要で初心者には扱いが難しい事や、操作を間違えるとサーバーを停止させてしまうような、大規模な障害さえ引き起こしかねない強力なツールだったため、レンタルサーバーでは一般のユーザーが使えないように利用を制限していることも多くありました。

そこで WordPress では、誰でも簡単に予約投稿などの機能が利用出来るように、 cron の代替手段として WordPress 独自の自動処理プログラムである wp-cron.php が用意されたのです。

wp-cron.php の問題点

wp-cron.php は初心者でも簡単に予約投稿などを設定できる、非常に便利なプログラムですがデメリットもあります。ここでは様々なデメリットについて紹介いたします。

正確な時間での実行が保証されない

ページが読み込まれると自動的に wp-cron.php が読み込まれます。つまり、アクセスが無ければ、 wp-cron.php は動きません。

夜中の 00:00 丁度に予約投稿を設定しても、その時間帯にアクセスが1件もなければ、予約投稿した記事が公開されないという事もありえます。

自分で自分のwebサイトに対して、DoS攻撃のように動く事がある

逆にアクセス数が非常に多いwebサイトを運営している場合、何度も短い間隔で wp-cron.php が繰り返し読み込まれる事になります。

極端に短い間隔での連続実行を抑制する、内部のスケジュールとロック機構(WP_CRON_LOCK_TIMEOUT)もありますが、ループバック失敗で処理が詰まり、webサイトのパフォーマンスに悪影響を与える事があります。

エラー処理が難しい

「予約投稿に失敗して、記事が投稿できていなかった」等のエラーが発生した時に、wp-cron.php の失敗は明示的なログ出力がないことが多いため、エラー原因を特定する事が難しい場合が多くあります。

上級者でも失敗原因を特定する事が難しいため、再発防止をする事も難しい状態となることがあります。

wp-cron.php を無効化するべきか迷ったら

予約投稿を使っていないから、無効にした方が良いとは一概には言えません。

予約投稿を使っていない場合でも、WordPress テーマや、プラグインなどが wp-cron.php の機能を使っている可能性があります。そのため、無効化してしまうと思いがけないトラブルが発生する場合があります。

具体的には、「お問い合わせフォームの自動返信メール処理」、「サイトマップの自動更新や検索エンジンへの通知」、「バックアップの自動実行」、「期限切れの投稿記事を自動で非公開にする機能」などに関わっている可能性があります。

無効化する場合には、利用中のテーマやプラグインのプログラムを解析する必要があるため、初心者には難易度が高く、お勧めできません。

簡単に wp-cron.php を制御して動作を軽くする方法

wp-cron.php を完全に無効化することは、初心者にはお勧めできませんが、それでも動作が重くなってしまった WordPress を軽くするための方法があります。

WP Crontrolというプラグインを導入する事で、wp-cron.php を簡単に制御する事ができます。

【WP Crontrol – WordPress プラグイン | WordPress.org 日本語】
https://ja.wordpress.org/plugins/wp-crontrol/

大量にスケジュールを登録する等して、webサイトが重くなる原因となってしまっているプラグインがある場合にも、直感的に分かりやすく見つけることができます。

スケジュールされたタスクを、一覧から有効と無効を個別に切り替える事もできるため、トラブルシューティングや問題の切り分けにも役に立ちます。

自動読み込みを無効化する方法(上級者向け)

wp-config.php のプログラムを書き換える事で、自動読み込みを無効化することができます。

無効化のためには、以下の様に wp-config.php に DISABLE_WP_CRON を true にする記述を追加します。
記述する場所は /* That's all, stop editing! Happy publishing. */と書かれた行よりも上に記載する必要があります。

define('DISABLE_WP_CRON', true);

これだけでは、WordPressの機能が上手く動作しないため、サーバーの cron 等を別途設定し、手動で wp-cron.php を呼び出すようにします。

以下の例では、アクセス数にかかわらず10分に1回読み込みが行われます。

*/10 * * * * /usr/bin/curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

プログラムの詳しい仕様については、公式ドキュメントの https://developer.wordpress.org/reference/functions/wp_cron/ 等をご参照ください。

まとめ

wp-cron.php は、WordPress の予約投稿などに使われる自動実行処理のためのプログラムです。

アクセス数が多い場合などには、webサイトを重くする原因となる場合があります。ですが、wp-cron.php を無効化するためには、専門知識が必要となるため、初心者にはお勧めできません。

そこで、WP Crontrolというプラグインを導入する事で、wp-cron.php のスケジュールを制御する方法が簡単でお勧めです。

mixhost では WordPress の簡単インストール機能があり、直ぐにWordPressをはじめる事ができます。また、スタンダード以上のプランには14日分の自動バックアップ機能もあるため、もしも操作を誤ってしまっても、バックアップから復元することができます。