wordpress開発で、複数環境でwp-configを使い分ける方法


こんにちは。オークファン開発部のYです。

先日、3週間くらいの期間で、wordpressサイトの新規構築を担当させていただきました。

wordpressは入社前に、ロリポップ!のレンタルサーバーで自動インストールして使ったことがありましたが、コードを修正して開発したのは今回が初めてでした。

そこで得た知見(Tips?)を記載したいと思います。


wordpress開発で、複数環境でwp-configを使い分ける方法

もくじ

  • 複数環境(複数のサーバ)によって、wp-configを分けたい
  • wp-configを作成
  • wp-configが読み込まれる流れをおさらい
  • wp-load.phpで環境変数による切り分けを実装
  • httpd.confにて環境変数を設定
  • おまけ:現在見ている環境を表示する
  • おわりに

複数環境(複数のサーバ)によって、wp-configを分けたい

開発を進めていく上で、複数の異なる環境(サーバー)で、wordpressサイトを確認することになると思います。

  • 開発環境(development) -> 例) 開発サーバー、vagrant等の仮想サーバー
  • ステージング環境(staging) -> 例) 共有サーバー、事業部(非エンジニア)の確認用、受託の場合お客様確認用など
  • 本番環境(production) -> 本番サーバー

このような複数環境によって、DBの向き先等が記載されたconfigを使い分けたいです。

FuelPHP等のPHPフレームワークでは、環境変数を指定してconfigを使い分ける機能がデフォで備わっていますが、
wordpressではそのような機能はありません。

そこで、FuelPHPを参考に、Apacheのhttpd.confで環境変数を指定して、それによってconfigを使い分けるコードを自前で実装したいと思います。

wp-configを作成

wp-config-sample.phpを元に、環境別のconfigファイルを作成します。

  • wp-config.development.php
  • wp-config.staging.php
  • wp-config.production.php

今回はwp-config.{環境変数}.phpという命名規則で作ります。

環境によって異なるのはDB設定の部分と、デバッグモード(WP_DEBUG)のON/OFFあたりかと思います。

wp-configが読み込まれる流れをおさらい

wordpressでは全てのリクエストは基本index.phpに入り(エントリーポイント)、
そこでwp-blog-header.phpが読み込まれ、
wp-blog-header.phpでwp-load.phpが読み込まれ、
wp-load.phpで設定ファイルのwp-config.phpが読み込まれます。

つまり、wp-load.phpで環境による切り分けの処理を書けばよいことになります。

wp-load.phpで環境変数による切り分けを実装

wp-load.phpでwp-config.phpを読み込んでいる箇所です。

ここを下記のように変えます。

$envという環境変数を定義します。apache側でWP_ENVという環境変数が指定されているときのみ、その値を適応します。

WP_ENVにproductionがセットされていたら、wp-config.production.phpをrequire_onceして読むこむという具合です。

この1行は、FuelPHPのfuel/app/bootstrap.phpの下記の書き方を参考にしています。

httpd.confにて環境変数を設定

ApacheのVirtualHost設定にて環境変数を指定します。

ステージング環境であれば setEnv WP_ENV staging
開発環境であれば setEnv WP_ENV development
という具合です。

ちなみにwordpress管理画面でhttpsを使用する場合は、SSLのVirtualHost設定の方にも 環境変数を指定しなければなりません。

コレを忘れると、普通のページは指定した環境のDBを見ているのに、 管理画面のときだけ開発環境のDBを見てしまう、ということが起きてしまうので注意です。

おまけ:現在見ている環境を表示する

定義した環境変数$envですが、グローバル宣言をすることでthemes配下のファイル等でも使用可能になります。

自分の場合、テーマファイルのheader.phpに下記のような行を追加し、 いまどの環境(サーバー)のサイトを見ているのかをコメントで示すようにしました。

これは事業部(非エンジニア)の人に対する、ちょっとした工夫です。

開発したサイトを事業部の人に確認してもらう際は、 hosts設定をしてもらって見ていますが、
たまに本番を見ているのか、ステージングを見ているのか分からなくなり、連絡が来ることがあります。

その時は、「ページのソースを見てください!」と事業部の人に伝えておきます。
ステージング環境を見ている場合のみ、下記のようなHTMLコメントが現れるはずです。
(※XXXはサーバーのIPアドレス)

おわりに

wordpressで環境ごとにconfigを使い分ける方法について書いてきましたが、
他にも良い方法がありましたら、はてブコメント等でお教えください。

弊社技術ブログのwordpressの記事では、こちらもお勧めです! (はてブ180超)
-> WordPress初心者が導入時にやっておきたい10のこと



Category PHP WordPress