WordPress(コアファイル、テーマ、プラグイン)を定期的に更新することは非常に重要です。セキュリティ強化のために欠かせません。しかし、面倒なことに、更新作業には時間がかかります。特にプラグインをたくさんインストールしている方にとっては、一大イベントになるはず。更新では、一般的に次の手順を踏むことが推奨されています。

  1. ファイルとデータベーステーブルのバックアップを作成
  2. プラグインを無効化
  3. 更新
  4. プラグインを一つずつ有効化
  5. サイトの状態を確認

1つのサイトで行うだけでも厄介な作業。これが5件、10件、もしくはそれ以上になると、なおさら大変です。

セキュリティの向上とサイト管理の簡素化を目的として、WordPress 3.7では自動更新が導入されています。デフォルトでは、この便利な機能はマイナーリリース(メンテナンス、セキュリティ関連のリリースなど)と翻訳ファイルに対して有効となっていますが、あらゆる種類の更新に適用することも可能です。そこで今回は、WordPressコアフ、テーマ、プラグインの新しいバージョンがリリースされた時に自動で更新されるようにする方法をご紹介します。WordPressの自動更新について、詳しく見ていきましょう。

WordPressの自動更新
WordPressの自動更新

目次

WordPressの自動更新

一口に「WordPressの更新」と言っても、その対象は4種類あります。

  1. コアファイルの更新
  2. プラグインの更新
  3. テーマの更新
  4. 翻訳ファイルの更新

コアファイルの更新はさらに3つに分類されます。

  1. コアファイル開発版の更新(開発版WordPressでのみ利用可能)
  2. コアファイルのマイナーアップデート(メンテナンスとセキュリティ)※デフォルトで有効
  3. コアファイルのメジャーアップデート

WordPressでは、2つのwp-config.php定数と様々なフィルターにより、上記全てのタイプの更新を自動化することができます。

wp-config.phpにより自動更新を制御する

WordPressには自動更新を制御できる2つのwp-config.php定数が存在します。AUTOMATIC_UPDATER_DISABLEDの値を「true」に設定すると、全ての自動更新を無効化できます。

define( 'AUTOMATIC_UPDATER_DISABLED', true );

WP_AUTO_UPDATE_COREはコアファイルのアップデート(マイナー、メジャー、開発リリース)を制御可能です。この定数は次の通り定義できます。

# Disables all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );

# Enables all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );

# Enables minor updates:
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

開発版WordPressでは、WP_AUTO_UPDATE_COREの値はデフォルトでは「true」となっています。通常のWordPressではデフォルトで「minor」に設定されています。

全てを網羅するために、自動更新を無効化するもう一つの定数もご紹介します。ただし、この値を「true」に設定すると、テーマやプラグイン、手動更新を含め、全てのファイルの編集が無効化されてしまいます。

define( 'DISALLOW_FILE_MODS', true );

上記の代わりに、インストール、更新機能の安全性を維持しつつファイルエディタを無効化することができる、DISALLOW_FILE_EDITS定数を定義するべきでしょう。

関連記事: wp-config.phpファイル–WordPress設定方法(詳細ガイド

フィルターにより自動更新を制御する

上記の通り、定数を使って自動更新全般の有効化/無効化を設定できますが、WordPressでは、フィルターを利用して全ての種類の更新のより細かな設定もできます。

補足:フィルターはプラグイン内で利用すべきであり、自動更新は「必須プラグイン」に利用するのがお勧めです。必須プラグインは/wp-content内の特定のフォルダに入っており、自動で有効化されます。このプラグインはWordPressのプラグイン画面には表示されません。そのため、管理者が誤って無効化したり、削除したりしてしまう恐れがありません。詳しくはCodexのドキュメンテーションをご覧ください。

まず、automatic_updater_disabledフィルターで「true」の値を設定するのには、wp-config.phpAUTOMATIC_UPDATER_DISABLEDの値を「true」に設定するのと同じ効果があります。

add_filter( 'automatic_updater_disabled', '__return_true' );

auto_update_$typeフィルターでは、 $type'core''plugin''theme'または'translation')に設定する値に応じて更新を有効化/無効化できるため、あらゆる種類の更新を制御できます。

例えば、auto_update_coreフィルターで、「true」の値を設定することで、全てのコアファイルの更新を自動化することができます。

add_filter( 'auto_update_core', '__return_true' );

次の例では、テーマ、プラグイン、翻訳ファイルの自動更新を有効化しています。

add_filter( 'auto_update_theme', '__return_true' );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_translation', '__return_true' );

上記の例では、自動更新のみを有効化しましたが、このフィルターはより細かな更新の設定も可能です。次の例では、特定の2つのプラグインに対して自動更新を有効化しています。

function cb_auto_update_plugins ( $update, $item ) {
	$plugins = array ( 'hello', 'akismet' );
	if ( in_array( $item->slug, $plugins ) ) {
		// update plugin
		return true; 
	} else {
		// use default settings
		return $update; 
	}
}
add_filter( 'auto_update_plugin', 'cb_auto_update_plugins', 10, 2 );

コールバック関数には次の2つの引数があります。

  1. $update: 更新するか否かを設定するための真偽値
  2. $item: 更新の対象

関数は更新の対象が$pluginsの配列内にあるかどうかを確認し、それに応じて「true」または「false」の値を返します。

最後に、次のフィルターでtrueまたはfalseの値を設定し、開発アップデート、マイナーアップデート、メジャーアップデートの区別ができます。

add_filter( 'allow_dev_auto_core_updates', '__return_false' );
add_filter( 'allow_minor_auto_core_updates', '__return_true' );
add_filter( 'allow_major_auto_core_updates', '__return_true' );

ご存知のとおり、更新は時に失敗します。最悪の場合、更新の失敗によりサイトがダウンすることもあります。幸い、WordPressでは更新の完了(もしくは更新の試み)の後に通知を送る設定ができます。

結果、通知、デバッグメール

更新プロセスの結果に応じて、管理者のメールアドレスに異なるメールが配信されます。

  • 結果メール:コアファイルの自動更新が完了すると配信
  • 通知メール:自動更新が実行できなかった場合に配信
  • デバッグメール:開発版WordPressで配信

自動更新が成功、または失敗すると、次のいずれかの通知メールがWordPressから配信されます。

  • WordPress XXXへのサイト更新が完了しました。(自動更新が成功した場合)
  • WordPress XXXが利用可能です。今すぐ更新してください。(自動更新が失敗し手動での更新が必要な場合)
  • 緊急:更新の失敗によりサイトがダウンする可能性があります。(自動更新が失敗し、WordPressがダウンする可能性がある場合)

auto_core_update_send_emailフィルターは結果と通知のメールを制御できます。次のとおり、falseとすることで、これらのメールを無効化することができます。

apply_filters( 'auto_core_update_send_email', '__return_false' );

コアファイルのメジャーアップデート、または、テーマやプラグインまで自動更新を適用する場合などには、結果と通知のメールを受け取りたい方もいるはずです。更新の結果や種類によって配信の有無を調整したいケースも考えられます。次の例では、更新が成功した場合には結果メールが配信されないように設定しています。

function cb_auto_core_update_send_email ( $send, $type, $core_update, $result ) {
	if ( !empty( $type ) && $type == 'success' ) {
		// don't send email
		return false; 
	}
		// use default settings
		return $send; 
	}
}
add_filter( 'auto_core_update_send_email', 'cb_auto_core_update_send_email', 10, 4 );

コールバック関数には次の引数が含まれます。

  • $send 結果メールまたは通知メールを配信するか否かを設定するための真偽値
  • $type 配信したいメールの種類を設定するための文字列(成功、失敗、重大)
  • $core_update 更新の対象
  • $result コアファイル更新の結果(WP_Errorなど)

デフォルトでは、WordPress.orgからリリースされた更新に何らかのフラグが設定され更新ができない場合、管理者へ通知が届きます。通知メールは一つのリリースにつき一度だけ配信されます。send_core_update_notification_emailフィルターでは、これらの通知を配信するか否か、またいつ配信するかを調整することができます。フィルターを次のように設定します。

apply_filters( 'send_core_update_notification_email', '__return_true' );

最後に、automatic_updates_send_debug_emailフィルターは実行された更新に関する有益な情報が記載されたデバッグメールの制御ができます。デフォルトでは、開発版WordPressのみで配信されます。「false」の値を設定すると、デバッグメールは配信されず、逆に「true」の値を設定すると、通常のWordPressでもメールが配信されます。

apply_filters( 'automatic_updates_send_debug_email', '__return_true' );

WordPressの自動更新を無効化すべきケースとその理由

自動更新は、時間や作業量を大幅に削減できるため多くのユーザーにとって大変便利な機能です。
一方で、自動更新はとても安全なようであっても、全てを有効化するのが本当にベストかどうか常に考える必要があります。

時には、テーマやプラグインとの互換性の問題が起こり、機能の一部の停止や、場合によってはサイト自体の破損を引き起こすことも。サイトに多くのプラグインを利用している場合、少なくともプラグインに関しては手動の更新を行った方が安全なこともあります。手動で一つ一つ作業することにより、自動更新では発見することが困難な問題を素早く発見できます。

さらに、開発者の方は、配布する予定がない場合であっても、テーマやプラグインにつける名前には十分注意する必要があります。更新を実行する際、WordPressはプラグインディレクトリ内からプラグインの新しいバージョンを探し出し、同じ名前のものが見つかった場合ファイルを上書きします。そのため、テーマやプラグインの自動更新を検討している場合、他とは異なる独自の名前をつけるように気をつけましょう。

ここまで、開発者向けのアドバイスをご紹介してきましたが、開発者以外のユーザーはどのように自動更新を管理すべきか。以下をご覧下さい。

プラグインによりWordPressの自動更新を制御する

プラグインでWordPressの自動更新を制御することもできます。

Easy Updates Managerはシングルサイト、マルチサイトの両方で、WordPressの更新を制御できます。このプラグインはWordPressの全ての種類の更新を管理でき、個別のテーマやプラグインの自動更新を設定することもできます。また、通知メール、ユーザーのブロック、プラグイン更新の記録に関する追加機能も利用できます。

Easy Updates Manager
Easy Updates Manager

互換性が損なわれた場合、速やかにテーマとプラグインを以前のバージョンに戻す必要があります。WP Rollbackは、プラグイン画面にインストールされた全てのテーマとプラグインを以前のバージョンに復元することのできるプラグインです。「Rollback」をクリックすると、利用可能なバージョンが表示されます。

残念ながらサイトがダウンしてしまった場合、WP Rollbackでは対処できませんので、事前にバックアップを取っておき、オンラインのドキュメンテーションを注意深くお読みください。

WP Rollback
WP Rollback

最後に、WordPressサイトの自動更新に関する互換性のテストを行いたい方には、Background Update Testerのご利用をおすすめします。

有料プラグインとテーマの自動更新

有料のWordPressプラグインやテーマの開発者には、円滑な自動更新の仕組みを製品に組み込む義務があります。これは今や市場の標準となっており、それにはもちろん十分な理由があります。ご自分で更新のメカニズムを開発した上で公開してもいいですし、既存の安全なレポジトリと自動更新サービスが整ったFreemiusKernlWP Updatesなどのプラットフォームを活用する手もあります。

まとめ

WordPressの自動更新は時間や作業量を大幅に削減でき、常にサイトを最新の状態に維持できる素晴らしい機能です。あなたは全ての種類の更新を有効にしていますか?コメント欄で是非お聞かせください。

Carlo Daniele Kinsta

Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.