.envと環境変数について解説します。
まえがき
新入生がよく環境構築で詰まるポイントに.envがあります。
同じ説明を何人にもしていますので、記事にしてみようと思いました。
環境変数とはなんぞや?
環境変数はプログラムを実行する環境固有の値を埋め込むための仕組みです。
どうしてそんなものが必要なのかというと、プログラムは動かす端末固有の値を使うことがあるからです。
プログラムが動くときに『サーバーの名前』や『データベースのパスワード』などの設定情報を外から渡すための仕組みともいえます。
例えばWebアプリをつくる場合、CSSやjavascriptのソースファイルの場所をURLで指定する必要がありますが、ローカル開発環境と本番環境ではIPアドレスやドメインが違うほか、サブディレクトリがあったりなかったりでパスがズレてしまいます。
そのため環境変数を使わない場合はconfig.phpなど、環境設定を書いたソースコードを環境ごとに編集して書き換えなければいけなくなります。
define(APP_DOMAIN,"localhost")
define(APP_DOMAIN,"samplehost")
ここで注意点ですが、このconfig.phpはgit管理されているものとします。
その場合、ローカルで開発中はずっと競合するため、コミットしてはいけないファイルがステージ候補に出続けます。
手間がかかってしまいますね。
そこで、環境変数ファイルを別途用意しておき、.gitignoreでGit管理から外しておきます。
そこで用意されたのが.envです。
.envファイルは単なるテキストファイルで、環境変数をまとめて書いておくものです。プログラムはこのファイルを読み込んで環境変数を設定します。
.envによく設定されるもの
アプリケーションによって差はあるものの、以下のような値は環境差分が出やすく、環境変数として設定されることが多いです。
- サイトのドメイン
- データベースへのログイン情報
- 外部サービスを使用するための暗号鍵など
- AWS
- GoogleAPI
- OpenAI
.env.exampleとは
さて、.envは.gitignoreされているので、git cloneした時にはワークスペースに存在しない状態になっています。
環境構築手順書にサンプルがあればいいのですが、ない場合はキーに何を書けばいいのか分かりません。
なぜなら、どんな値を環境変数として読み込むかはプログラムごとに違うからです。
そこで、キーだけ列挙しておいて、値は空やよく使われる値をデフォルトとして書いておき、git管理されたものが.env.exampleです。
よく、環境構築手順書に
cp .env.example .env
というコマンドがあると思いますが、それはこのためだったのです。
おわりに
今回は、.envの本質についての話でした。
プログラミングの入門書には.envを使用する手順は書いてあっても意味は載っていない事が多いため、なんとなく動かしたまま、何かのはずみで環境構築を一部やり直す事になった時点で困る人が多いと思います。
意味がわかれば「うーん、あ、.env作りなおしてなかったかも!?」と思いつくようになってくると思います。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion