WordPressで作ったサイトは通常のサイトと違い、DBが絡んでくるためローカル環境と本番環境を同一の状態で稼働させるには設定や更新されるディレクトリの知識が必要になります。
今回は、WordPressを使ったサイトを作成している人や、開発に挑戦しようとしている人に向けて、ローカルで作ったWordPressのサイトを本番環境と同じ状態で保つために押さえておかなければならない3つのポイントを紹介します。
MySQL設定の分岐
WordPressはデータベースに必要情報が格納されているので、本番環境であれば本番環境の、ローカル環境であればローカル環境のMySQLへ接続する必要があります。
基本的に設定が必要な情報は次の5項目です。
- WordPress のためのデータベース名
- MySQL データベースのユーザー名
- MySQL データベースのパスワード
- MySQL のホスト名
- データベースの文字セット
文字セットに関しては、基本的にどの環境でも同じ値が設定されるため、変更しなければならない箇所は上4つです。
もし、これがローカルと本番環境で同じ場合は分岐する必要はありませんが、使っているデータベースによってはそうはいかない人も多いでしょう。
MySQL設定はWordPressファイルの最上部にあるwp-config.phpで設定します。
以下、サンプルコードです。27行目ぐらいからMySQLの設定です。
※wp-config.phpファイルに不備があると接続できなくなってしまうことがあるので、編集する際は念の為ファイルのバックアップを取っておきましょう
if (@$_SERVER['SERVER_NAME'] === 'ローカル環境のドメイン') {
// ローカル環境 ========================
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'データベース名' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'ユーザー名' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'パスワード' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'ホスト名' );
} else if(@$_SERVER['SERVER_NAME'] === '本番環境のドメイン') {
// 本番環境 ========================
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'データベース名' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'ユーザー名' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'パスワード' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'ホスト名' );
}
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8mb4' );
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );
設定する環境が2つなので、if文で分岐させています。ドメインで判定しているので、$_SERVER[‘SERVER_NAME’]でドメイン名を取得して比較しています。
本番環境でelse ifを使っていますが、elseにしても問題ありません。
ローカル、本番以外にもテスト環境が欲しい人は、更にelse ifを追加してください。それ以上に増える場合はswitchで分岐させても良いでしょう。
こうしていれば、ローカル環境でWordPressを使って作成したサイトを本番環境へそのままアップロードしても、環境分岐されているためwp-config.phpを編集する手間がなくミスも減り便利です。
データベース内のドメイン変更
ローカル環境で記事の更新や、設定の変更をすればデータベース内の情報が書き換わります。
その場合、ローカル環境のsqlをエクスポートして本番環境へインポートすることになりますが、そのままだと本番環境では正しく稼働しません。
※もし本番環境で更新して、ローカル環境へ同じ内容を反映させたい場合は、逆を行ってください
WordPressで使用しているデータベース内にwp_optionsというテーブルがあるので、その1行目と2行目を変更しましょう。
ローカルのデータベースであれば、1、2行目がローカルのドメインになってます。そのままだと、本番環境のURLへアクセスしてもローカルへリダイレクトされてしまうので、外部の人からだと見えないということが起こってしまいます。
余談ですが、WordPressの設定を変更して管理画面へログインできなくなった人の多くは、このURL指定が間違っていることが原因です。
SQLをインポート、エクスポートしたあとに、この2箇所のドメインをそれぞれの環境に合わせて変更すればデータベース情報を共有することができます。
※データベースを更新する前には必ず、更新前のSQLのバックアップをとるようにしておきましょう
データベースの操作はphpMyAdminやSequel Proを使用すると簡単です。
もしXserverにSequel Proで接続したい場合は、その方法をまとめていますので、参考にしてください。
更新されたファイルの共有
最後にファイルの共有についてです。WordPressでは基本的にテーマファイル以外は更新しないので、テーマファイルだけを共有しておけば良いと考えてしまいがちですが、実はそれだけでは同じ状態を保つことはできません。
なので、以下の4ディレクトリを押さえておきましょう。
- wordpressディレクトリ/wp-content/themes/使用しているテーマ
- wordpressディレクトリ/wp-content/uploads
- wordpressディレクトリ/wp-content/plugins
- wordpressディレクトリ/wp-content/languages
テーマディレクトリ
1つ目はテーマディレクトリです。もし子テーマを使用している場合は複数更新する必要があるので、themesそのものをFTPソフトを使用して更新しても良いでしょう。ただ、使用していないテーマが多い場合はそれだけで膨大な時間と通信量がかかってしまうので注意が必要です。
アップロードディレクトリ
2つ目のuploadsは画像等のアップロードディレクトリです。
もし、ローカル環境で画像やPDFファイルなどのアップロードを管理画面から行った場合、データベース情報をインポートするのと同時にこの中のフォルダもFTPソフトを使用してアップするようにしておきましょう。
中は2020/05といったように年月でフォルダ分けされているので、更新されているフォルダだけ上げるようにすれば、余計な時間もかかりません。
※過去の記事を編集中に画像等をアップロードすれば、その記事の年月フォルダに画像がアップされたりするので、新しい年月フォルダだけを監視しておけば良いというわけではありません
プラグインディレクトリ
3つ目のpluginsはプラグインのファイルが格納されているディレクトリです。
もしローカル環境でプラグインをダウンロードしたのであれば、このフォルダに新しく追加されているので、FTPソフトを使用してアップしておきましょう。
言語ファイルディレクトリ
4つ目のlanguagesは言語ファイル用のディレクトリです。
こちらは見逃されやすいですが、プラグインの日本語化ファイルなどが格納されているため、もしプラグインをローカル環境でダウンロードして本番環境へ移した場合は、こちらも合わせてアップロードするようにしておきましょう。
まとめ
いかがだったでしょうか。
今回ご紹介した3つのポイントを押さえていれば、ローカルと本番どちらでも同じ状態にしておくことができます。
今回のポイントを元に、ローカルで作ったサイトを本番環境へ移行させる方法と、ローカルで更新時に本番環境へ反映させる方法を簡単にまとめておきます。
・ローカルで作ったサイトを本番環境へ移行
- wp-config.phpに設定情報の分岐を追加
- FTPソフトで全ファイルをアップロード
- ローカルのDBのSQLをエクスポートして、本番のDBへインポート
- DBのwp_optionsテーブルの1、2行目のドメインを本番ドメインに変更
・ローカルで更新時に本番環境へ反映
- FTPソフトで更新されたテーマ、アップロード、プラグイン、言語フォルダをアップロード
- ローカルのDBのSQLをエクスポートして、本番のDBへインポート
- DBのwp_optionsテーブルの1、2行目のドメインを本番ドメインに変更
※もし本番環境で記事更新などを行った場合は、本番環境のデータをローカルへダウンロードするようにしましょう
これを押さえていれば、快適なWordPressを使ったサイト制作、開発ができるようになります。
これからWordPressについて学ぼうとしている人や、現在使っているけどいまいち理解できていないような人は、ぜひ参考にしてくださいね。