WordPressのデータベースのURL置換に「WP-CLI」を活用する方法

WordPressのデータベースのURL置換に「WP-CLI」を活用する方法

WordPressの引っ越しやローカル環境からの移行作業。通常は「All-in-One WP Migration」などの移行プラグインを使用するのが簡単ですが、「クライアントのサーバー環境を変更できない」「セキュリティの都合で移行プラグインの導入が許可されていない」といった厳しい条件下では、手動でのデータベース移行が必要になります。

これまでは手動置換に「Search and Replace DB(SRDB)」というツールが定番でしたが、開発がやや滞りがちで、最近のPHP環境(PHP 8.x以降など)ではエラーが出てしまうケースが増えてきました。

そこで本記事では、SRDBでエラーが出てしまう方向けに、WordPress公式のコマンドラインツール「WP-CLI」を使った安全な置換方法を共有します。

SRDBの代替に「WP-CLI」を推奨する理由

  • 安全:ツールファイルをサーバーにアップロードする必要がないため、消し忘れによるハッキングのリスクがゼロです。
  • 環境に依存しにくい:PHPのバージョンアップによるエラーが起きにくく、シリアライズされたデータも壊さずに安全に処理できます。
  • WordPress公式ツール:公式がメンテナンスしているため、最新のWordPressバージョンでも安心して利用できます。

【基本】WP-CLIを使ったURL置換のコマンド

WP-CLIを使用したデータベース置換の基本コマンドは、以下の通り非常にシンプルです。

# WordPressのディレクトリへ移動
cd /Applications/MAMP/htdocs/xxxx
# テスト実行(シミュレーション)
wp search-replace "https://古いドメイン.com" "http://新しいドメイン.com" --dry-run
# テスト実行(シミュレーション・すべてのテーブル)
wp search-replace "https://古いドメイン.com" "http://新しいドメイン.com" --all-tables --dry-run
# 本番実行
wp search-replace "https://古いドメイン.com" "http://新しいドメイン.com"
# 本番実行(すべてのテーブル)
wp search-replace "https://古いドメイン.com" "http://新しいドメイン.com" --all-tables

すでにWP-CLIが使える環境(インストール済みでパスが通っている状態)であれば、作業はこれだけで完了するほど簡単です。
SSH接続ができる一般的なレンタルサーバー(エックスサーバーなど)や、パスが通っている環境であれば、WordPressのディレクトリに移動してこの1行を打つだけで安全に置換が完了します。

事前準備1:WP-CLIをグローバルインストールする(初回のみ)

Macのターミナルで “wp” コマンドをどこからでも使えるようにするため、WP-CLIをシステム全体(グローバル)にインストールします。この作業は最初の1回だけでOKです。

ターミナルを開き、以下の3つのコマンドを1行ずつ順番に実行してください。

# 1. WP-CLI本体のダウンロード
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

# 2. 実行権限を付与(プログラムとして動かせるようにする)
chmod +x wp-cli.phar

# 3. パスが通っているディレクトリに移動し「wp」という名前で保存
# (※ここでMacのパスワード入力を求められるので入力してEnter)
sudo mv wp-cli.phar /usr/local/bin/wp

最近のMacは標準でPHPが入っていないため、この時点ではまだコマンドは動きません。続けて次の手順に進んでください。

事前準備2:MAMPのPHPにパスを通す(MAMPユーザー必須)

WP-CLIを動かすにはPHPが必要ですが、Mac本体にはPHPが入っていないため、ターミナルに対して「MAMPの中にあるPHPを使ってね」と指示を出す必要があります。

設定方法には、今回だけ有効にする「一時的な方法」と、今後ずっと使えるようにする「恒久的な方法」の2種類があります。ご自身の使い方に合わせて選んでください。

方法A:一時的にパスを通す(今回だけ使えればいい人向け)

以下のコマンドを実行します。

export PATH=/Applications/MAMP/bin/php/php7.4.33/bin:$PATH

PHPのパス(php7.4.33の部分)は、ご自身のMAMPのバージョン(MAMPアプリのPreferences > PHPで確認可能)に合わせて書き換えてください。

【安心】設定の戻し方について
この設定は現在開いているターミナルのウィンドウ内だけで有効です。ターミナルを一度閉じて開き直せば元の状態に戻るため、PCの根本的な設定をいじるのが怖い方におすすめです。(※次回作業する際は、再度このコマンドを実行する必要があります)

方法B:恒久的にパスを通す(今後もWP-CLIを頻繁に使う人向け)

毎回コマンドを打つのが面倒な場合は、Macの設定ファイル(.zshrc)に「常にMAMPのPHPを使う」と書き込んでおきます。以下の2つのコマンドを順番に実行してください。

# 1. 設定ファイルにMAMPのPHPへのパスを追記する
echo 'export PATH=/Applications/MAMP/bin/php/php7.4.33/bin:$PATH' >> ~/.zshrc

# 2. 追記した設定を今すぐターミナルに反映させる
source ~/.zshrc

こちらも同様に php7.4.33 の部分はご自身の環境に合わせて変更してから実行してください。

この設定をしておけば、今後はターミナルを開くたびに自動でパスが通るようになります。

設定が成功したか確認する

方法A・Bどちらかの手順が終わったら、WP-CLIが正常に動くか確認します。

wp --info

ここでWP-CLIのバージョン情報などがズラッと表示されれば、インストールと設定は完璧に成功しています!

【本番】URL置換コマンドの実行

準備が整ったら、ターミナルでWordPressがインストールされているディレクトリ(wp-config.php がある場所)に移動します。

# WordPressのディレクトリへ移動(パスは環境に合わせて変更してください)
cd /Applications/MAMP/htdocs/xxxx

いきなりデータベースを書き換えるのは危険なため、まずは --dry-run オプションをつけて「どこが何件置換されるか」のテスト実行(シミュレーション)を行います。

wp search-replace "https://古いドメイン.com" "http://localhost:8082" --dry-run

▼プラグイン等の独自テーブルも含め、データベース内のすべてのテーブルを対象とする場合
wp search-replace "https://古いドメイン.com" "http://localhost:8082" --all-tables --dry-run

実行後、ターミナル上に表形式でレポートが表示されます。エラーがなく想定通りの件数が対象になっていれば、--dry-run を外して本番実行します。

wp search-replace "https://古いドメイン.com" "http://localhost:8082"

▼プラグイン等の独自テーブルも含め、データベース内のすべてのテーブルを対象とする場合
wp search-replace "https://古いドメイン.com" "http://localhost:8082" --all-tables

これで安全にデータベースの置換が完了しました!

よく使う便利なオプション

スマホ時はスクロールして確認できます。

オプション名 機能・内容
--dry-run 【必須級】データベースを実際には書き換えず、置換結果のシミュレーションだけを表示します。
--all-tables WordPressのプレフィックス(wp_など)がついていない独自のテーブルも含め、データベース内のすべてのテーブルを対象にします。
--skip-columns=guid 記事のguidカラムを置換対象から外します。RSSリーダー等への悪影響を防ぐため、本番環境のドメイン変更(稼働中のドメインの引越し)時は指定を推奨します。

レンタルサーバー等、MAMP以外の環境での利用について

レンタルサーバー上で直接使う場合

エックスサーバーやConoHa WINGなど、SSH接続が許可されているサーバーであれば、多くの場合最初からWP-CLIがインストールされています。その場合は、本記事で紹介したダウンロードやフルパス指定は不要で、基本の wp search-replace コマンドを打つだけで実行可能です。

サーバーでコマンドもプラグインも使えない場合の代替手段

先方のサーバーでSSH接続ができず、さらにプラグインの追加もできないような非常に制約の厳しい案件では、以下の手順で安全に移行できます。

ローカルで置換してから本番へアップロードする手順
1. ローカル(MAMP)環境にて、WP-CLIを使い本番用のURLに向けて search-replace を実行し置換を済ませる。
2. 置換が完了したデータベースを、phpMyAdmin等からSQLファイルとしてエクスポート(書き出し)する。
3. 引っ越し先のレンタルサーバーのphpMyAdminを開き、SQLファイルをインポートする。

よくある質問

Redirection プラグインなどのテーブルが変更されません。(例: wp_redirection_items など)における置換件数が「0件」になってしまった
対象テーブルのプレフィックスや指定から外れていることが原因です。WP-CLIの search-replace は、デフォルトでは標準の主要テーブル(wp_posts, wp_options など)を中心に処理します。対策: すべてのテーブルを対象にするオプション --all-tables または --all-tables-with-prefix を付与して実行してみてください。

wp search-replace 'old.com' 'new.com' --all-tables
Notice: Undefined index: HTTP_HOST などの警告が出ます
ブラウザを通さずにターミナルから直接実行しているため、「ドメイン情報(HTTP_HOST)がない」とプラグイン等がお知らせを出しているだけです。置換処理自体には全く影響がないため、完全にスルーして問題ありません。

CONTACT

webサイト制作、デザインに関するご相談、御見積のご依頼など、弊社へのお問い合わせはこちら