wp-config.phpで本番環境とステージング環境のデータベース設定を安全に切り替える方法

WordPressサイトを運用する上で、本番環境とは別に、プラグインのテストやデザインの変更を行うための「ステージング環境(テスト環境)」を用意することは非常に重要です。しかし、環境ごとにwp-config.php内のデータベース接続情報を手動で書き換える作業は、設定ミスや本番環境のデータベースを誤って操作してしまうなどの重大なヒューマンエラーを引き起こす原因となります。

この記事では、単一のwp-config.phpファイルを使い、サーバー環境(ドメイン)を自動で判別して、本番環境とステージング環境、さらにはローカル開発環境のデータベース設定を動的に切り替える、安全で効率的な方法を詳しく解説します。

wp-config.phpでの環境別設定方法

【最重要】作業を始める前に、必ずwp-config.phpファイルのバックアップを取ってください。 このファイルの設定を誤ると、サイトが表示されなくなります。

wp-config.phpファイル内の、以下の記述があるエリアをこれから編集します。

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', '...' );

/** MySQL データベースのユーザー名 */
define( 'DB_USER', '...' );

/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', '...' );

/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
PHP

実装コード

上記のエリアを、以下のコードに置き換えます。ご自身の環境に合わせて、ドメイン名やデータベース情報を書き換えてください。

// --- 環境判別と設定の切り替え ---

// 本番環境のドメイン(wwwなし・あり両方に対応する場合は、どちらか一方に正規化されているドメインを指定)
$prod_domain = 'www.your-production-domain.com';
// ステージング環境のドメイン
$stg_domain = 'stg.your-staging-domain.com';

// 現在のサーバーホスト名を取得
$current_host = $_SERVER['HTTP_HOST'];

// ホスト名に応じて設定を分岐
if ($current_host === $prod_domain) {
    // --- 本番環境のデータベース設定 ---
    define('DB_NAME', 'production_db_name');
    define('DB_USER', 'production_db_user');
    define('DB_PASSWORD', 'production_db_password');
    define('DB_HOST', 'localhost');
    define('WP_DEBUG', false); // 本番環境ではデバッグモードを無効に

} elseif ($current_host === $stg_domain) {
    // --- ステージング環境のデータベース設定 ---
    define('DB_NAME', 'staging_db_name');
    define('DB_USER', 'staging_db_user');
    define('DB_PASSWORD', 'staging_db_password');
    define('DB_HOST', 'localhost');
    define('WP_DEBUG', true); // ステージング環境ではデバッグモードを有効に

} else {
    // --- 上記以外(ローカル開発環境など)のデータベース設定 ---
    define('DB_NAME', 'local_db_name');
    define('DB_USER', 'local_db_user');
    define('DB_PASSWORD', 'local_db_password');
    define('DB_HOST', 'localhost');
    define('WP_DEBUG', true); // ローカル環境ではデバッグモードを有効に
}

// --- これより下の行は変更しない ---
PHP

コードの解説

  1. $prod_domain, $stg_domain
    ここにご自身の本番環境とステージング環境のドメインを正確に入力します。wwwの有無など、完全に一致するように注意してください。
  2. $current_host = $_SERVER['HTTP_HOST'];
    PHPのスーパーグローバル変数 $_SERVER['HTTP_HOST'] を使って、現在アクセスされているドメイン(ホスト名)を取得しています。
  3. if ($current_host === $prod_domain) { ... }
    取得したホスト名が、定義した本番環境のドメインと一致するかを判定します。一致すれば、本番環境用のデータベース情報がdefine()されます。
  4. elseif ($current_host === $stg_domain) { ... }
    本番環境のドメインと一致せず、ステージング環境のドメインと一致する場合、ステージング環境用の設定がdefine()されます。
  5. else { ... }
    どちらのドメインとも一致しない場合(例:localhostなどのローカル開発環境)、elseブロック内の設定が適用されます。
  6. define('WP_DEBUG', ...);
    環境に応じてWordPressのデバッグモードのON/OFFを自動で切り替えています。これにより、本番環境でエラーメッセージが訪問者に表示されるのを防ぎ、開発環境では詳細なエラーを確認できるため、非常に便利です。

まとめ

この方法を導入することで、wp-config.phpは一度設定すれば、どの環境にデプロイしても自動的に適切な設定で動作するようになります。これにより、開発プロセスが大幅に効率化され、手動設定によるミスもなくなります。

read next