Appearance
本番→ローカル ファイル同期ガイド
本番環境の WordPress ファイル(テーマ・プラグイン・アップロード)をローカル環境へ rsync で同期するスクリプトの使い方と注意点をまとめています。
関連ドキュメント
- データベース同期 - 安全な実行ガイド … DB 同期スクリプトの使い方
- 本番環境デプロイ … デプロイ設定(
config/local.env)の説明
前提条件
- config/local.env が設定されていること(
DEPLOY_HOST,DEPLOY_USER,DEPLOY_SSH_KEY,DEPLOY_REMOTE_PATH,DEPLOY_LOCAL_PATHなど) - SSH で本番サーバーに接続できること
- rsync がインストールされていること(macOS には標準で含まれる)
パスは DEPLOY_REMOTE_PATH / DEPLOY_LOCAL_PATH から wp-content を自動導出します。追加の環境変数は不要です。
スクリプト一覧
| スクリプト | 役割 | 同期元 → 先 |
|---|---|---|
sync-themes-from-production.sh | テーマのみ | 本番 wp-content/themes/ → ローカル wp-content/themes/ |
sync-plugins-from-production.sh | プラグインのみ | 本番 wp-content/plugins/ → ローカル wp-content/plugins/ |
sync-uploads-from-production.sh | アップロード(メディア: 画像・PDF・動画等) | 本番 wp-content/uploads/ → ローカル wp-content/uploads/ |
sync-all-from-production.sh | DB + 上記3種 | DB 同期の後、テーマ・プラグイン・アップロードを順に実行 |
使い方
テーマの同期
bash
# プロジェクトルートから実行
./scripts/sync-themes-from-production.sh- テーマ同期時:
cocoon-child-master/myCustom/は除外されます(Git 管理対象のため上書きしません)。 - オプション:
--dry-run… 実際には転送せず、転送対象のみ表示--backup… 同期前にローカルthemesをbackups/themes_YYYYMMDD_HHMMSSにコピー--yes… 確認プロンプトをスキップ(一括スクリプトから呼ぶ場合など)
例(ドライラン):
bash
./scripts/sync-themes-from-production.sh --dry-runプラグインの同期
bash
./scripts/sync-plugins-from-production.sh [--dry-run] [--backup] [--yes]アップロード(メディア)の同期
uploads/ は メディア(画像・PDF・動画など) の保存先で、年数を重ねると容量が非常に大きくなります。--only=年 で同期対象の年(または年/月)を限定することを推奨します。
bash
# 例: 2024年・2025年分だけ同期する(推奨)
./scripts/sync-uploads-from-production.sh --only=2024,2025 [--dry-run] [--backup] [--yes]
# 例: 特定の年/月だけ同期する
./scripts/sync-uploads-from-production.sh --only=2025/01,2025/02 [--dry-run] [--yes]
# 全期間を同期する(容量に注意)
./scripts/sync-uploads-from-production.sh [--dry-run] [--backup] [--yes]--only=年… 同期対象を指定した年(または年/月)に限定。カンマ区切りで複数指定可。WordPress はuploads/年/月/で保存するため、年や年/月を指定すると転送量を抑えられます。- 注意:
--onlyを付けないと全期間を同期するため、容量が大きくなります。 --onlyと削除:--onlyを指定した場合は指定した年/月のみが同期され、他の年のファイルは削除されません(--deleteは適用されない)。過去に同期した他年のファイルはローカルに残り続けます。
完全同期(DB + テーマ + プラグイン + アップロード)
bash
./scripts/sync-all-from-production.sh [--dry-run] [--backup]- 処理順: 1) データベース 2) テーマ 3) プラグイン 4) アップロード
--dry-runを付けた場合、DB 同期は実行され、ファイル同期のみドライランになります。
同期時の注意
- 上書き: ローカル側の対象ディレクトリは本番の内容で上書きされます。重要な変更がある場合は事前にバックアップ(
--backupや手動コピー)を取ってください。 - 削除(--delete): rsync の
--deleteにより、本番に存在しないファイルはローカルから削除されます。テーマ・プラグイン・アップロードの全体同期時はこの動作になります。重要な変更がある場合は必ず--backupまたは手動でバックアップを取ってください。 - myCustom は除外: テーマ同期では
cocoon-child-master/myCustom/を除外するため、ローカルの開発用テーマは上書きされません。 - 除外リスト: プロジェクトルートの
.rsyncignoreに従い、.git/やwp-config.phpなども除外されます。 - アップロードの容量:
uploads/はメディア(画像・PDF・動画等)の保存先で転送量が多くなりやすいため、--only=2024,2025のように年で限定して実行することを推奨します。
トラブルシューティング
SSH 接続に失敗する
- 症状: 「SSH接続に失敗しました」と表示される。
- 確認:
config/local.envのDEPLOY_HOST,DEPLOY_USER,DEPLOY_SSH_KEY,DEPLOY_PORTが正しいか。- SSH 鍵のパーミッションが 600 か(
chmod 600 ~/.ssh/your-key.pem)。 - 手動で接続できるか:
ssh -i "$DEPLOY_SSH_KEY" -p "$DEPLOY_PORT" "$DEPLOY_USER@$DEPLOY_HOST" "echo test"
- known_hosts: 初回接続時はホスト鍵の確認が求められます。
StrictHostKeyChecking=yesを推奨する場合は、事前にssh-keyscan -p $DEPLOY_PORT $DEPLOY_HOST >> ~/.ssh/known_hostsで登録してください。
設定ファイルのパーミッションエラー
- 症状: 「設定ファイルのパーミッションが不適切です」と表示される。
- 対応:
chmod 600 config/local.envを実行してください。
パスが違う・同期先が空になる
- 確認:
DEPLOY_REMOTE_PATHとDEPLOY_LOCAL_PATHが、それぞれ本番・ローカルの テーマ内 myCustom ディレクトリ のフルパスになっているか。- 例(本番):
/home/user/public_html/example.com/wp-content/themes/cocoon-child-master/myCustom - 例(ローカル):
/Users/you/Local Sites/site/app/public/wp-content/themes/cocoon-child-master/myCustom
- 例(本番):
- スクリプトは上記から
wp-contentを 3 段階dirnameで導出しています。パスが異なる構成の場合はlocal.envを修正してください。
アップロード同期が重い・時間がかかる
uploads/はメディア(画像・PDF・動画等)のため容量が大きくなりやすいです。--only=2024,2025で年を限定して実行することを推奨します。
rsync で権限エラー・Permission denied
- ローカル側の
wp-content/themesやwp-content/uploads等に書き込み権限があるか確認してください。 - 本番側では、SSH ユーザーが該当ディレクトリを読み取れるか確認してください。
ドライランで挙動を確認したい
- 各スクリプトに
--dry-runを付けると、rsync のドライランが実行され、転送対象のみ表示され、実際のファイルは変更されません。 例:./scripts/sync-themes-from-production.sh --dry-run
バックアップについて
--backupを付けると、同期前に対象ディレクトリをbackups/<対象>_YYYYMMDD_HHMMSSにコピーします。backups/は.gitignoreで除外されているため、Git にはコミットされません。- データベースのバックアップは db-sync-safety-guide.md を参照してください。