環境変数とは
環境変数とは、その名の通り、コンピュータやプログラムが動く環境を設定するための変数です。
環境変数の種類
Web開発初心者だと、「環境変数=.env に書くもの」というイメージがあるかもしれません(私だけ?)が、実情はだいぶ違いました。
.envに書かない環境変数
OSレベルで設定されている環境変数や、フレームワークのデフォルト設定など、開発者が自ら設定しなくて良い環境変数があります。これらは、外部の設定に依存しているので、セキュリティ上問題がないため、敢えて隠しファイルに記入しなくても良いとも言えます。
.envに書く環境変数
開発物の秘密情報や、プロジェクト固有の設定など、.envに書くべき環境変数もあります。
.envは、ソースコードから分離しているため、外部に漏らしたくない情報を管理するのに適しています。例えば、DBのパスワードやAPIキーがその例です。DBパスワードが流出して、自社の大切なデータが奪われてしまったり、有料のAPIを無断で利用されたりするリスクを防ぐことができます。
また、開発環境と本番環境でDBを切り替える場合なども、.envで設定しておくと便利です。
ちなみに、ソースコードの中に定義されている環境変数はハードコードと呼ばれ、envファイルに集約することが望ましいようです。pythonの静的解析チェックツールのRuffでも指摘されます。
【おまけ】python開発におけるdotenvとdirenv
初めて携わった開発ではdotenv、これから携わる開発ではdirenvが使われていたので、簡単に違いを調べてみました。
python-dotenv
プログラミング言語のフレームワークには、.envの情報を扱うパッケージが用意されているようです。python-dotenvは、pythonにおけるそれ。公式ドキュメント( https://pypi.org/project/python-dotenv/ ) には、”Python-dotenv reads key-value pairs from a .env
file and can set them as environment variables.”と書いてあるように、キーとバリューのペアを、プログラム内で読み込むために用いられます。
【使い方】
①読み込みメソッドであるload_dotenv
をimportする
from dotenv import load_dotenv
②load_dotenv()
でファイルパスを取得する
同じ階層にある場合は、パスは不要です。別フォルダの場合は下記のように、osライブラリを用います。
import os
env_path = os.path.join(os.path.dirname(file),パス)
load_dotenv(env_path)
③変数を取り出す
変数 =os.environ.get(環境変数のキー)
direnv
一言で言うと、フォルダごとに違う環境変数を読み込むときに便利なツールです。フォルダ内に.envrcというファイルを作っておくと、.envrcより下の階層に入った時にだけ、自動的に環境変数が読み込まれ、外の階層に出ると、自動的にunloadしてくれます。複数プロジェクトを扱っている時に、便利な機能のようです。
使い方は、下記サイトを参考にしました。