あくまで自分で使うために作成したツールのため、ご使用は自己責任でお願いいたします。
WordPressでブログを運営していると、サイトのデザインの変更や、wp-config.phpやfunction.phpなどのPHPのファイルを編集したり、WordPress・プラグインのアップデートなど様々な作業があると思います。
PHPファイルの編集やアップデートする際は慎重になる必要があると思いますが、ときにはミスをして画面が真っ白みたいなことになりますよね...(私は何度もやらかしました)
そのため動作確認用のステージング環境や開発環境を用意している方も多いと思いますが、それぞれの環境で同じ作業をするはちょっと面倒ですし、手動だと反映漏れが出てしてしまう可能性もあります。
そんな問題を解決するためにコマンド一つで本番↔ステージング環境で作業内容を反映できるツールを自作しました!
本記事では、そのツールのダウンロード方法・初期設定・実行方法について解説します。
あくまで自分で使うために作成したツールのため、不具合により予期しない動作をする可能性もございます。
その際はご自身でトラブルシューティングしていただく必要も出てくるため、ブログを始めたばかりでWordPressの知識があまりない方のご使用は非推奨とします。
ご使用する際もバックアップを取るなど、元の環境を復元できる準備を必ず行って下さい。
また、本記事で紹介するシェルスクリプトが原因で本番環境が壊れるなどした場合においても一切の責任は負いかねますのでご了承ください。
この記事で分かること
- コマンド一つで WordPressの本番、ステージング環境の間で変更内容の同期を取る方法
前提条件
実行環境
| ツール | バージョン |
|---|---|
| macOS | 26.1 (Tahoe) |
| Bash | 3.2.57 |
| rsync | openrsync (protocol 29) |
| OpenSSH | 10.0p2 |
| PHP(サーバ) | 8.0.30 |
| MariaDB | 10.5.27 |
| WP-CLI | 2.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手順
- wp-syncをダウンロードする
- PATHを設定する
- 作業ディレクトリに設定用ファイルをコピーする
- 環境変数を設定する
- Basic認証関連ファイルを設定する
- 各環境のwp-config.phpを設定する
- 同期を実行する
wp-syncをダウンロードする
下記リポジトリにツール一式をアップロードしてあります。
https://github.com/hiroya232/wp-sync
同期スクリプトは実際に運用しながら随時更新しているのでこのリポジトリの内容と本記事の内容が異なるタイミングがある可能性があります。
その際は記事更新までお待ちいただければと思います。
アクセスすると↓のような画面になりますので、緑色のCodeをクリックしてリポジトリのURLをコピーします。

コピーしたら、ターミナルを開いて任意のディレクトリで下記コマンドでリポジトリをローカルにクローン(ダウンロード)します。
$ git clone https://github.com/hiroya232/wp-sync.gitBashこれでダウンロードは完了です。
上記コマンドを実行したディレクトリに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.mdBash各ファイルの簡単な説明は以下の通りです。
気になる方は目を通してみて下さい!
| ファイル名 | 内容 |
|---|---|
| bin/wp-sync | ラッパースクリプト。wp-syncコマンドのエントリーポイント |
| scripts/sync.sh | 同期処理のメインスクリプト同期方向を引数で受け取る |
| lib/activate-plugin.sh | 本番環境でのみ必要なプラグインの有効化処理 |
| lib/backup.sh | バックアップ処理 |
| lib/basic-auth.sh | Basic認証の設定/解除処理 |
| lib/deactivate-plugin.sh | ステージング環境では不要なプラグインの無効化処理 |
| lib/log.sh | ログ出力処理 |
| lib/restore.sh | エラー時のロールバック処理 |
| lib/sync.sh | DB・ファイル同期の共通処理 |
| template/ | WordPress単位で設定するファイルのテンプレート |
| template/.env.example | サーバやDBの接続情報などを設定する環境変数のテンプレート。.envファイルにコピーして編集する |
| template/.gitignore | git追跡対象外の設定 |
| template/.htaccess-basic-auth | ステージング環境で設定するBasic認証の設定内容 |
| template/.htpasswd | Basic認証のユーザ名・パスワード |
| 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 ~/.zshrcBash作業ディレクトリに設定用ファイルをコピーする
ダウンロードしたファイルのうち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 .envBash次に、.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.phpwp-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 helpBash同期処理が問題なく終了しているのにうまく反映されていない場合は、ブラウザキャッシュやサーバキャッシュが影響している可能性があるので、キャッシュ系を削除してみて下さい。
まとめ
本記事では、WordPressのステージング環境と本番環境をコマンド一つで同期できるツール「wp-sync」の使い方を紹介しました。
初期設定は少し手間がかかりますが、一度設定してしまえば wp-sync prd-to-stg や wp-sync stg-to-prd のコマンド一つで環境間の同期ができるようになります。
手動での作業ミスを防ぎ、効率的にWordPressサイトを運用したい方はぜひ試してみてください。