はじめに
WordPressのローカル開発環境をWordmoveで管理していると、「ローカルの状態をそのまま本番に反映できる」という安心感がありますよね。でも、KUSANAGIで構築した本番環境では注意が必要です。
私自身、Wordmoveで push --all
をした際に、mu-pluginsディレクトリ内の(kusanagi
ディレクト)が本番から消えてしまうというトラブルを経験しました。
「なんで勝手に消えるの!?😱」と焦りましたが、調べてみるとこれにはちゃんとした理由がありました。
この記事では、同じような構成で運用している方に向けて、
- なぜmu-pluginsが消えるのか?
- どうすれば防げるのか?
- Movefileはどう書けばいいのか?
といった実践的な内容を紹介します。
なぜmu-pluginsが消えたのか?
Wordmoveは、ローカルと本番環境を rsync
で同期しています。
そのため、ローカルに存在しないファイルは、本番側でも「不要なもの」として削除されてしまう仕様です。
つまり、
- 本番には
wp-content/mu-plugins/kusanagi/
がある - でもローカルにはそのディレクトリがない
- その状態で
wordmove push --all
を実行すると…
👉 本番側のmu-pluginsが消える!
というわけです。
解決策は「除外」+「禁止」のWガード!
この問題を防ぐには、Movefileの設定を2点変更するだけです。
mu-plugins
ディレクトリを除外する
mu-plugins
を同期対象から外すことで、ローカルとの差分チェックがスキップされ、削除されなくなります。
movefile.yml(抜粋)
exclude:
- "wp-content/mu-plugins/**"
これは production:
セクション内の exclude:
に追記すればOKです。
mu-plugins の push 自体を禁止する
うっかり --all
などを使っても、Wordmove側でブロックしてくれる設定も追加しておくと安心です。
movefile.yml(抜粋)
forbid:
push:
mu-plugins: true
この2つを入れておけば、KUSANAGIのmu-pluginが消えることはありません。
実際のMovefile設定例(抜粋)
以下は、私が設定している Movefile の production
セクションの抜粋です。
movefile.yml
production:
vhost: "<%= ENV['PRODUCTION_VHOST'] %>"
wordpress_path: /html
database:
name: "<%= ENV['PRODUCTION_DB_NAME'] %>"
user: "<%= ENV['PRODUCTION_DB_USER'] %>"
password: "<%= ENV['PRODUCTION_DB_PASSWORD'] %>"
host: "<%= ENV['PRODUCTION_DB_HOST'] %>"
exclude:
- "wp-content/mu-plugins/**"
ssh:
host: "<%= ENV['PRODUCTION_SSH_HOST'] %>"
user: "<%= ENV['PRODUCTION_SSH_USER'] %>"
rsync_options: "--archive --compress --verbose"
forbid:
push:
mu-plugins: true
まとめ
今回はこの3点に気をつけることで対応可能でした。
項目 | 方法 |
---|---|
mu-plugins の除外 | exclude に wp-content/mu-plugins/** を追加 |
mu-plugins の push を禁止 | forbid.push.mu-plugins: true を追加 |
おわりに
Wordmoveはとても便利なツールですが、本番環境に特有の設定やファイルがある場合は注意が必要です。KUSANAGIのように、本番で自動生成されるmu-pluginは、除外&禁止設定で守るのが鉄則!
同じような環境で構築している方の参考になれば嬉しいです🙌