Laravelのプロジェクトでは、環境変数の設定は.envのファイルで行います。インストールするプロジェクトの環境(開発、ステージング、プロダクション)ごとで内容を変更できるし、.gitignoreに入れておけばバージョン管理のレポジトリでプライベートなデータ(パスワードやapiのトークンなど)を共有する必要もなく安全です。この機能、私の昔のphpのプロジェクト、つまりLaravel生誕以前の時代でのプロジェクトで現在もお客さんに使用されているプロジェクトでも取り入れたいです。

まず、この機能を提供するのは、phpdotenvというパッケージです。

https://github.com/vlucas/phpdotenv

Laravelのプロジェクトでは、以下のコマンドを実行すると、

$ composer show | grep dotenv
vlucas/phpdotenv                      v3.6.4   Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.

とパッケージが使用されていることが確認されます。

さて、Laravelでないphpのプロジェクトでこのパッケージを使うには、以下のように、プロジェクトのディレクトリを作成してから、パッケージをインストールします。

$ mkdir dotenv
$ composer require vlucas/phpdotenv

チェックのためにテストのプログラムを作成します。

<?php
require_once 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();                                                                                                                                                                                                   

echo $_ENV['BASE_DIR']."\n";

.envのファイルも作成します。

BASE_DIR=/var/www/example

この時点で、このプロジェクトのディレクトリ構造は、以下のようになります。

.
├── composer.json
├── composer.lock
├── .env
├── test.php
└── vendor
    ├── autoload.php
    ├── composer
    ├── graham-campbell
    ├── phpoption
    ├── symfony
    └── vlucas

テストを実行してみます。

$ php test.php
/var/www/example

.envから値を取得できましたね。以下のような設定も可能です。

BASE_DIR=/var/www/example
IMAGE_DIR=${BASE_DIR}/images 

すでに設定した環境変数を.envの中で変数として使用できます。つまり、Laravelでも同様なことができるのですね、

By khino