Skip to content

本番→ローカル ファイル同期ガイド

本番環境の WordPress ファイル(テーマ・プラグイン・アップロード)をローカル環境へ rsync で同期するスクリプトの使い方と注意点をまとめています。

関連ドキュメント


前提条件

  • 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.shDB + 上記3種DB 同期の後、テーマ・プラグイン・アップロードを順に実行

使い方

テーマの同期

bash
# プロジェクトルートから実行
./scripts/sync-themes-from-production.sh
  • テーマ同期時: cocoon-child-master/myCustom/ は除外されます(Git 管理対象のため上書きしません)。
  • オプション:
    • --dry-run … 実際には転送せず、転送対象のみ表示
    • --backup … 同期前にローカル themesbackups/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 同期は実行され、ファイル同期のみドライランになります。

同期時の注意

  1. 上書き: ローカル側の対象ディレクトリは本番の内容で上書きされます。重要な変更がある場合は事前にバックアップ(--backup や手動コピー)を取ってください。
  2. 削除(--delete): rsync の --delete により、本番に存在しないファイルはローカルから削除されます。テーマ・プラグイン・アップロードの全体同期時はこの動作になります。重要な変更がある場合は必ず --backup または手動でバックアップを取ってください。
  3. myCustom は除外: テーマ同期では cocoon-child-master/myCustom/ を除外するため、ローカルの開発用テーマは上書きされません。
  4. 除外リスト: プロジェクトルートの .rsyncignore に従い、.git/wp-config.php なども除外されます。
  5. アップロードの容量: uploads/ はメディア(画像・PDF・動画等)の保存先で転送量が多くなりやすいため、--only=2024,2025 のように年で限定して実行することを推奨します。

トラブルシューティング

SSH 接続に失敗する

  • 症状: 「SSH接続に失敗しました」と表示される。
  • 確認:
    • config/local.envDEPLOY_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_PATHDEPLOY_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/themeswp-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 を参照してください。