WordPress

【WordPress】本番環境とステージング環境をコマンド1つで簡単に同期する

あくまで自分で使うために作成したツールのため、ご使用は自己責任でお願いいたします。

WordPressでブログを運営していると、サイトのデザインの変更や、wp-config.phpfunction.phpなどのPHPのファイルを編集したり、WordPress・プラグインのアップデートなど様々な作業があると思います。

PHPファイルの編集やアップデートする際は慎重になる必要があると思いますが、ときにはミスをして画面が真っ白みたいなことになりますよね...(私は何度もやらかしました)

そのため動作確認用のステージング環境や開発環境を用意している方も多いと思いますが、それぞれの環境で同じ作業をするはちょっと面倒ですし、手動だと反映漏れが出てしてしまう可能性もあります。

そんな問題を解決するためにコマンド一つで本番↔ステージング環境で作業内容を反映できるツールを自作しました!

本記事では、そのツールのダウンロード方法・初期設定・実行方法について解説します。

あくまで自分で使うために作成したツールのため、不具合により予期しない動作をする可能性もございます。

その際はご自身でトラブルシューティングしていただく必要も出てくるため、ブログを始めたばかりでWordPressの知識があまりない方のご使用は非推奨とします
ご使用する際もバックアップを取るなど、元の環境を復元できる準備を必ず行って下さい

また、本記事で紹介するシェルスクリプトが原因で本番環境が壊れるなどした場合においても一切の責任は負いかねますのでご了承ください

この記事で分かること

  • コマンド一つで WordPressの本番、ステージング環境の間で変更内容の同期を取る方法

前提条件

実行環境

ツールバージョン
macOS26.1 (Tahoe)
Bash3.2.57
rsyncopenrsync (protocol 29)
OpenSSH10.0p2
PHP(サーバ)8.0.30
MariaDB10.5.27
WP-CLI2.8.1

Note: mysqldump / mysql / wp-cli はリモートサーバー上で実行されます。インストールされていない場合は別途インストールが必要です。

WordPressディレクトリ配置

ステージング環境が本番環境のサブディレクトリに配置されている。

public_html/             本番環境のWordPressルートディレクトリ
├── wp-admin/
├── wp-content/
├── wp-includes/
├── ...
└── stg.example.com/     ステージング環境のルートディレクトリ(サブディレクトリ)
    ├── wp-admin/
    ├── wp-content/
    ├── wp-includes/
    └── ...
Bash

手順

  1. wp-syncをダウンロードする
  2. PATHを設定する
  3. 作業ディレクトリに設定用ファイルをコピーする
  4. 環境変数を設定する
  5. Basic認証関連ファイルを設定する
  6. 各環境のwp-config.phpを設定する
  7. 同期を実行する

wp-syncをダウンロードする

下記リポジトリにツール一式をアップロードしてあります。

https://github.com/hiroya232/wp-sync

同期スクリプトは実際に運用しながら随時更新しているのでこのリポジトリの内容と本記事の内容が異なるタイミングがある可能性があります。
その際は記事更新までお待ちいただければと思います。

アクセスすると↓のような画面になりますので、緑色のCodeをクリックしてリポジトリのURLをコピーします。

コピーしたら、ターミナルを開いて任意のディレクトリで下記コマンドでリポジトリをローカルにクローン(ダウンロード)します。

$ git clone https://github.com/hiroya232/wp-sync.git
Bash

これでダウンロードは完了です。

上記コマンドを実行したディレクトリにwp-syncというディレクトリが作成されていて、その中に必要なファイル一式が格納されています。

wp-sync/
├── bin/
   └── wp-sync                 # ラッパースクリプト(エントリーポイント)
├── scripts/
   └── sync.sh                 # 同期処理(方向を引数で受け取る)
├── lib/
   ├── activate-plugin.sh      # プラグイン有効化
   ├── backup.sh               # バックアップ処理
   ├── basic-auth.sh           # Basic認証設定
   ├── deactivate-plugin.sh    # プラグイン無効化
   ├── log.sh                  # ログ出力
   ├── restore.sh              # ロールバック処理
   └── sync.sh                 # 同期処理
├── template/                   # WordPressプロジェクトにコピーする設定
   ├── .env.example            # 環境変数テンプレート(※.envにコピーして編集)
   ├── .gitignore
   ├── .htaccess-basic-auth    # Basic認証用.htaccess
   ├── .htpasswd               # Basic認証用パスワード(※要編集)
   ├── wp-config-prd.php       # 本番用wp-config.php(※要編集)
   ├── wp-config-stg.php       # ステージング用wp-config.php(※要編集)
   ├── logs/.gitkeep
   └── tmp/.gitkeep
└── README.md
Bash

各ファイルの簡単な説明は以下の通りです。

気になる方は目を通してみて下さい!

ファイル名内容
bin/wp-syncラッパースクリプト。wp-syncコマンドのエントリーポイント
scripts/sync.sh同期処理のメインスクリプト同期方向を引数で受け取る
lib/activate-plugin.sh本番環境でのみ必要なプラグインの有効化処理
lib/backup.shバックアップ処理
lib/basic-auth.shBasic認証の設定/解除処理
lib/deactivate-plugin.shステージング環境では不要なプラグインの無効化処理
lib/log.shログ出力処理
lib/restore.shエラー時のロールバック処理
lib/sync.shDB・ファイル同期の共通処理
template/WordPress単位で設定するファイルのテンプレート
template/.env.exampleサーバやDBの接続情報などを設定する環境変数のテンプレート。.envファイルにコピーして編集する
template/.gitignoregit追跡対象外の設定
template/.htaccess-basic-authステージング環境で設定するBasic認証の設定内容
template/.htpasswdBasic認証のユーザ名・パスワード
template/wp-config-prd.php本番環境のwp-config.phpの内容
template/wp-config-stg.phpステージング環境のwp-config.phpの内容
template/logs/同期処理のログを格納するディレクトリ
template/tmp/バックアップファイルを格納するディレクトリ
ダウンロードした各ファイルの内容

PATHを設定する

wp-syncコマンドをどこからでも実行できるように、PATHに追加します。

~/.zshrc(または~/.bashrc)に以下を追加してください。

export PATH="/path/to/wp-sync/bin:$PATH"
Bash

追加したら、ターミナルを再起動するか、以下のコマンドで設定を反映します。

source ~/.zshrc
Bash

作業ディレクトリに設定用ファイルをコピーする

ダウンロードしたファイルのうちtemplateディレクトリの中身を、同期処理用にローカルに作成した作業ディレクトリに.wp-syncという名前でコピーします。

以下のような状態になっていればOKです。

working-directory/
└── .wp-sync/
    ├── .env.example
    ├── .gitignore
    ├── .htaccess-basic-auth
    ├── .htpasswd
    ├── wp-config-prd.php
    ├── wp-config-stg.php
    ├── logs/
    └── tmp/
Bash

環境変数を設定する

各環境のサーバの情報やドメイン名など、同期処理を実行するにあたって必要な情報を設定します。

まず、.env.example.envにコピーします。

$ cd /your/wordpress/project/.wp-sync
$ cp .env.example .env
Bash

次に、.envを編集して各環境変数を設定します。

環境変数名設定内容設定例
PRD_DOMAIN本番環境のドメイン名。example.com
STG_DOMAINステージング環境のドメイン名。stg.example.com
PRD_SSH_DESTINATION / STG_SSH_DESTINATION本番/ステージング環境を構築しているサーバのホスト名・ユーザ名。xs◯◯◯◯◯◯@xs◯◯◯◯◯◯.xsrv.jp
PRD_SSH_PORT / STG_SSH_PORT本番/ステージング環境のSSHポート番号。10022
PRD_PUBLIC_DIR_PATH / STG_PUBLIC_DIR_PATH本番/ステージング環境の公開ディレクトリパス。/home/xs◯◯◯◯◯◯/example.com/public_html
PRD_DB_HOST / STG_DB_HOST本番/ステージング環境のDBホスト名。localhost または mysql12016.xserver.jp
PRD_DB_NAME / STG_DB_NAME本番/ステージング環境のDB名。xs◯◯◯◯◯◯_wp◯
PRD_DB_USER / STG_DB_USER本番/ステージング環境のDBユーザ名。xs◯◯◯◯◯◯_wp◯
PRD_DB_PASSWORD / STG_DB_PASSWORD本番/ステージング環境のDBパスワード。-
EXCLUDES同期対象外のパス(カンマ区切り)。wp-content/cache,wp-content/uploads/backwpup-*-logs
PLUGINSステージング環境では無効化するプラグイン(カンマ区切り)。wordfence,redis-cache,wp-optimize,autoptimize
環境変数の設定する内容と例

Basic認証関連ファイルを設定する

本番→ステージング、ステージング→本番のように同期処理を行った際にBasic認証の設定・解除を行う処理が実行されるため、その際必要になる設定を行います。

設定が必要なのは下記2ファイルです。

  • .htaccess-basic-auth
  • .htpasswd

.htaccess-basic-auth

HTPASSWD_PATH_WITH_DESTINATIONで設定した.htpasswdファイルのパスをAuthUserFileに設定します。

# .htaccess-basic-auth

AuthUserFile "/home/xs◯◯◯◯◯◯/example.com/htpasswd/stg.example.com"
AuthName "Member Site"
AuthType BASIC
require valid-user

.htpasswd

ステージング環境で使用する.htpasswdのファイルの内容を記載します。

# .htpasswd

{ユーザ名}:{暗号化されたパスワード}

各環境のwp-config.phpを設定する

各環境のwp-config.phpの内容をそれぞれ下記2つのファイルにコピペします。

  • wp-config-stg.php
  • wp-config-prd.php

これで同期処理実行の準備は整いました!

次の手順で動作確認をしていきます。

同期を実行する

まずは試しに本番→ステージングの同期処理を実行してみます。

何かあってもすぐ復元できるように、実行する前に必ず本番環境の(必要であればステージング環境も)バックアップを取って下さい

作業ディレクトリのルートで、下記コマンドを実行します。

wp-sync prd-to-stg    # 本番 → ステージング同期
Bash

すると、更新されたファイルの数にもよりますが、大体数秒〜10数秒くらいで同期が完了します。

$ wp-sync prd-to-stg
[INFO] 本番 → ステージング同期を開始します...
[INFO] ログファイル: .wp-sync/logs/prd-to-stg_2024-01-01_12-00-00.log

[バックアップ] ステージング環境のDBをバックアップ中...
[完了]

[同期] 本番のDBをステージングに同期中...
[完了]

 ・
 ・
 ・

[SUCCESS] 本番 → ステージング同期が完了しました
Bash

逆方向の同期(ステージング→本番)を行う場合は以下のコマンドを実行します。

wp-sync stg-to-prd    # ステージング → 本番同期
Bash

ヘルプを表示する場合は以下のコマンドを実行します。

wp-sync help
Bash

同期処理が問題なく終了しているのにうまく反映されていない場合は、ブラウザキャッシュやサーバキャッシュが影響している可能性があるので、キャッシュ系を削除してみて下さい。

まとめ

本記事では、WordPressのステージング環境と本番環境をコマンド一つで同期できるツール「wp-sync」の使い方を紹介しました。

初期設定は少し手間がかかりますが、一度設定してしまえば wp-sync prd-to-stgwp-sync stg-to-prd のコマンド一つで環境間の同期ができるようになります。

手動での作業ミスを防ぎ、効率的にWordPressサイトを運用したい方はぜひ試してみてください。

-WordPress