PHPの実行環境がEC2かローカルかを簡易的に判定する

概要

PHPUnitで自動テストをしていますが、ローカル環境では動かない機能のテストが一部あったため、実行環境を判定してスキップしてやろうって話。

目標

  • 実行環境の判定関数を作りたいので、適当な判定条件を作る。

条件

  • 本番環境とテスト環境ではテストを実行したいが、ローカル環境では特定のテストを実行したくないので、これらを区別する必要がある。
  • 本番環境とテスト環境はAWSのEC2上で動いている。
  • ローカルの開発環境はxamppやらVM+vagrantやらDockerやら各々色々。
  • PHPUnitはコンソールから直接実行する場合もある。

結果

東京リージョンのEC2を判定する例

function is_local() {
    if (strpos(gethostname(), 'ap-northeast-1.compute.internal') === false) {
        return true;
    }
    return false;
}

備考

  • 「アジアパシフィック (東京)」リージョンのEC2インスタンスはhostnameが ip-xxx-xxx-xxx-xxx.ap-northeast-1.compute.internal といった形式になるようで、ローカルの開発環境ではこうはならないため、都合が良いと判断し採用。
  • $_SERVER['HOSTNAME'] は実行条件によってEC2インスタンス上でもNULLになってしまう場合があったため不採用。
  • gethostname() の挙動が安定しないようなことがあれば再考。
  • PHPの実行時にenvを宣言するみたいなことができるらしく、本来はそうした方がスマートなのかなと思うけど今回は見送り。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です