Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
2024/06/23
Windows上のXAMPP環境のコマンドラインから CakePHPのコマンド実行する際に環境変数を指定する方法
今回は「CakePHP4でコマンドプログラムを作成する」の全 4回のうちの最終回で、「XAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法」について解説します。
- CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
- CakePHP4 のコマンドプログラムからコンポーネントを読み込む方法解説
- CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
- Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
環境変数は Linuxと Windowsとで指定方法が異なる
CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
上記の記事で、CakePHPの環境変数を設定して本番環境と開発環境を振り分ける解説をしましたが、その際、コマンド(シェル)を実行する際に環境変数を指定して実行する方法も解説しました。
ですが、上記の記事で解説していた方法は、Linux環境では有効ですが、Windows上に構築している XAMPP環境では実行できないことを確認しましたので、改めて、Linux環境と Windows環境とで実行できる方法を解説します。
Linuxと Windowsでコマンドを実行する方法
まずおさらいから。
Linux環境でコマンドラインからコマンド(シェル)を実行する場合は、ルートフォルダから下記を実行します。
(「SampleTests」と言うコマンド(シェル)に「getList」と言う引数(パラメータ)を付けて実行するコマンドです。)
1 2 |
// コマンドラインからコマンドを実行する場合 $ bin/cake SampleTests getList |
環境変数を指定して実行する場合は、コマンドの前に変数名とその値を指定する、下記の形式で記述します。
1 2 |
// コマンドの前に環境変数を指定する場合 $ CAKE_ENV=develop bin/cake SampleTests getList |
Windows上の XAMPP環境で実行する場合は、「/bin」フォルダに移動して、下記のコマンド形式で記述します。
1 2 |
// コマンドの前に環境変数を指定する場合 $ set CAKE_ENV=develop& cake SampleTests getList |
Windows環境になって変わるのは、「set」と「&
」を付けるところです。
※コマンドライン上では「//
」はコメント行にはなりませんが、便宜上、PHPのコメントの記述方法を利用しています。
コマンドプロンプトで環境変数を指定する方法の詳細解説
Linuxと Windowsでコマンド実行時に環境変数を設定する記述方法の違い
改めて Linuxと XAMPPでのコマンドを並べてみました。
1 2 3 4 5 |
// Linuxでコマンドの前に環境変数を指定する場合 $ CAKE_ENV=develop bin/cake SampleTests getList // XAMPPでコマンドの前に環境変数を指定する場合 $ set CAKE_ENV=develop& cake SampleTests getList |
Windowsの環境変数の設定方法は 2つのコマンドをつなげて実行している
Windows環境での「set CAKE_ENV=develop& cake SampleTests getList
」は、下記のコマンド 2つを 1行で実行していることになります。(2つのコマンドとして別々に実行しても問題なく実行できます。)
1 2 3 |
// XAMPPでコマンドの前に環境変数を指定する場合 $ set CAKE_ENV=develop $ cake SampleTests getList |
Linuxの場合、複数のコマンドを 1行で実行する場合は「;
(セミコロン)」で区切りますが、Windowsの場合は「&
(アンパサンド)」で区切りますので、上記のコマンド 2つを 1行で実行する場合は下記となります。
1 2 |
// XAMPPでコマンドの前に環境変数を指定する場合 $ set CAKE_ENV=develop& cake SampleTests getList |
環境変数を設定して 2つ目のコマンドを実行する際の最重要ポイント
ここで非常に重要なポイントとしては「&
」と「develop」の間にはスペースを入れない、ということです。
1 2 |
// コマンド実行時の間違いの記述方法 $ set CAKE_ENV=develop & cake SampleTests getList |
上記のように「develop」と「&
」との間にスペースがあると、「CAKE_ENV」の値として保存される値は「develop」+「半角スペース」となってしまいます。
そのため、上記の間違いの記述方法で実行すると、下記の if文が「false」となってしまいます。
「$_SERVER["CAKE_ENV"]
」の値には半角スペースが入っていますので。
1 2 3 4 5 |
if ( $_SERVER["CAKE_ENV"] == "develop" ) { echo "True"; } else { echo "False"; } |
私はこの「&
」の前に空白を入れてはいけない、ということに気づかず延々と悩んでいました。
この後解説しますが、設定されている環境変数を確認するコマンドでもスペースの有無は確認できないのです...
Windowsの setで設定した環境変数はウインドウを閉じるまで有効
解説したように、Windowsで環境変数は「set 変数名=値」と言う形式で設定しますが、設定した環境変数の有効期限は、そのコマンドラインのウインドウを閉じるまで有効になっています。
そのため、一度環境変数を設定したウインドウのコマンドラインからは、下記のコマンドを実行するだけで設定した環境変数が有効な状態で処理を実行します。
1 |
$ cake SampleTests getList |
また、Windowを閉じると環境変数は削除されます。
Windows環境で setコマンドを使って環境変数を設定、確認、変更、削除する方法
setで設定した環境変数を確認する方法
setで設定した内容を確認したい場合は「set」だけを入力します。
「set」だけ入力すると設定されている環境変数すべてが表示されます。
1 2 3 4 5 |
// 設定してあるすべての環境変数を表示する $ set // findstrを使って grepする $ set | findstr "CAKE_ENV" |
「set」だけだとすべての環境変数が表示されますので、探すのが面倒です。
そんな場合は「findstr」を使って条件抽出をするといいでしょう。
Windowsには「grep」コマンドがありませんので、代わりに「findstr」を使用します。
findstrコマンドについて詳しく知りたい方は下記のオフィシャルサイトが参考になるかと思います。
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/findstr
setで設定した環境変数を削除する方法
「set」で設定した環境変数を削除したい場合は、下記のように値を空白にしてコマンドを実行します。
これで「CAKE_ENV」と言う環境変数自体が削除されます。
1 |
$ set CAKE_ENV= |
環境変数の有効期間はウインドウを開いている間ですので、コマンドラインのウインドウを閉じると消去されます。
また、設定した環境変数は設定したウインドウのみ有効ですので、別のコマンドラインのウインドウを開いてもそちら側では環境変数は設定されていない状態になっています。
setで設定した環境変数を変更する方法
「set」で設定した環境変数を変更したい場合は、設定する時と同じ記述方法で値を上書きします。
1 |
$ set CAKE_ENV=production |
setで設定した環境変数を恒久的な値とする方法
「set」は一時的に環境変数を設定するコマンドですが、これを恒久的な値とするコマンドとして「setx」が用意されています。
ただ、「setx」で作成した変数は削除できないようなので、「set」コマンドでその都度設定する方がよさそうです。
「setx」についての問題点については下記が参考になるかと思います。
https://qiita.com/jeyei/items/05ce2739501832463b3b
プログラムで使用する環境変数などは「setx」コマンドを使うより、Windowsの「設定」から「環境変数を編集」で検索をして、「環境変数」を設定するウインドウで環境変数を設定する方が問題は少ないだろうと思います。
CakePHP4の関連記事
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
CakePHPのバージョンの調べ方2点を紹介。CakePHP3~CakePHP5は共通だが CakePHP2はフォルダ構成が異なるためコマンドのパスもオプションも異なる。
-
CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法
CakePHP3で検索をするプラグイン「friendsofcake/search」の検索条件のカスタマイズ方法の解説。検索項目を増やしたり、以上、以下での検索や、チェックボックスによる検索の方法などを解説。
-
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。
-
CakePHP 2.3 ログイン、操作履歴、アクセスログ出力
CakePHPでログインや操作履歴などのアクセスログ出力処理を作成します。
-
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。
-
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3でOGPを設定する方法を解説。metaタグを編集するHTMLヘルパーを利用してOGPのタグを編集する。また、エレメントとして分割することでメンテナンス性も向上させる。
-
CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」
CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。
-
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。
-
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその2でバリデーションなどの実用的なカスタマイズ方法を解説。