uiuifree.com

- サイト制作のノウハウと最適化を目指して-

2020.6.14【PHP】phpdotenvで環境変数を扱う

【PHP】phpdotenvで環境変数を扱う

PHPを実装しているときに環境変数をコード内に定義するのはよくありません。
Githubなどにコミットすると不特定多数の人が閲覧できる状況ができセキュリティ問題を発生させてしまいます。

phpdotenv

ではどうすれば実装できるのか?
phpdotenvというライブラリを使います。.env.htaccessやホストを変更せずにアプリケーションが必要と知る構成変数を読み込む簡単な方法です。DEV/PRD環境でDBの接続情報をホストの環境変数に持たせる必要なく、単一のファイル(.env)を読み込むことで値を定義できるようになります。

phpdotenv をインストール

phpdotenvはcomposerで簡単にインストールできます。

 composer require vlucas/phpdotenv:4.*

重要

.envファイルの取り扱いは慎重に行ってください

.envの取り扱いについて

機密性の高いAPIキーやパスワードなどは全て.envファイルに含めることを推奨します。また機密性が高いものが含まれる場合はバージョン管理の対象外にしてください、.gitignoreなどに含めコミットされないよう設定してください。

プロジェクトで共有したいとき

プロジェクト内で.envファイルは独自の共有フォルダに保管するか個別通知にて共有します。 過去のプロジェクトでは「DEV環境から直接コピー」「S3から取得」「開発者用の共有フォルダで共有」などの方法で共有されていました。

.envの使用例

.envファイルはプロジェクトのrootディレクトリに配置します。 Key-Value形式で変数を記述することができます、誰が見てもわかるよう定義しましょう

.env
S3_BUCKET=dotenv
SECRET_KEY=souper_seekret_key

アプリケーションで.envを読み込みます。

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

これだけで定義した環境変数にgetenv()メソッドを使ってアクセスできるようになりました。

アクセス例
echo getenv('S3_BUCKET');
echo getenv('SECRET_KEY');

envファイル内で環境変数を使う

BASEディレクトリやフルパスの定義を毎回記述することを省略できます。

.env
BASE_DIR="/var/webroot/project-root"
CACHE_DIR="${BASE_DIR}/cache"
TMP_DIR="${BASE_DIR}/tmp"

まとめ

これでPHPアプリケーションでenvファイルを定義できるようになりました。
扱いは簡単だけど機密情報を扱うものなどで慎重に扱いましょう。

  • 機密情報が扱われるので不特定多数の人が閲覧できるところに配置しない
  • .envファイルはバージョン管理ファイルにコミットすることは推奨しません
  • PRD・DEVなど環境ごとに用意
目次
PROFILE

このサイトを運営してるuiuifreeです。
渋谷のベンチャー企業で2年ほど新規事業を担当した後にフリーランスエンジニアにキャリア転換。
求人サイトの開発が多くエンジニア/看護師/保育士などの分野でサイトを運営しています。

アウトプット中の技術

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)