実際にWEBページとして公開中の本番環境にあるWordpressのサイトを、自分のPC上のローカル環境(localhost)に移行する方法について。
前提条件
- ローカル環境にWordpressがインストール済みであること。
- 本番環境とローカル環境のどちらもでphpMyAdminが使えること。
- 本番環境のデータがコピーできること(FTPソフトでサーバーにつなげる)
ローカル環境にWordpressを構築する方法は、XAMPP、Local by Flywheel、Dockerなど様々な方法がある。
ここでは、Dockerを使ってローカル環境上にWordpressを構築している。構築は比較的短時間でできる。もちろん、phpMyAdminも使える。詳細については以下ご参照。
>【Windows】Dockerを使ってWordpressの環境を簡単に構築する方法。
本番環境のデータをローカルにコピーするには、サーバーがプロトコルWebDAVをサポートしてるのであれば、ローカルのフォルダのようにアクセスできるように設定するのが簡単。
>【超簡単】WebDAVを使ってレンタルサーバーのディレクトリをローカルのフォルダ(エクスプローラー)に表示する方法
FTPソフトを使うのであれば、FFFTPやWinSCPなどがある。WinSCPの使い方は以下をご参照。
>【画像で解説】WinSCPの使い方。無料FTPソフトでサーバーと接続しファイルをダウンロード・アップロードする方法
ローカルにWordpressを構築する手順
まずは全体の流れをザット確認する。
- 本番環境のバックアップをとる。
- 本番環境のサイトのルートディレクトリをまるごとダウンロードする。
- 本番環境のphpMyAdminからデータベースのSQLファイルをエクスポートする。
- ローカル環境のphpMyAdminにSQLファイルをインポートする。
- インポートしたテーブルの内容を編集する。
- 本番環境のフォルダをローカル環境にコピーする。
- ローカル環境のWordpressのwp-config.phpを編集する。
- ブラウザで確認する。
本番環境のバックアップをとる
本番環境にあるWordpressのデーターベースをいじるので、まずはバックアップをとっておくことを推奨。
バックアップの取得とサイトの復元には、便利なプラグインが用意されている。中でも UpdraftPlus WordPress Backup Plugin が特におすすめ。
操作が簡単、機能も充実していて、無料で使える。もちろん、データベースのバックアップもできる。使い方は以下をご参照。
【画像で解説】WordPressで簡単にバックアップを取る方法。おすすめプラグインUpdraftPlus WordPress Backup Pluginの使い方手順を解説。
バックアップ自体は小規模サイトであれば、1~2分で完了する。
本番環境のサイトのルートディレクトリをまるごとダウンロードする
バックアップの取得が完了したら、次に本番環境のWordpressサイトのルートディレクトリをまるごとダウンロードする。
WordPressサイトのルートディレクトリとは、wp-admin, wp-content, wp-includesなどのフォルダが入っているディレクトリ。ファイルも含めてまるごとダウンロードする。
WebDAVを使ってローカル環境からフォルダエクスプローラーでアクセスできる場合は、普通のフォルダと同じく、対象を選択して、ctrl +c でコピーして、ローカルの好きな場所に ctrl + v すれば完了。
>【超簡単】WebDAVを使ってレンタルサーバーのディレクトリをローカルのフォルダ(エクスプローラー)に表示する方法
FTPソフトを使う場合にコピーするフォルダも同じ。
>【画像で解説】WinSCPの使い方。無料FTPソフトでサーバーと接続しファイルをダウンロード・アップロードする方法
本番環境のphpMyAdminからデータベースのSQLファイルをエクスポートする
本番環境のphpMyAdminにログインして、現在公開中のデータベースのSQLファイルをエクスポート(出力)する。
phpMyAadminのログインページにアクセスする
phpMyAdmimのログインページの場所は使っているサーバーによって異なる。「使っているサーバー名 phpMyAdmin」で検索すればたいていヒットします。一例として、lolipopの場合は以下のようになる。
lolipopサーバーの場合
管理画面にログインし、「サーバーの管理・設定」→「データベース」を選択。
「phpMyAdminを開く」のボタンをクリックします。
これで、phpMyAdminが開く。
phpMyAdminにログインする
phpMyAdminにログインするためには、ユーザー名、パスワード、サーバー(ホスト)の選択が必要。この情報はすべて、自分のWordpressサイトのルートディレクトリにある wp-config.php で確認できる。
先程ダウンロードしてきたWordpressサイトのルートディレクトリを開き、wp-config.php をエディタで開く。
ファイルを開くと20行目あたりに、「ユーザー名」「パスワード」「ホスト名」が記載されてる。これをphpMyAdminのログイン画面に入力する。
入力が完了したら「実行」をクリックします。これでphpMyAdminへのログインが完了。
SQLファイルのエクスポート
phpMyAdminへのログインが完了したら、SQLファイルのエクスポートを行う。
1つのデータベースに、1つのWordpressサイトを割り当てている場合
1つのWordpressサイトに対して、1つのデータベースを割り当ている場合は、データベースを丸ごとエクスポートする。
左カラムでデータベースをどれも選択していない状態で、「エクスポート」タブをクリックし、エクスポート方法で「詳細 – 可能なオプションをすべて表示」にチェックをいれ、「データベース」で対象のDBを選択する。
あとの設定には変更を加えず、一番下までスクロールして「実行」をクリックする。これで、現在のデータベースに関するSQLファイルがダウンロードできる。
1つのデータベースに、複数のWordpressサイトを割り当てている場合
WordPressは1つのデータベースの中に複数展開することができる。それぞれ中のテーブルにはサイト毎に固有の接頭語が与えられ識別できるようになっている。
このデータベースを丸ごとエクスポートして、ローカルにインポートすることもできなくはないが、ファイルが重くなったり、インポートの上限ファイルサイズを変更したり、編集時にテーブルを探す手間が増えたりするので、余計なテーブルは除外して、必要なテーブルのみをインポートする。
まずは、Wordpressで使用しているテーブルの接頭語を確認する。
先程ダウンロードした、ルートディレクトリ直下にある wp-config.php をエディタで開く。
この中の60行目あたりに、$table_prefix という変数があり、ここで指定されている文字列が、このプロジェクトのテーブルの接頭語になる。
/**
* WordPress データベーステーブルの接頭辞
*
* それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
* インストールすることができます。半角英数字と下線のみを使用してください。
*/
$table_prefix = 'wp_';
上記例の場合、「wp_」がついているテーブル名が、このサイトのテーブルになる。
確認が完了したら、phpMyAdminの左カラムで対象のデータベースを選択した状態で、「エクスポート」タブをクリックし、エクスポート方法で「詳細 – 可能なオプションをすべて表示」にチェックをいれ、「テーブル」で対象外のテーブルのチェックを外す。
あとの設定には変更を加えず、一番下までスクロールして「実行」をクリックする。これで、現在のデータベースに関するSQLファイルがダウンロードできる。
ローカル環境のphpMyAdminにSQLファイルをインポートする
次に、エクスポートしたSQLファイルを、ローカル環境のphpMyAdminにインポートする。
ローカル環境で起動しているphpMyAdminのページに移動しログインする。(※注意:ログインに必要なユーザー名とパスワードは本番環境のものとは異なる)
ローカルのphpMyAdminのログインに必要な情報
ログインに必要な情報は、ローカル環境で起動しているWordpressのルートディレクトリのwp-config.phpの中に記述されている。
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_db' );
/** MySQL database username */
define( 'DB_USER', 'wp_user');
/** MySQL database password */
define( 'DB_PASSWORD', 'root' );
/** MySQL hostname */
define( 'DB_HOST', 'db' );
例えば、上記例であれば、データベース名は wp_db, ユーザー名は wp_user, パスワードはroot, ホスト名はdb。
Dcoker上で起動したWordpressの場合は記述が若干異なる。getenv_dockerという関数を使って、dockerの環境変数を引っ張ってきている。
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );
/** MySQL database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'example username') );
/** MySQL database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'example password') );
/**
* Docker image fallback values above are sourced from the official WordPress installation wizard:
* https://github.com/WordPress/WordPress/blob/f9cc35ebad82753e9c86de322ea5c76a9001c7e2/wp-admin/setup-config.php#L216-L230
* (However, using "example username" and "example password" in your database is strongly discouraged. Please use strong, random credentials!)
*/
/** MySQL hostname */
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql') );
これらの環境変数は、docker-compose.ymlに記述してある。
SQLファイルのインポート
phpMyAdminにログインができたら、左カラムで対象のデータベースを選択し、「インポート」タブをクリックする。
「ファイルを選択」で先程エクスポートした 〇〇.sql ファイルを選択する。
あとの設定はデフォルトのままで、一番下までスクロールし「実行」をクリックする。
これで、本番環境のテーブルがローカル環境に移った。ただし、このままでは使えないのでローカルの設定合わせて変更する必要がある。
インポートしたテーブルの内容を編集する
インポートしたファイルは本番環境のURLを参照する設定になっているので、これをローカル環境に合わせて変更する必要がある。
テーブルの編集方法はいくつかある。
- pypMyAdminでテーブルを個別に修正する
- phpMyAdminでテーブルをまとめて修正する
- DB置換プラグインを使う
簡単なのは2~3だが、何をしているかが分かったほうがいいので、まずは個別に修正を行う方法について解説する。
ちなみに、エディタでSQLファイルを開いて一括置換すると、必要な情報も置き換わってしまい、ページが表示されなくなるので、この方法は使えない。
pypMyAdminでテーブルを個別に修正する
対象となるファイルは基本的には「xxx_options」「xxx_posts」「xxx_postmeta」の3つ。それぞれのテーブルの該当箇所を編集(またはSQLクエリを実行)していく。
xxx_optionsテーブルの編集
xxx_optionsというテーブルを編集する。option_nameのsiteurlとhomeの値が、本番環境のURLになっているのでこれを変更する。
変更後のサイトURLは、ローカル環境を構築したとき生成されたxxx_optionsテーブルを確認する。
上記例だと、http://localhost:10090 となる。
左の「編集」ボタンをクリックして手動で変更する。あるいは、SQLで一括置換することも可能。updateを使ってSQLタブからクエリを実行する。
update `インポートしたテーブル名` set カラム名=replace (カラム名,'置換前','置換後');
※実行前に、「クエリをシミュレート」で確認する。該当するクエリがいくつあるか表示される。
実例
実例は以下のようになる。サイトによってはhttpsではなく、httpの場合もあるので、どちらも置換対象とする。
update `xxx_options` set option_value=replace (option_value,'http://本番環境のドメイン','http://localhost:10090');
update `xxx_options` set option_value=replace (option_value,'https://本番環境のドメイン','http://localhost:10090');
これで、「クエリをシミュレート」後に、問題がなければ「実行」をクリックする。
以上で置換が完了。(トップページの移管)
xxx_postsテーブルの移管
続いて、投稿を管理しているxxx_postsテーブルを編集する。
本番環境のドメインが使われている可能性があるカラムは「guid」と「post_content」。本番環境によってはhttpsとhttpが混在している場合があるので、それぞれに置換を実施する。
update `xxx_posts` set guid=replace (guid,'http://本番環境のドメイン','http://localhost:10090');
update `xxx_posts` set guid=replace (guid,'https://本番環境のドメイン','http://localhost:10090');
update `xxx_posts` set post_content=replace (post_content,'http://本番環境のドメイン','http://localhost:10090');
update `xxx_posts` set post_content=replace (post_content,'https://本番環境のドメイン','http://localhost:10090');
xxx_postmetaテーブルの移管
本番環境のドメインが使われている可能性があるカラムは「meta_value」。本番環境によってはhttpsとhttpが混在している場合があるので、それぞれに置換を実施する。
update `xxx_postmeta` set meta_value=replace (meta_value,'http://本番環境のドメイン','http://localhost:10090');
update `xxx_postmeta` set meta_value=replace (meta_value,'https://本番環境のドメイン','http://localhost:10090');
以上でテーブルの置換は完了。ここでは個別に置換したが、以下ではまとめて実行する方法についてご紹介。
phpMyAdminでテーブルをまとめて修正する
phpMyAdminでテーブルをまとめて修正するには、左カラムでデータベースのみ選択した状態(テーブルを選択していない状態)で、「SQL」タブをクリックし、クエリをまとめて実行する。
update `xxx_options` set option_value=replace (option_value,'http://本番環境のドメイン','http://localhost:10090');
update `xxx_options` set option_value=replace (option_value,'https://本番環境のドメイン','http://localhost:10090');
update `xxx_posts` set guid=replace (guid,'http://本番環境のドメイン','http://localhost:10090');
update `xxx_posts` set guid=replace (guid,'https://本番環境のドメイン','http://localhost:10090');
update `xxx_posts` set post_content=replace (post_content,'http://本番環境のドメイン','http://localhost:10090');
update `xxx_posts` set post_content=replace (post_content,'https://本番環境のドメイン','http://localhost:10090');
update `xxx_postmeta` set meta_value=replace (meta_value,'http://本番環境のドメイン','http://localhost:10090');
update `xxx_postmeta` set meta_value=replace (meta_value,'https://本番環境のドメイン','http://localhost:10090');
「xxx_」の部分は、インポートしたテーブルの接頭語に変更。末尾の「http://localhost:10090」はローカル環境のwordpressのサイトアドレスに変更する。
「クエリをシミュレート」後に問題がなければ、「実行」する。
DB置換プラグインや外部ソフトを使う
WordPressにはデータベースの置換をサポートしてくれる、便利なプラグインや外部ソフトが存在する。
- Search Replace DB(外部ソフト)
- Search Regex(プラグイン)
- All-in-One WP Migration(プラグイン)
それぞれ専用のインターフェースで設定が必要なものの、DBの置換作業をまとめて実行してくれる。
注意点:エディタでインポート対象のSQLファイルを置換してはいけない
本番環境のフォルダをローカル環境にコピーする
本番環境からダウンロードしてきたディレクトリでローカル環境のWordpressのルートディレクトリの中身を置き換える。
基本的には丸ごと置き換えるが、注意が必要なのは「.htaccess」「wp-config.php」ここには本番環境固有の設定が記載されているため、そのままコピペするとページが表示されないことがある。
ローカルのWordpressのルートディレクトリで「.htaccess」「wp-config.php」以外のフォルダとファイルを置き換える。
ローカル環境のWordpressのwp-config.phpを編集する
ここは、上記作業で、ディレクトリを丸ごとコピーした場合に必要になる作業。
ローカル環境のWordpressのwp-config.phpのデータベースに関する設定を編集する。エディタで起動し、以下4つの項目をローカル環境のデーターベースの情報に合わせて修正する。
- define( ‘DB_NAME’, ‘ データベース名’);
- define( ‘DB_USER’, ‘ユーザー名’);
- define( ‘DB_PASSWORD’, ‘パスワード’ );
- define( ‘DB_HOST’, ‘ホスト名’ );
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wp_db');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'wp_user');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'root');
/** MySQL のホスト名 */
define('DB_HOST', 'db');
また、htaccessにhttpからhttpsへのリダイレクト設定や、プラグインによるログイン画面等のリダイレクト処理が入っている場合は、その行を削除する。
参考として、デフォルトの状態の.htaccessを記載しておく。
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
以上で、ローカル環境に移行するための設定が完了。
ブラウザで確認する
ブラウザにローカル環境のURLを入力し、正常に表示されるか確認する。
確認するときは、通常のページと、あわせて管理画面( /wp-admin/ )が正しく表示されるかも確認する。
※注: 管理画面にログインするときは、本番環境で使っているユーザー名とパスワードを使う。
▼ブラウザの表示
どちらも無事表示されれば完了。お疲れさまでした。
トラブルシューティング
サイトにアクセスできないとき
どこかで設定をミスっているか、もしくは、設定がうまくいっていないときに読み込んだページのキャッシュがブラウザに残っている場合がある。
その場合は、ブラウザの管理画面から「キャッシュの削除」を行う。
トップページ以外は404(Not Fount)になる場合
トップページは正しく表示されるが、他のページが404(Not Found)となる場合は、Wordpressのパーマリンクの設定が上手く読み込まれていない可能性がある。
管理画面左メニューの「設定」→「パーマリンク設定」を選択し、何も変更せずに、一番下の「変更を保存」をクリクする。
これでページをリロードすれば、たいていの場合は正しく表示されるようになる。
これでも改善しない場合は、.htaccessで転送処理がかかっているなど本番環境の設定を引き継いでいる可能性がある。
参考
ここでは、phpMyAdminを使って本番環境のWordpressをローカル環境のDockerに移管しましたが、phpMyAdminを使用せずに、コマンドラインだけで移管をすることもできます。詳細については下記をご参考ください。
(参考)リモートサーバーのWordPressをローカル(自分のPC)のDockerに移管する方法を実例で解説