【PHP】env(環境変数)の使い方

env(環境変数)ってどんなときに使うのだろう?

と思っていませんか?実はenv(環境変数)はWEBアプリ開発では重要な役割があります。今回は【PHP】env(環境変数)の使い方をご紹介します。

env(環境変数)の仕様

まずはenv(環境変数)の仕様を確認しておきましょう。env(環境変数)のリファレンスにはこのようにあります。

環境変数として現在のスクリプトに渡された変数の連想配列です。

これらの変数は PHP パーサが実行されている環境から PHP のグローバル名前空間に取り込まれます。 その多くは、PHP が実行されているシェルに由来するものであり、 システムが違えばシェルも違ってくるため、確定的なリストを 得ることは不可能です。定義されている環境変数のリストについては 使用しているシェルのドキュメントをご覧ください。

参考:$_ENV
https://www.php.net/manual/ja/reserved.variables.environment.php

プログラミングで「変数」が宣言できるようにサーバにも変数があり、このサーバに設定されている変数を環境変数といいます。PHPでは環境変数を$_ENVという変数に持つ仕様となっています。

環境変数を実際に確認してみる

実際に環境変数を確認してみましょう。MacOSであれば「ターミナル」を起動すると黒い画面が表示されます。そして、envコマンドを実行すると次のようになります。

MacOSやLinuxでenvコマンドを実行するとそのPCに設定されている環境変数を確認することができます。

env(環境変数)の使い方

次にenv(環境変数)の使い方について解説します。

env(環境変数)を設定する

PHPで環境変数を設定するにはputenvという関数を使います。

サーバーの環境変数に setting を追加します。 この環境変数は、カレントのリクエストを実行している間のみ存在します。 リクエスト終了時、環境変数は元の状態に戻されます。

参考: putenv
https://www.php.net/manual/ja/function.putenv.php

以上に示したリファレンスをまとめるとputenv関数は引数として文字列をとり、返り値はboolean型を返します。またputenv 関数使って環境変数に追加された変数はリクエスト終了時には元の状態に戻る仕様となっています。

env(環境変数)を取得する

設定した環境変数を取得するにはgetenvという関数を使い、リファレンスでは次のようにあります。

環境変数の値を取得します。

varname が示す環境変数の値を返し、 環境変数 varname が存在しない場合はfalseを返します。 varname が省略された場合、 すべての環境変数は連想配列として返されます。

参考: getenv
https://www.php.net/manual/ja/function.getenv.php

putenv関数で環境変数が設定し、getenv関数を使ってその環境変数を取得することができます。

【初心者向け】PHPのgetenvの使い方|PHPで環境変数を表示する

.envファイルに環境変数を記述する

LaravelやCakePHPといったWEBフレームワークで開発していると、.envという名前のファイルを見たことがありませんか?.envファイルはPHPで利用する環境変数を宣言しておくためのファイルです。

最近のフレームワークには.envファイルを使うためのパッケージが標準でインストールされています。PHPのプログラムで利用する環境変数を.envファイルに記述しておくと、その環境変数をPHPのプログラムから取得することができるため便利です。

ターミナルでenv(環境変数)を設定する

ターミナルからexportコマンド実行することで環境変数を設定することもできます。ターミナルを起動して、次のようにコマンドを実行すると環境変数を設定することができます。

このように直接、ターミナルで環境変数を設定することも可能です。

env(環境変数)を使うメリット/デメリット

次にenv(環境変数)を使うメリットとデメリットを解説します。

env(環境変数)を使うメリット

WEBアプリ開発では開発したWEBアプリをテスト用サーバにアップしたり、本番用サーバにアップしたり、といろいろなサーバにWEBアプリのプログラムをアップします。

環境変数はこういった複数のサーバにアップするときに便利です。では、より具体的なケースを紹介します。

WEBアプリを公開設定の制御

LaravelやCakePHPといった最近のWEBフレームワークにはアプリケーションをどのように公開するのか、という設定ができます。例えば開発用として公開するとデバッグ情報が表示されるようになり、本番用として公開すると開発のときに出ていたデバッグ情報は表示されません。

このような公開設定は環境変数によって制御することができます。

データベースなどのミドルウェアの接続情報を設定する

実際のWEBアプリ開発ではWEBアプリをテスト用としてテスト用サーバに公開します。それに併せてテスト用のデータベースもを準備することが多いです。

ですがWEBアプリはテスト用サーバだけでなく、本番用サーバにも公開することを考えなければなりません。このときデータベースの接続情報を毎回、公開する環境ごとに書き換えていては手間になります。

こんなときに環境変数を利用することでこの手間を減らすができます。

データベースの接続情報を環境変数としてテスト用サーバ、本番用サーバにそれぞれ設定しておけばWEBアプリには設定情報を読み込むという処理を書いておけばOKです。

env(環境変数)を使うデメリット

env(環境変数)を使うことはメリットもありますが反面、デメリットもあります。

機密情報が漏れるリスク

環境変数はサーバごとに設定できる変数です。もし悪意を持った人がサーバに入ることができてしまうとデータベースなどのミドルウェアの情報を盗まれるというリスクがあります。仮に情報を盗まれたデータベースがECサイトのものであれば、会員情報漏洩といった大きな問題に繋がります。

環境変数は.envファイルに書かれることが多いので、.envファイルの管理には注意が必要です。具体的な対策としては、.envファイルをgitのバージョン管理対象から外すことが挙げられます。

フレームワークでのenv(環境変数)の使い方

実際に環境変数をWEBフレームワークの中でどのように利用するのかをプログラムを示しながら解説します。

Laravel/CakePHPなどのフレームワークでのenv(環境変数)の使い方

LaravelやCakePHPといった最近のWEBフレームワークでは.envファイルに環境変数をまとめて記述するようになっています。例えば、.envにこのように記述すると、Laravelでは次のようなプログラムで環境変数を取得することができます。

CakePHPの場合も同様の方法で取得することができます。

もしWEBフレームワークを利用しない場合はcomposerというパッケージ管理ツールを使って、phpdotenvというパッケージをインストールすると、.envファイルを使った環境変数の設定が可能です。

Dockerを利用する場合は、Dockerfileに環境変数を設定する

最近ではWEBアプリをよりスムーズにインターネット上に公開するための技術として、コンテナーという技術が注目されており、この技術を使う企業は徐々に増えてきています。

このコンテナー技術で最もポピュラーなソフトウェアとしてDockerがあります。

Dockerの詳しい解説はここでは割愛しますが、環境変数を利用するときはDockerfileに次のように記述することで環境変数として設定することができます。

Docker + PHP + Apache で開発環境を整える【PHP入門者必見】

まとめ

いかがでしたか?今回は【PHP】env(環境変数)の使い方についてご紹介しました。環境変数をうまく使うことでWEBアプリ開発をスムーズに進めることができます。ぜひ参考にしてみてくださいね。

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?