
こんにちは。よっしーです(^^)
今日は、slimの開発環境にdotEnvを導入する方法についてご紹介します。
前提
この記事は下記の記事をベースにしています。
背景
ローカル環境や開発環境、検証環境や本番環境など、環境ごとに値を変えたい場合があると思います。例えば、Redisの接続先などです。そうした場合に、環境ごとの値を.envファイルで管理することで解決しようとしたのが本記事の内容になります。
修正内容
下記のファイルを作成、修正します。各ファイルの内容は下記の各セクション内に記載しています。
new file: app/php-fpm/slim_app/.env
modified: app/php-fpm/slim_app/app/settings.php
modified: app/php-fpm/slim_app/composer.json
modified: app/php-fpm/slim_app/public/index.php
app/php-fpm/slim_app/.env
下記の内容で新規作成します。
REDIS_HOST=redis
REDIS_PORT=6379
app/php-fpm/slim_app/composer.json
下記のコマンドで修正します。
docker run --rm -it -v ./app/php-fpm/slim_app:/app composer require vlucas/phpdotenv
上記のコマンドを実行した結果、30行目が下記のように修正されます。
- "slim/slim": "^4.10"
+ "slim/slim": "^4.10",
+ "vlucas/phpdotenv": "^5.5"
app/php-fpm/slim_app/public/index.php
15行目に追記します。
+// Load .env
+if (is_readable(__DIR__ . '/../.env')) {
+ $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
+ $dotenv->load();
+}
app/php-fpm/slim_app/app/settings.php
25行目を修正します。
'redis' => [
- 'host' => 'redis',
- 'port' => 6379,
+ 'host' => $_ENV['REDIS_HOST'],
+ 'port' => (int) $_ENV['REDIS_PORT'],
],
動作確認
下記のコマンドを実施します。
make setup
make up
ブラウザから「http://localhost:8080/testredis」にアクセスして、下図のように表示されていれば成功です。

解説
composer
このコマンドは、Dockerコンテナ内で実行されるComposerコマンドです。以下に各オプションの説明を示します。
docker run: Dockerコンテナを実行するコマンドです。--rm: コンテナが停止した後に自動的に削除されることを指定します。-it: インタラクティブモードでコンテナを実行し、ターミナルに接続します。-v ./app/php-fpm/slim_app:/app: ホストマシンのディレクトリ./app/php-fpm/slim_appをコンテナ内の/appディレクトリにマウントします。これにより、ホストマシンのディレクトリとコンテナ内のディレクトリが同期されます。composer require vlucas/phpdotenv: Composerパッケージマネージャーを使用して、vlucas/phpdotenvパッケージをプロジェクトに追加します。vlucas/phpdotenvは、環境変数を読み込むための便利なライブラリです。
このコマンドを実行すると、vlucas/phpdotenvパッケージがプロジェクトに追加され、Composerによって依存関係が解決されます。また、./app/php-fpm/slim_appディレクトリがコンテナ内の/appディレクトリと同期され、プロジェクトファイルをコンテナ内で利用できるようになります。
app/php-fpm/slim_app/public/index.php
このコードは、PHPプロジェクトで.envファイルから環境変数を読み込むための処理です。以下に解説をします。
// Load .env: コメントとして、.envファイルを読み込む処理が始まることを示しています。if (is_readable(__DIR__ . '/../.env')) {:__DIR__は現在のファイルのディレクトリを表し、..は1つ上の階層を指します。この行では、現在のファイルから見て、1つ上の階層にある.envファイルが読み込み可能かどうかを確認しています。is_readable()関数は、指定されたファイルが読み込み可能であるかどうかを判定します。$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');:Dotenv\DotenvクラスのcreateImmutable()メソッドを使用して、.envファイルを読み込むための$dotenvオブジェクトを作成しています。引数として、.envファイルが存在するディレクトリのパスを指定しています。$dotenv->load();:$dotenvオブジェクトのload()メソッドを呼び出して、.envファイルを実際に読み込みます。このメソッドにより、.envファイル内の環境変数が現在のPHPプロセスの環境変数として設定されます。
このコードは、.envファイルを読み込む前に、ファイルの存在と読み込み可能性を確認しています。そして、.envファイルを読み込んで、その中に定義されている環境変数をプロジェクト内で利用できるようにします。.envファイルは、プロジェクトの設定や機密情報など、環境ごとに異なる値を格納するために使用されることが一般的です。
app/php-fpm/slim_app/app/settings.php
この設定は、Redisサーバーの接続情報を定義しています。以下に解説をします。
'redis': この設定のキーはredisです。このキーは、Redisサーバーの接続情報を識別するために使用されます。'host' => $_ENV['REDIS_HOST']: Redisサーバーのホスト名またはIPアドレスを指定しています。$_ENV['REDIS_HOST']は、.envファイルから読み込まれた環境変数REDIS_HOSTの値を取得しています。.envファイル内でREDIS_HOSTという環境変数が定義されている必要があります。'port' => (int) $_ENV['REDIS_PORT']: Redisサーバーのポート番号を指定しています。$_ENV['REDIS_PORT']は、.envファイルから読み込まれた環境変数REDIS_PORTの値を取得しています。(int)はキャスト演算子であり、環境変数の値を整数型に変換しています。.envファイル内でREDIS_PORTという環境変数が定義されている必要があります。
この設定は、Redisサーバーの接続に必要な情報を動的に取得するために、環境変数を使用しています。環境変数を使用することで、異なる環境(開発環境、本番環境など)において異なるRedisサーバーの接続情報を設定できます。.envファイル内で適切な環境変数が設定されていることが重要です。
おわりに
今日は、slimの開発環境にdotEnvを導入する方法についてご紹介しました。
環境ごとに.envファイルの内容を変更することで、各環境にあった設定を反映できるようになったと思います。
本記事でご紹介したソースは、下記のリポジトリにあります。

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)



コメント