.env設定ファイルを理解してセキュアな環境構築をしよう(PHP・Laravel共通)

Webアプリケーション開発において、環境変数を安全に管理することは極めて重要です。.envファイルを正しく理解し、適切に扱うことで、開発・本番環境の切り替えや機密情報の保護が可能になります。本記事では、PHPやLaravelに共通する.env設定ファイルの基本と、安全な運用のポイントを解説します。

.envファイルとは?

.envファイルは、アプリケーションの設定情報や機密情報(DB接続情報、APIキーなど)を記述する環境変数ファイルです。以下のような特徴があります。

  • プロジェクトごとに設定できる
  • 本番環境と開発環境で切り替え可能
  • コードベースに機密情報を残さずに済む

例:Laravelの.envファイル(一部)

APP_NAME=MyApp
APP_ENV=local
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=my_user
DB_PASSWORD=secret_password

例:PHPプロジェクトで使用する場合(vlucas/phpdotenvを利用)

純粋なPHPプロジェクトで.envファイルを使うには、vlucas/phpdotenv ライブラリの導入が便利です。Composerを使用してインストールできます。

composer require vlucas/phpdotenv

プロジェクトのルートディレクトリに.envファイルを配置し、以下のように読み込んで使用します。

.envファイルの例:

DB_HOST=localhost
DB_NAME=testdb
DB_USER=testuser
DB_PASS=secret

PHPスクリプト例:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Dotenv\Dotenv;

$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();

$host = $_ENV['DB_HOST'];
$db = $_ENV['DB_NAME'];
$user = $_ENV['DB_USER'];
$pass = $_ENV['DB_PASS'];

try {
    $pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
    echo "接続成功";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
}

このように、.envを使えば機密情報をPHPコードから分離でき、セキュリティ向上と管理の柔軟性を両立できます。


.envファイルはどこに設置する?

.envファイルは、**アプリケーションのルートディレクトリ(最上位フォルダ)**に設置するのが基本です。

Laravelの場合

Laravelでは、プロジェクトをインストールすると自動的に .env ファイルがルートに生成されます。

/your-laravel-project
├── app/
├── bootstrap/
├── config/
├── public/
├── .env         ← ここに設置
├── artisan
└── composer.json
  • public/ ディレクトリはWebからアクセス可能な公開領域であり、
  • .env はそこより**上の階層(非公開領域)**にあるため、直接アクセスされることはありません。

純粋なPHPプロジェクトの場合

独自構成のPHPプロジェクトでも、以下のようにWebルートとは分けて.envを配置します。

/my-php-app
├── public_html/   ← Webからアクセスされる領域
│   └── index.php
├── config/
├── vendor/
└── .env           ← Webから直接アクセスされない場所

ワンポイント

万一 .envpublic/public_html/ に置くと、Web経由でダウンロード・閲覧されてしまう危険性があります。ApacheやNginxでアクセス制限する方法もありますが、そもそも非公開領域に設置するのが最も安全です。


セキュアに.envファイルを運用するための注意点

.envファイルには機密情報が含まれるため、以下の点に注意する必要があります。

1. .gitignoreに.envを追加する

Gitなどのバージョン管理システムには.envを絶対にコミットしないようにします。

# .gitignore に追加
.env
.env.*

2. 本番環境ではパーミッションを制限する

Linuxサーバーでは以下のようにアクセス権を制限しましょう。

chmod 600 .env
chown www-data:www-data .env

3. .env.exampleを用意する

開発者が参考にできるように、.env.exampleファイルを準備し、実際の値を抜いた状態で共有します。

APP_NAME=
APP_ENV=
DB_HOST=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

4. 公開ディレクトリに置かない

Laravelであれば.envはプロジェクトルートにあり、public/からはアクセスできない設計になっていますが、独自PHP環境などではpublic_htmlなどに誤って配置しないよう注意が必要です。


Laravelにおける.envの活用と動的設定

Laravelでは、.envの値は config/ ディレクトリ内の設定ファイルに自動的に適用されます。

例:config/database.php

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
]

.envファイルの値を切り替えることで、データベースの接続先を本番・開発で柔軟に変更できます。


まとめ:セキュアな.env運用でトラブルを未然に防ごう

.envファイルは非常に便利な仕組みですが、機密情報が含まれるため慎重な取り扱いが求められます。バージョン管理からの除外、アクセス権の制限、参考用ファイルの作成などを徹底し、安全な運用を心がけましょう。Laravelだけでなく、純粋なPHPプロジェクトでも、.env管理を取り入れることで、環境構築や設定変更の効率が大きく向上します。

Contact

ウェブサイトの制作や運用に関わる
お悩みやご相談
お気軽にお問い合わせ下さい

ウェブサイトと一口に言っても、企業サイトやECサイト、ブログ、SNSなど、その“カタチ”は目的に応じてさまざまであり、構築方法や使用する技術も大きく異なります。株式会社コナックスでは、お客様のご要望やブランドの個性を丁寧に汲み取り、最適なウェブサイトの“カタチ”をご提案いたします。

デザイン、ユーザビリティ、SEO対策はもちろん、コンテンツ制作やマーケティング戦略に至るまで、あらゆるフェーズでお客様のビジネスに寄り添い、成果につながるウェブサイトづくりをサポートいたします。私たちは、ウェブサイトの公開をゴールではなくスタートと捉え、お客様のビジネスの成功に向けて共に伴走してまいります。