Webアプリケーションやスクリプトを作成する際、データベースのパスワードやAPIキーといった機密情報をソースコードに直接記述することは、セキュリティ上の大きなリスクとなります。
こうした情報は、OS側で管理される**「環境変数」**として保存し、プログラムの実行時に読み込む方法が推奨されます。
この記事では、Pythonの標準ライブラリである os モジュールを使用して、環境変数を取得する2つの基本的な方法と、それぞれの使い分けについて解説します。
環境変数を取得する準備
Pythonで環境変数を扱うには、標準ライブラリの os モジュールをインポートします。
import os
os.environ というオブジェクトが、現在の環境変数を辞書(dict)のような形式で保持しています。
1. os.environ['KEY']:必須項目の取得
辞書のキー指定と同様に、[](ブラケット)を使って環境変数名(キー)を指定する方法です。
特徴: 指定した環境変数が存在しない場合、KeyError が発生してプログラムが停止します。
用途: 「データベースの接続パスワード」など、その値が設定されていなければプログラムが動作できない(必須の)環境変数を取得する場合に適しています。
import os
print("--- データベース接続処理 ---")
try:
# 必須の環境変数 'DB_PASSWORD' を取得
# 設定されていなければここでエラーが発生し、接続処理を中断できる
db_pass = os.environ["DB_PASSWORD"]
print(f"パスワードを取得しました: {db_pass}")
print("データベースに接続します...")
except KeyError:
print("エラー: 環境変数 'DB_PASSWORD' が設定されていません。")
実行結果(環境変数が設定されていない場合):
--- データベース接続処理 ---
エラー: 環境変数 'DB_PASSWORD' が設定されていません。
2. os.environ.get('KEY'):任意項目の取得
辞書の .get() メソッドと同様に取得する方法です(os.getenv() 関数も同様の動作をします)。
特徴: 指定した環境変数が存在しない場合、エラーにはならず None が返されます。また、第2引数にデフォルト値を指定することも可能です。
用途: 「デバッグモードの設定」など、設定されていなくてもプログラムが動作する(任意の)環境変数を取得する場合に適しています。
import os
# デバッグモードの設定を取得
# 環境変数 'DEBUG_MODE' がなければ、デフォルト値として 'False' を使用する
debug_setting = os.environ.get("DEBUG_MODE", "False")
print(f"デバッグモード設定値: {debug_setting}")
if debug_setting == "True":
print("詳細なログを出力します(デバッグ中)")
else:
print("標準ログのみ出力します(本番稼働中)")
実行結果(環境変数が未設定の場合):
デバッグモード設定値: False
標準ログのみ出力します(本番稼働中)
これにより、環境変数を設定し忘れても、安全なデフォルト値(この場合は False)でプログラムを動かし続けることができます。
まとめ
Pythonで環境変数を取得する際は、その変数の重要度に応じてメソッドを使い分けます。
os.environ['KEY']: 必須の変数。存在しない場合にエラー(KeyError)にして、プログラムを止めるために使用します。os.environ.get('KEY', default): 任意の変数。存在しない場合にデフォルト値を適用し、プログラムを続行させるために使用します。
開発環境と本番環境で挙動を変えたり、セキュリティを確保したりするために、環境変数は非常に重要な仕組みです。
