こんにちは、かつコーチです。
前回、Laravelのディレクトリ構造を見ていきましたが、プロジェクト直下に.envという見慣れないファイルがあったのに気づいたでしょうか。
先頭にドットが付いていて、フォルダによっては表示されないこともあるファイルです。
今回は、この.envファイルが何のためにあるのか、どう扱えばいいのかを解説していきます。
.envファイルとは?
環境ごとの設定をまとめる場所
.envは、「環境変数」と呼ばれる設定値をまとめて管理するファイルです。
PHP編でPDOを使ってDB接続をした際、接続情報(ホスト名・ユーザー名・パスワードなど)をPHPファイルの中に直接書いていたと思います。
// PHP編での書き方(PDO)
$pdo = new PDO('mysql:host=localhost;dbname=sample', 'root', 'password');
この「接続情報をコードの中に直接書く」やり方は、実は開発を進めていくうえでいくつか問題があります。
- 開発環境と本番環境で接続先が変わるたびに、コードを書き換える必要がある
- パスワードなどの秘密情報が、コードと一緒にGitで管理されてしまう危険がある
Laravelでは、こうした「環境によって変わる値」を.envファイルに集約し、コード側は.envの値を参照するだけにする、という設計になっています。
.envの中身
.envファイルを開くと、次のような行が並んでいます。
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_first_laravel
DB_USERNAME=root
DB_PASSWORD=
項目名=値 という形式で1行ずつ設定が並んでいます。
DB_HOSTやDB_DATABASEなど、PDOのときに直接コードへ書いていた接続情報が、ここに集約されているのが分かると思います。
.envの設定方法
DB接続情報を設定する
XAMPP環境でMySQLを使う場合、自分の環境に合わせて次のように書き換えます。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_first_laravel
DB_USERNAME=root
DB_PASSWORD=
DB_DATABASEには、あらかじめphpMyAdminなどで作成しておいたデータベース名を指定します。
Laravel Sail(Docker)を使っている場合は、Sailが用意するデフォルト値のまま動くことが多いですが、DB_HOSTがSailのコンテナ名(mysqlなど)になっている点だけ確認しておきましょう。
.envの値をコードから使う仕組み
.envに書いた値は、通常はconfig/フォルダの設定ファイルを経由して読み込まれます。
// config/database.php(抜粋イメージ)
'mysql' => [
'host' => env('DB_HOST', '127.0.0.1'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
],
env('DB_HOST', '127.0.0.1')は、「.envにDB_HOSTがあればその値を使う、なければ127.0.0.1をデフォルト値として使う」という意味です。
コントローラなどの実際のコードの中で、直接env()を呼び出すのは推奨されておらず、基本的にはconfig/ファイルを経由するのがLaravelの作法です。
つまずきやすいポイント:.envをそのままGitに上げてしまう
何が問題なのか
.envファイルには、DBのパスワードやAPIキーなど、外部に漏れると困る情報が含まれます。
❌ Before:.envをそのままGitで管理してしまう
git add .
git commit -m "初回コミット"
git push
Laravelのプロジェクトを初めてGitHubにアップロードしたとき、うっかりこのように.envごと丸ごとコミットしてしまい、後から気づいて青ざめたことがあります。
幸いプライベートリポジトリだったため実害はありませんでしたが、パブリックリポジトリだった場合は、パスワードやAPIキーが世界中から見える状態になってしまうところでした。
✅ After:.gitignoreで.envを除外する
Laravelのプロジェクトをcomposer create-projectで作成すると、標準で.gitignoreファイルに.envが含まれた状態になっています。
# .gitignore(抜粋)
/vendor
.env
/storage/*.key
代わりに、.envのひな形として.env.example(実際の値は空、または仮の値)をGitで管理し、他の開発者は各自の環境で.env.exampleをコピーして.envを作る、という運用が一般的です。
cp .env.example .env
php artisan key:generate
「.envはコミットしない、.env.exampleはコミットする」というルールを、最初に必ず確認する癖をつけておきましょう。
APP_KEYが空だとどうなるか
.envのAPP_KEYは、Laravelがデータの暗号化などに使う重要な値です。
これが空のままアプリを動かそうとすると、次のようなエラーが出ることがあります。
RuntimeException: No application encryption key has been specified.
このエラーが出た場合は、次のコマンドで自動生成できます。
php artisan key:generate
composer create-projectでプロジェクトを作成した場合は自動で設定されますが、.env.exampleをコピーして作った場合は、このコマンドを忘れずに実行してください。
まとめ
この記事のポイント
.envは、DB接続情報など環境ごとに変わる設定値をまとめて管理するファイル- コード側は
env()やconfig/ファイルを経由して.envの値を参照する .envはGitで管理せず、.gitignoreで除外して.env.exampleだけを共有するAPP_KEYが未設定だとエラーになるため、php artisan key:generateで生成する
次に読むべき記事
次回は、Laravel開発で日常的に使うことになる「Artisanコマンド」を一気にまとめて紹介します。
→ 次の記事:Artisanコマンド入門:よく使うコマンドまとめ