.env(phpdotenv)を使えば環境変数を簡単に作れるよ、読み込めるよ。注意点など。

phpdotenv 良いよ

PHP言語で環境変数を自由に設定して読み込みたいならphpdotenv使おう。楽やぞ。

こんなふうに使う

.env
HOGE="PIYO"
PAPA="MAMA"
COUNT=5
test.php
<?php
require './vendor/autoload.php';
use Dotenv\Dotenv;

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

echo $_ENV["HOGE"]; // "PIYO" が出力されます
echo $_ENV["PAPA"]; // "MAMA" が出力されます
echo $_ENV["COUNT"]; // "5" が出力されます ※string

.envに設定した環境変数をPHP側から$_ENV[“キー”]で読み出すことができます。

phpdotenvをインストールしよう

composerからインストールしよう。composerの使い方やそもそものcomposer本体のインストールについては割愛。

composer require vlucas/phpdotenv

もっと使いやすくするよ

なんかいちいちDotenv::createするのめんどいし、簡単に呼び出せたら良いよね。環境変数を取得するためのクラス作っちゃおう。

Env.php
<?php
namespace k_i\Hoge;
use Dotenv\Dotenv;

class Env {
    private static $dotenv;

    public static function get($key){
        if((self::$dotenv instanceof Dotenv) === false){
            self::$dotenv = Dotenv::create(__DIR__);
            self::$dotenv->load();
        }
        return array_key_exists($key, $_ENV) ? $_ENV[$key] : null;
    }
}
test.php
<?php
require './vendor/autoload.php';
use k_i\Hoge\Env;

echo Env::get("HOGE"); // "PIYO" が出力されます
echo Env::get("PAPA"); // "MAMA" が出力されます
echo Env::get("COUNT"); // "5" が出力されます ※string

使う側がnamespaceに属していない場合はこうだったけど、同じネームスペース内でしたら、わざわざuseで読み出さなくても Env::get(“HOGE”) だけで設定値取得できるよ。

.envで環境変数を管理する際の注意点

便利だし簡単だし良いんだけど、使用上の注意点を理解して使用しないと事故や運用上の不都合が起きる。具体的にどんな事故や不都合でしょうか…。

環境変数が漏れる事故・誰でも見られる事故

.envはファイルなので、普通に何もしない状態で公開領域に設置されていたら普通にブラウザで見ることができてしまう。非常に危険だ。

.envファイルを守る

.htaccess で.envファイルへのアクセス拒否設定をしてあげたり、.envファイルのパーミッション(400かなぁ…)をしっかり見直すべき。

.htaccess
<FilesMatch "^\.env">
    deny from all
</FilesMatch>

.envファイルを公開領域外へ

.envがブラウザで見られる公開領域内にあるから危険なのでは、公開領域外のディレクトリに設置することも検討を。

公開領域外に設置したときはDotenv::create()の第一引数をその設置したディレクトリのパスにしてあげること。

Dotenv::create("公開領域外のパス"); // __DIR__ だった箇所

しっかり守っていこう…としか言えない

.envファイルを守っていたと思ったら設定ミスってたり、サーバーの引っ越しなどあって引越し先で設定忘れてたらもうだめだと思う。

しっかり守れる自身があるなら.env使っていこう。

.envファイルの管理の面倒臭さ

git管理対象外のファイルになると思う。

だから環境を作るときにgit cloneしてくるときにその環境に応じた.envファイルを作ってもらうなどしないといけない。

先輩プログラマからローカル開発環境用の.envファイルを貰ったりとかで開発環境を作るんじゃないでしょうか。(超適当だけど有り得そうな例えです)

まぁ。。。これって.envファイルに限らず、どの管理方法でも言えるのか。この面倒臭さをここで例を上げたのは間違えだったかもすまん。phpdotenvに限らず面倒くさいね。

phpdotenvを使用しないという判断も

危険性を理解ししっかり安全に使える自身があるならphpdotenv使ってもいいと思う。でも個人的には本番サイトでphpdotenvを使うことには正直抵抗がある。

じゃあ、phpdotenvを使用しない選択も判断の1つだと思う。

環境変数の設定はphpdotenvがないとできないとかはない。今回の記事はphpdotenvの使い方と注意点だけを紹介する記事だから割愛するが、他にも方法はある。

環境や体制を考えて、自分にあった環境変数の管理をしていけばいいと思う。

普通にphpdotenv便利だったので紹介でした。おわり。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA