CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
2024/06/21
Apacheに環境変数を設定し定数定義ファイルを本番と開発を振り分ける処理
定数定義ファイルを本番環境用と開発環境用とで分ける
「CentOS6、7のPHPを5.3から5.6、7.0、7.1にバージョンアップする手順の解説」
上記の記事で、定数を管理する方法の解説をしました。
定数なので固定の値なのですが、下記のようなサイトの URLやメールアドレスなどを設定する定数は「開発環境」と「本番環境」とでは違うものを設定したい場合もあるかと思います。
1 2 3 4 5 6 7 |
// 開発環境 define("SITE_URL","http://localhost"); define("E-MAIL", "jibun@localhost"); // 本番環境 define("SITE_URL","http://example.com"); define("E-MAIL", "staff@example.com"); |
この記事では、これらの定数のファイルを開発環境と本番環境とで自動的に切り替える方法を解説します。
ちなみに「CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説」では解説をしていますが、CakePHP3 と CakePHP4とでは定数の設定の仕方が少し変更になっていますので、CakePHP3ユーザの方は改めて確認をしてみてください。
また、「app_local.php」「.env」に定数を定義する方法については「CakePHP4で「app_local.php」「.env」を利用して環境ごとの定数を振り分ける方法」を参考にしてください。
環境変数を Apacheの設定ファイル「httpd.conf」or「.htaccess」に設定
まず初めに「環境変数」を設定します。
「環境変数」は、基本的には「開発環境」にのみ指定します。(「開発環境」に設定する理由は後程説明します。)
対象ファイルは下記の「httpd.conf」(or「.htaccess」)です。
Apacheの設定ファイル「/etc/httpd/conf/httpd.conf」
(「httpd.conf」のパスは CentOSを想定しています。)
もしくは、
ドキュメントルートにある「.htaccess」です。
※どちらでも問題ありませんが、「httpd.conf」に設定すればそのサーバを利用する開発共通して反映させることができます。
「.htaccess」は、プロジェクトごとに設定する必要が発生します。
「httpd.conf」or「.htaccess」ファイルを開いて、ファイルの一番最後などに書きの記述を追加します。記述する内容はどちらも同じです。
1 |
SetEnv CAKE_ENV "develop" |
「CAKE_ENV」が環境変数の変数名で、「develop」がその値になります。
複数設定することもできます。
また、上記の例では「ダブルクォート("
)」で囲っていますが、囲わなくても動作します。(囲っておく方が無用なトラブルに遭遇する可能性は減るかと思います。)
「httpd.conf」に記述した場合は、Apacheを再起動して環境変数を反映させます。
「.htaccess」に記述した場合は記述するだけで反映されます。
設定した「環境変数」を取得する方法
設定した「環境変数」が正しく設定されたかを確認するため、設定した環境変数を取得してみましょう。
環境変数を取得する方法は下記のように複数存在します。
1 2 3 4 |
print_r( $_SERVER["CAKE_ENV"] ); print_r( getenv("CAKE_ENV") ); print_r( env("CAKE_ENV") ); print_r( $_ENV["CAKE_ENV"] ); |
ただ、「$_ENV["CAKE_ENV"]
」は私の環境ではうまく取得できませんでした。
また、「phpinfo();
」を実行すると、リストの中に環境変数の情報も表示されます。
定数ファイルを作成
続いて、定数ファイルを作成します。
「CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)」の記事では「/config/const.php」というファイルを作成し、定数を設定しましたが、加えて下記のように「開発用」「本番用」の定数ファイルを作成します。
ファイル名のつけ方の決まりはありませんので、自由に設定してください。
開発環境用
/config/const_develop.php
本番環境用
/config/const_production.php
開発環境用の「const_develop.php」には下記を設定します。
1 2 3 4 5 6 |
<?php // サイトの URL define("SITE_URL", "http://localhost"), // サイト名称 define("SITE_NAME", "サンプルサイト・開発"), |
本番環境用の「const_production.php」には下記を設定します。
1 2 3 4 5 6 |
<?php // サイトの URL define("SITE_URL", "http://example.com"), // サイト名称 define("SITE_NAME", "サンプルサイト・本番"), |
「bootstrap.php」に定数ファイルを取得する分岐処理を記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
try { Configure::config('default', new PhpConfig()); Configure::load('app', 'default', false); // 定数ファイルを読み込み Configure::load('const'); // 定数ファイルを読み込み if (isset($_SERVER["CAKE_ENV"]) && $_SERVER["CAKE_ENV"] == "develop"){ Configure::load("const_develop"); } else { Configure::load("const_production"); } } catch (\Exception $e) { exit($e->getMessage() . "\n"); } |
上記の 9行目で環境変数によって「本番用」「開発用」の振り分けを行っています。
「環境変数」を「開発環境」に設定する理由
私は、
環境変数「CAKE_ENV」が「develop」であれば「開発環境」。
そうでなければ、「本番環境」。
という処理をしています。
理由は「httpd.conf」ファイルを変更する手続き(業務上の手続きなども含めて)は、本番環境より開発環境の方が楽だと思うためです。
コマンド、シェルを実行する場合はコマンド内に環境変数を指定する
CakePHP4でコマンドやシェルでバッチ処理を作成して、コマンドラインからコマンドを実行する場合は、下記のようにコマンド内に環境変数を指定します。
1 2 3 4 5 |
// コマンドラインからシェルを実行する場合 $ bin/cake SampleTests // コマンドの前に環境変数を指定する場合 $ CAKE_ENV=develop bin/cake SampleTests |
コマンドやシェルをコマンドラインから実行する場合は、Apacheを経由せずにプログラムが実行されるため、Apacheの設定ファイル「/etc/httpd/conf/httpd.conf」に記述してある環境変数は読み込まれません。
そのため、実行するコマンドの中に環境変数を直接記述しておく必要があるのです。
上記の環境変数を指定する方法は、Linuxでは動作しますが、Windows環境(Windows上に構築した XAMPPなど)では動作しないことを確認しました。
そのため、Windows環境で動作させる際は下記の記事を参考にしてください。
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
また、CakePHP4でコマンドのプログラムを作る際は下記の記事を参考にしてください。
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
CakePHP4で環境ごとに異なる定数を管理するオススメの方法
CakePHP4で環境ごとに異なる定数を管理する方法の中では、この記事で紹介した「環境変数」で定数のファイルを切り替える方法をオススメします。
この記事で紹介した方法は、環境変数を設定し、その値によって読み込む定数定義ファイルを振り分ける、というものでした。
その他では、CakePHP4には、環境ごとに異なる定数を「/config/app_local.php」や「.env」にて環境ごとに異なる定数を定義する方法が用意されています。
ですが、「CakePHP4で「app_local.php」「.env」を利用して環境ごとの定数を振り分ける方法」の記事内でも触れていますが、「app_local.php」や「.env」は、定数を定義するファイルではあるものの、プログラマーがオリジナルで定義する定数を設定するファイルとしては不適切であろうと考えています。
「app_local.php」や「.env」は、データベース接続情報やメールサーバへの接続情報などの機密情報を含むため、Gitなどのソースコードのバージョン管理ツールなどでは管理しないファイルとなります。
そのため、「app_local.php」や「.env」にオリジナルの定数を定義する場合、その定数を変更したり、追加したりする場合の管理はアナログ的なものとなります。
それによって、リリース時に
『本番環境の「app_local.php」を更新し忘れていた!』
『本番環境に開発用の「app_local.php」をリリースしちゃった!』
と言うようなミスが発生する可能性があるのです。
対して、この記事で紹介した「環境変数」を使って使用する定数ファイルを切り替える方法であれば、定数のファイルをすべて Gitで管理することができます。
そのため、本番リリース時もソースファイルをまとめてリリースするだけでよく、「app_local.php」「.env」を使うときのようなミスが発生する可能性はなくなるのです。
そのため、このリスクを避けることにメリットを見出せるならば、この記事の方法を検討する価値があるのかと考えています。
「app_local.php」や「.env」で管理する定数と、この記事で紹介した環境変数で振り分ける定数では、定数の持つ意味が異なるために異なる方法を使って管理する方がいいのではないか、と考えています。
CakePHP4 オフィシャルサイト 構成設定
https://book.cakephp.org/4/ja/development/configuration.html
CakePHP4の関連記事
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4 のコマンドプログラムからコンポーネントを読み込む方法解説
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
Windows環境の XAMPPを利用して CakePHPの開発する際の注意点
CakePHP4の規約外のカラムをキーにアソシエーション(テーブル連結)する方法
CakePHPで Auto Incrementを外すと Duplicate entry '0' for keyのエラーが出るかも
CakePHPのFlashエラーは出るが入力項目ごとのメッセージが出ないエラーの原因
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。
-
-
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。
-
-
CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll
主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。
-
-
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。
-
-
CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法
CakePHPで「CakeDC/Users」などルーティングを行うプラグインを利用するときに、favicon.icoやapple-touch-icon-144-precomposed.pngがNotFoundエラーになることがある。その対処方法の解説。
-
-
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。
-
-
CakePHP3のForm Helperの使い方のまとめ
CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。
-
-
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3で静的なページを設置する場合の方法(webrootとpagesとを活用する方法)を解説。pagesの解説はデフォルトのトップページがどう表示されているかを参考に解説。ルーティングの機能も。
-
-
CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法
CakePHP3で検索をするプラグイン「friendsofcake/search」の検索条件のカスタマイズ方法の解説。検索項目を増やしたり、以上、以下での検索や、チェックボックスによる検索の方法などを解説。
-
-
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。