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でも同様なことができるのですね、
メルマガ購読の申し込みはこちらから。