Pythonで「環境変数を簡単に管理する」dotenvの使い方

Pythonでの開発において、環境変数の管理は非常に重要です。特に、APIキーやデータベースの接続情報など、セキュリティ上の理由からコードに直接書きたくない情報を扱う際には、環境変数を利用することが推奨されます。ここで役立つのが、python-dotenvというライブラリです。

本記事では、python-dotenvを使って環境変数を簡単に管理する方法について詳しく解説します。

1. python-dotenvとは?

dotenv
Loads environment variables from .env file. Latest version: 16.4.7, last published: 2 months ago. Start using dotenv in ...

python-dotenvは、Pythonプロジェクトで環境変数を管理するためのライブラリです。このライブラリを使用することで、.envファイルに環境変数を定義し、アプリケーションの実行時にこれらの変数を簡単に読み込むことができます。これにより、コードの可読性が向上し、セキュリティも強化されます。

2. インストール

まずは、python-dotenvをインストールします。以下のコマンドをターミナルで実行してください。

pip install python-dotenv

これで、python-dotenvがプロジェクトに追加されます。

3. .envファイルの作成

次に、プロジェクトのルートディレクトリに.envファイルを作成します。このファイルには、環境変数をKEY=VALUE形式で記述します。例えば、以下のように設定します。

# .env
DEBUG=True
SECRET_KEY=mysecretkey
DATABASE_URL=postgres://user:password@localhost:5432/mydatabase

4. 環境変数の読み込み

作成した.envファイルから環境変数を読み込むためには、Pythonスクリプト内でload_dotenv関数を使用します。以下は、基本的な使用例です。

# main.py
import os
from dotenv import load_dotenv

# .envファイルを読み込む
load_dotenv()

# 環境変数を取得
debug = os.getenv('DEBUG')
secret_key = os.getenv('SECRET_KEY')
database_url = os.getenv('DATABASE_URL')

print(f"Debug: {debug}")
print(f"Secret Key: {secret_key}")
print(f"Database URL: {database_url}")

このコードを実行すると、.envファイルに設定した環境変数の値が出力されます。

5. 環境変数の上書き

既に設定されている環境変数を上書きしたい場合は、load_dotenv関数にoverride=Trueを指定します。以下のように記述します。

# main.py
import os
from dotenv import load_dotenv

# .envファイルを読み込む(既存の環境変数を上書き)
load_dotenv(override=True)

# 環境変数を取得
secret_key = os.getenv('SECRET_KEY')
print(f"Secret Key: {secret_key}")

6. 環境ごとの設定管理

開発環境と本番環境で異なる設定を使用する場合、複数の.envファイルを作成し、環境に応じて読み込むことができます。例えば、dev.envprod.envというファイルを作成します。

# dev.env
DEBUG=True
SECRET_KEY=dev_secret_key
DATABASE_URL=postgres://dev_user:dev_password@localhost:5432/dev_database

# prod.env
DEBUG=False
SECRET_KEY=prod_secret_key
DATABASE_URL=postgres://prod_user:prod_password@localhost:5432/prod_database

これらのファイルを環境に応じて読み込むためのコードは以下の通りです。

# main.py
import os
from dotenv import load_dotenv

# 環境変数を取得
env = os.getenv('ENV', 'dev')  # デフォルトはdev
load_dotenv(f'.env.{env}')

# 環境変数を取得
debug = os.getenv('DEBUG')
secret_key = os.getenv('SECRET_KEY')
database_url = os.getenv('DATABASE_URL')

print(f"Debug: {debug}")
print(f"Secret Key: {secret_key}")
print(f"Database URL: {database_url}")

このコードを実行する際に、環境変数ENVを設定することで、適切な.envファイルが読み込まれます。

# 開発環境を指定
ENV=dev python main.py

# 本番環境を指定
ENV=prod python main.py

7. 環境変数のデフォルト値設定

環境変数が設定されていない場合にデフォルト値を設定することも可能です。os.getenvの第二引数にデフォルト値を指定します。

# main.py
import os
from dotenv import load_dotenv

load_dotenv()

# 環境変数を取得(デフォルト値を設定)
secret_key = os.getenv('SECRET_KEY', 'default_secret_key')
print(f"Secret Key: {secret_key}")

8. セキュリティの考慮

.envファイルには、APIキーやデータベースのパスワードなどの機密情報が含まれるため、これをバージョン管理システムに含めないようにすることが重要です。.gitignoreファイルに.envを追加して、リポジトリに含まれないようにします。

# .gitignore
.env

9. まとめ

python-dotenvを使用することで、Pythonプロジェクトにおける環境変数の管理が非常に簡単になります。以下のポイントを押さえておくと、より効果的に環境変数を管理できます。

  • 環境変数の外部管理
    • .envファイルを使用して、機密情報をコードから切り離す。
  • 環境ごとの設定
    • 環境に応じて異なる.envファイルを作成し、簡単に切り替える。
  • デフォルト値の設定
    • 環境変数が未設定の場合に備えてデフォルト値を設定する。
  • セキュリティの確保
    • .envファイルをバージョン管理から除外し、機密情報を保護する。

これらの方法を活用することで、Pythonアプリケーションの設定管理がより安全かつ効率的になります。

参考

タイトルとURLをコピーしました