複数の環境へ対応する

コンテンツの規模がある程度大きくなるとリソースによって参照先のサーバを変える事があります。

画像ファイルはAサーバ、HTMLはBサーバといった具合でしょうか。

これだけなら普通にHTMLファイルを書き換えてしまえばよいですが、実際には

  • プロダクション環境
  • ステージング環境
  • 開発環境

と複数の環境があり、参照先をファイルへ直接書いてしまうと対応しきれません。

これらの対処方法としてPHPSmartyを例にまとめてみました。

以下、用意するもの

HTMLファイル(Smartyのテンプレート)
{load_configs="config.ini"}
<a href="{#server_api#"}/ad/jump/id/{$id}">
<img src="{#server_img#}/img/banner.png" />
</a>
設定ファイル
server_api = http://api.hogehoge.jp
server_img = http://img.hogehoge.jp
phpファイル
$smarty = new Smarty();
$smarty->configs = "configs";
$smarty->assign('id', $id);

出力結果

<a href="http://api.hogehoge.jp/ad/jump/id/12345">
<img src="http://img.hogehoge.jp/img/banner.png" />
</a>

設定ファイルも切り替える

しかし、この形だと環境毎に設定ファイルが必要となります。
シンボリックリンクを使ってここも柔軟性を持たせていきます。

プロダクション環境

configs_prod/config.ini

server_api = http://api.hogehoge.jp
server_img = http://img.hogehoge.jp
ステージング環境

configs_stage/config.ini

server_api = http://api.stage.hogehoge.jp
server_img = http://img.stage.hogehoge.jp
開発環境

configs_devel/config.ini

server_api =
server_img =
シンボリックリンクを張る

ステージング環境であれば

ln -s configs_stage configs

プロダクション環境であれば

ln -s configs_prod configs

こうする事でシンボリックリンクの張り替えのみで環境の切り替えをする事ができます。

開発時にはあまり意識しないかもしれませんが、運用フェーズを考えるとこういった対応は重要な要素となります。