[CakePHP] 環境に応じてデータベースの設定を変える

ローカル、ステージング、本番など複数の環境があって、それぞれデータベースが異なる想定。環境に応じてデータベースの設定を変える方法を考える。

方法1: 設定ファイルを差し替える

環境ごとに設定ファイルを作っておいて、動作環境に応じて差し替える。例えば以下のファイルを作っておいて、ディプロイするときに動作環境に応じたファイルをDatabase.phpにリネームするわけだ。

  • Config/Database.local.php – ローカル用
  • Config/Database.staging.php – ステージング用
  • Config/Database.production.php – 本番用

この方法はわかりやすいが、ディプロイ作業が僅かに煩雑になる。例えば、リモートリポジトリにコードがまとめられている場合、単純にクローンするだけでは足りず、手動でDatabase.phpを仕度する必要がある。ディプロイ手順を工夫すれば済む話だけど。

方法2: プログラムで環境を判別して設定を動的に変える

現在の動作環境をプログラムで判別できるならば、データベース設定を動的に切り替える仕組みをDatabase.phpに組み込んでやればいい。例えば環境ごとにドメインが異なるなら以下のようにできる。

この方法の利点はディプロイが楽なこと。環境ごとに設定ファイルを用意する必要が無く、単純にディプロイするだけで動く。結果的に手間が減るしミスも減る。欠点らしい欠点はみつからないので、僕的には最近はこの方法を使うことが多い。