自動アップデートをするWordPressの仕組み(基礎編)と書いてあります。

自動アップデートをするWordPressの仕組み(基礎編)

福田拓朗

自動アップデートをするWordPressの仕組み(基礎編)について、プライム・ストラテジーの福田がご説明します。

自動アップデートは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で重大なエラーが発生すると旧バージョンに戻る機能が実装されている、ということです。他ではこれは発生しません。また、アップグレーダーのクラスも個別に用意されています。

これらについては次回解説します。

<< KUSANAGI専用プラグイン 1.3.8 セキュリティ機能強化アップデート詳説

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解