自動アップデートはWordPressだと、どのように行われているか。これはwp-cronというシステムを利用しています。
なお、仕組みはこちらで解説しますが、自動更新の設定方法などの実用的な面については弊社の王が書いた記事「WordPressのテーマ・プラグインの自動更新は有効ですか」もご参照ください。
wp-cronとは?
wp-cronはWebベースのcronシステムです。特別な設定をしない限りは、サイトにアクセスがあるなど、WordPressのシステムと関与があることが行われると呼び出しされるようになっています。
自動アップデートとcronの関わり
さて、wp-cronはどのようにして自動アップデートを実行するのでしょうか。これを見ていきましょう。
まずは、以下のコマンドを実行してください(WP-CLIが必要です)。なお、wp
コマンドを実行する際はドキュメントルート(/home/kusanagi/(プロファイル名)/DocumentRoot)で実行するか、あるいは(wp
コマンド実行時に--path=(ドキュメントルートへのパス
)を指定する必要があります。
wp cron event list
結果は以下のような感じになるはずです(一部省略しています)。これは、wp-cronに登録されているイベントのリストとなります。
+--------------------+--------------------+-----------------------+------------+
| hook | next_run_gmt | next_run_relative | recurrence |
+--------------------+--------------------+-----------------------+------------+
| wp_version_check | 2025-04-15 00:54:2 | now | 12 hours |
| | 2 | | |
+--------------------+--------------------+-----------------------+------------+
自動アップデートには、ここにある、wp_version_check
が関係してきます。
自動アップデートの実態
さて、アップデートを実行するその実態であるwo_version_check
の関数に到達しました。これはどこにあるのかというと、先ほど開いたwp-includes/update.phpにあります。
まず、WordPress.orgのAPIに対してサーバの仕様(バージョン)などを送付します。これによって、互換性があるアップデートがあるかどうかをチェックしています。また、そのついでにですが、ここでwp-cron経由で実行されていることを検知すると、自動アップデートの関数を実行するようになっています。
// Trigger background updates if running non-interactively, and we weren't called from the update handler.
if ( $doing_cron && ! doing_action( 'wp_maybe_auto_update' ) ) {
/**
* Fires during wp_cron, starting the auto-update process.
*
* @since 3.9.0
*/
do_action( 'wp_maybe_auto_update' );
}
自動アップデートの実行
/**
* Performs WordPress automatic background updates.
*
* Updates WordPress core plus any plugins and themes that have automatic updates enabled.
*
* @since 3.7.0
*/
function wp_maybe_auto_update() {
require_once ABSPATH . 'wp-admin/includes/admin.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
$upgrader = new WP_Automatic_Updater();
$upgrader->run();
}
この関数でアップグレーダーを起動します。この中で、コアのアップグレードやテーマ・プラグインの自動アップグレードの処理が分かれていきます。
ここまではコア・テーマ・プラグイン共通の動作をしていました。しかし、ここから先は分かれていきます。大きな点は、有効なプラグインのアップデートにはアップデート後のロールバックテストが追加され、PHPで重大なエラーが発生すると旧バージョンに戻る機能が実装されている、ということです。他ではこれは発生しません。また、アップグレーダーのクラスも個別に用意されています。
これらについては次回解説します。