環境変数の読み込みってどーなんってんのよ?
Laravelで環境変数を使う時、DBの設定とかAPP_NAMEとか、.envに書いたのをconfig経由で使います。
一方、LaravelのViteでコンパイルしたTypeScriptなんかも.envに書いたのを環境変数として使います。
で、「問題」…じゃあ、環境ごとに設定値を変更したい場合はどうするの?
Laravelの環境変数
まとめから書く
解説
何も考えなければ、.envが展開される。
ただし、httpd.confや.htaccessあたりに環境変数$APP_ENVが定義してあると、.env.${APP_ENV}が読み込まれる。(上書きではなく、.envの代わりに読み込まれる。)
SetEnv APP_ENV=development
だと、.env.developmentのみが読み込まれる。だから、.envのすべてをコピーした.env.developmentを用意しなければならない。
あるいは、artisanコマンドだと --envオプションがついている。
php artisan schedule:run --env=production
とかして使う。
「そんなん面倒やん、DBの接続設定だけ変えたいねん。」という場合は、サーバの環境変数を設定してやるとそれで上書きされる。DBをSQLITEにしたかったら、.env.developmentを全コピーしなくても、環境変数$DB_CONNECTIONだけを変えてやったあとで artisan serve するなり本番環境でApacheスタートさせてやればよい。
$ export DB_CONNECTION="sqlite" $ artisan serve
とか。既にある環境変数は
$ printenv DB_CONNECTION
とかで調べる。もちろん、.htaccessやhttpd.confに書いてもよい。
Viteの環境変数(LaravelにくっついてるViteね。以下、Laravel Viteと書く)
まとめから書く
- Laravel Viteは.envに加えて、環境変数に合わせて .env.development や .env.productionを読み込む
- ただし、.envはLaravelでも使うので、VITE_がついてる変数しか読み込まない。
- TypeScriptで使う場合は、const foo = import.meta.env.VITE_**** で読み込める。
development とか production は環境変数 NODE_ENV によって決まる。npm run devをした時にpackage.json
{ "scripts": { "dev": "vite", "build": "vite build" } }
となっているので、NODE_ENV="developmen"となり、npm run buildの時には NODE_ENV="production"となる。