エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法

      2024/06/23

Windows上のXAMPP環境のコマンドラインから CakePHPのコマンド実行する際に環境変数を指定する方法

 
今回は「CakePHP4でコマンドプログラムを作成する」の全 4回のうちの最終回で、「XAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法」について解説します。
 

 
 

環境変数は Linuxと Windowsとで指定方法が異なる

 
CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
上記の記事で、CakePHPの環境変数を設定して本番環境と開発環境を振り分ける解説をしましたが、その際、コマンド(シェル)を実行する際に環境変数を指定して実行する方法も解説しました。
 
ですが、上記の記事で解説していた方法は、Linux環境では有効ですが、Windows上に構築している XAMPP環境では実行できないことを確認しましたので、改めて、Linux環境と Windows環境とで実行できる方法を解説します。
 
 

Linuxと Windowsでコマンドを実行する方法

 
まずおさらいから。
 
Linux環境でコマンドラインからコマンド(シェル)を実行する場合は、ルートフォルダから下記を実行します。
(「SampleTests」と言うコマンド(シェル)に「getList」と言う引数(パラメータ)を付けて実行するコマンドです。)
 

 
環境変数を指定して実行する場合は、コマンドの前に変数名とその値を指定する、下記の形式で記述します。
 

 
Windows上の XAMPP環境で実行する場合は、「/bin」フォルダに移動して、下記のコマンド形式で記述します。
 

 
Windows環境になって変わるのは、「set」と「&」を付けるところです。
 
 
※コマンドライン上では「//」はコメント行にはなりませんが、便宜上、PHPのコメントの記述方法を利用しています。
 
 

コマンドプロンプトで環境変数を指定する方法の詳細解説

 

Linuxと Windowsでコマンド実行時に環境変数を設定する記述方法の違い

 
改めて Linuxと XAMPPでのコマンドを並べてみました。
 

 
 

Windowsの環境変数の設定方法は 2つのコマンドをつなげて実行している

 
Windows環境での「set CAKE_ENV=develop& cake SampleTests getList」は、下記のコマンド 2つを 1行で実行していることになります。(2つのコマンドとして別々に実行しても問題なく実行できます。)
 

 
Linuxの場合、複数のコマンドを 1行で実行する場合は「;(セミコロン)」で区切りますが、Windowsの場合は「&(アンパサンド)」で区切りますので、上記のコマンド 2つを 1行で実行する場合は下記となります。
 

 
 

環境変数を設定して 2つ目のコマンドを実行する際の最重要ポイント

 
ここで非常に重要なポイントとしては「&」と「develop」の間にはスペースを入れない、ということです。
 

 
上記のように「develop」と「&」との間にスペースがあると、「CAKE_ENV」の値として保存される値は「develop」+「半角スペース」となってしまいます。
 
 
そのため、上記の間違いの記述方法で実行すると、下記の if文が「false」となってしまいます。
$_SERVER["CAKE_ENV"]」の値には半角スペースが入っていますので。
 

 
 
私はこの「&」の前に空白を入れてはいけない、ということに気づかず延々と悩んでいました。
この後解説しますが、設定されている環境変数を確認するコマンドでもスペースの有無は確認できないのです...
 
 

Windowsの setで設定した環境変数はウインドウを閉じるまで有効

 
解説したように、Windowsで環境変数は「set 変数名=値」と言う形式で設定しますが、設定した環境変数の有効期限は、そのコマンドラインのウインドウを閉じるまで有効になっています。
 
そのため、一度環境変数を設定したウインドウのコマンドラインからは、下記のコマンドを実行するだけで設定した環境変数が有効な状態で処理を実行します。
 

 
また、Windowを閉じると環境変数は削除されます。
 
 

Windows環境で setコマンドを使って環境変数を設定、確認、変更、削除する方法

 

setで設定した環境変数を確認する方法

 
setで設定した内容を確認したい場合は「set」だけを入力します。
「set」だけ入力すると設定されている環境変数すべてが表示されます。
 

 
「set」だけだとすべての環境変数が表示されますので、探すのが面倒です。
そんな場合は「findstr」を使って条件抽出をするといいでしょう。
Windowsには「grep」コマンドがありませんので、代わりに「findstr」を使用します。
 
 
findstrコマンドについて詳しく知りたい方は下記のオフィシャルサイトが参考になるかと思います。
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/findstr
 
 

setで設定した環境変数を削除する方法

 
「set」で設定した環境変数を削除したい場合は、下記のように値を空白にしてコマンドを実行します。
これで「CAKE_ENV」と言う環境変数自体が削除されます。
 

 
 
環境変数の有効期間はウインドウを開いている間ですので、コマンドラインのウインドウを閉じると消去されます。
また、設定した環境変数は設定したウインドウのみ有効ですので、別のコマンドラインのウインドウを開いてもそちら側では環境変数は設定されていない状態になっています。
 
 

setで設定した環境変数を変更する方法

 
「set」で設定した環境変数を変更したい場合は、設定する時と同じ記述方法で値を上書きします。
 

 
 

setで設定した環境変数を恒久的な値とする方法

 
「set」は一時的に環境変数を設定するコマンドですが、これを恒久的な値とするコマンドとして「setx」が用意されています。
 
ただ、「setx」で作成した変数は削除できないようなので、「set」コマンドでその都度設定する方がよさそうです。
「setx」についての問題点については下記が参考になるかと思います。
https://qiita.com/jeyei/items/05ce2739501832463b3b
 
 
プログラムで使用する環境変数などは「setx」コマンドを使うより、Windowsの「設定」から「環境変数を編集」で検索をして、「環境変数」を設定するウインドウで環境変数を設定する方が問題は少ないだろうと思います。
 
 

CakePHP4の関連記事

CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
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でロギングスコープやログレベルを使用してログを出し分ける方法を解説
 
その他の「CakePHP4」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

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

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法

CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。

CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法

CakePHP3にComposerからインストールできないプラグインやライブラリなどを利用する方法、vendorにファイルを設置し、composer.jsonを更新し、それを呼び出す方法を詳細に解説。

CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定

CakePHPのアップロードするファイル名を乱数で変更しセキュリティを高める方法を解説。

CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3で保存前にバリデーション結果を取得する2つの方法

CakePHP3でデータベースに値を保存する前にバリデーションを行い、その結果によって処理を振り分ける方法について解説。「$topic->errors()」と「$topic->hasErrors()」の2つの方法がある。

CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない

CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。

CakePHP4でcontrollerで実行したバリデーションエラーをmodelのにマージする方法
CakePHP4でcontrollerで実行したバリデーションエラーをmodelのにマージする方法

CakePHP4でcontrollerで実行したバリデーションの結果をModelのバリデーション結果に追加するメソッド「setError()」「setErrors()」の使い方の解説。

CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点

CakePHP5のヘルパーで他のヘルパーを読み込む方法を解説。公式の日本語CookbookはCakePHP4のソースのままで間違っているため注意が必要。CakePHP4からの移行の際も同じ点に注意が必要。

CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。

CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製UsersプラグインのCakePHP4版の紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。

CakePHP3ログファイルの出力方法・$this->log()の解説
CakePHP3ログファイルへの出力・$this->log()、独自ログへの出力方法の解説

コントロール、モデルの変数の中身を見るときはログに出力する方法が有効です。$this->log()を利用すると変数だけじゃなく、連想配列、オブジェクトも簡単にログ出力ができます。