サイトアイコン ITC Media

【実例付】python-dotenvで環境変数を扱う方法

(最終更新月:2023年2月)

✔このような方へ向けて書かれた記事となります

「python-dotenvの使い方が知りたい」

「python-dotenvでできることって何があるのだろうか?」

「python-dotenvの実例が見たい」

✔当記事を通じてお伝えすること

当記事では、python-dotenvの基本的な使い方はもちろん、Djangoアプリの開発を通じた使用例までご紹介していきます。

ぜひ最後までご覧ください。

python-dotenvとは?

まずはpython-dotenvがどんなものかを整理しましょう。

使い方や実例をご覧いただくうえで、基本をしっかりと理解しておく必要があります。

python-dotenvとは?

python-dotenvとは、キー・バリューのペアで構成される環境変数を読み込むためのPythonライブラリです。

なぜ環境変数を使うかというと、隠したい文字列などをPythonコードが書かれているファイルとは別に保存できるから。

例えば、APIサービスを使用する際のトークンやWebアプリのシークレットキーなど、Pythonファイルに直接保存しなくて済むようになるのです。

環境変数とは?

環境変数とは、設定したOS内で、共通して使える変数のこと。

同一OS内のプログラムであれば、どこからでも設定・アクセスができるようになるのがメリットです。

例えば、Windowsではプログラムのパス(PATH)やユーザー(USER)などが、環境変数として保存されています。

必要なものを環境変数として設定すれば、OS内の共通言語として、いつでも使用できるようになるのです。

python-dotenvでできること

python-dotenvを使うと、「.env」ファイルという任意の場所に保存したファイルから、好きな値をプログラム内で取り出せます

その「.env」ファイルには、外から見られないようにしたい文字列を格納しておくのです。

python-dotenvの使い方

具体的にpython-dotenvの使い方を見ていきましょう。

python-dotenvのインストール

python-dotenvをインストールする方法は、以下のとおり。

pip install python-dotenv

.envファイルの書き方

.envファイルで登録するキー・バリューは以下のように保存します。

キー=バリュー

バリューである文字列には、’(シングルクウォート)や”(ダブルクウォート)はつけないことに気をつけましょう。

例としては以下のとおりです。

SECRET_KEY=random-string-secret-key-sdfineid73jd093kd
DOMAIN=itc.tokyo

python-dotenvで環境変数を読み込む方法

python-dotenvで環境変数を読み込む方法を見ていきます。

大きく分けると、3ステップで読み込みできます。

python-dotenvで必要なメソッドのインポート

python-dotenvを使うには、必要なメソッドのインポートが必要です。

from dotenv import load_dotenv

load_dotenvは、環境変数を読み込むメソッドです。

使い方は次でご説明します。

load_dotenvメソッドで.envファイルから環境変数を読み込む

load_dotenvを使うことで、環境変数を読み込む準備ができます。

load_dotenvの基本構成は以下のとおり。

load_dotenv(ファイルパス)

実行するファイルと同列であれば、ファイルパスは空欄で構いません。

例1:実行ファイル「sample.py」と.envファイルが同列の場合は以下のとおり。

from dotenv import load_dotenv

load_dotenv() 

例2:実行するファイルとは別のフォルダに保存している場合は以下のようにします。

ファイルツリー

.
├── .env
└── proj
       └── sample.py

コード

import os
env_path = os.path.join(os.path.dirname(__file__), '../.env')
load_dotenv(env_path)

osライブラリで必要な変数を取り出す

load_dotenvで準備が整ったら、osライブラリを使って、環境変数を取り出します。

Python内の変数 = os.environ.get(環境変数のキー)

具体的にはこちらです。

import os
domain = os.environ.get("DOMAIN")

Djangoアプリでシークレットキーを隠そう

Djangoアプリで使用する例をご紹介します。

具体的にはシークレットキーを隠す場面などで、有効です。

Djangoアプリで新たなシークレットキーを生成

Djangoアプリでは、以下のメソッドで、ランダムな文字列のシークレットキーが作成できます。

get_random_secret_key()

Djangoのバージョン4.0.2時点では、以下の場所からインポートし、Djangoシェル内で使用します。

>>> from django.core.management.utils import get_random_secret_key  
>>> get_random_secret_key()
'p324!h$w%065#^s959&!6z049sy4#bwg*+u*#^7075f41jp+^)'

.envファイルを別フォルダに格納

シークレットキーを作成したら、.envに以下のように記載したうえで、authフォルダに保存しましょう。

.envファイル

SECRET_KEY=p324!h$w%065#^s959&!6z049sy4#bwg*+u*#^7075f41jp+^)

ファイルツリー

.
├── auth
│   └── .env
└── src #Djangoのプロジェクトフォルダ

authフォルダの作成は、DjangoアプリをWebに公開する準備として作成をおすすめします。

settings.pyで読み込む

settings.pyで読み込んでいく方法は以下のとおりです。

from dotenv import load_dotenv
import os

BASE_DIR = Path(__file__).resolve().parent.parent
PARENT_DIR = BASE_DIR.parent
env_path = PARENT_DIR / "auth/.env"

load_dotenv(env_path)
SECRET_KEY = os.environ.get("SECRET_KEY")

ほかにもデータベースの情報など、隠したいものを入れておくととても便利です。

まとめ:python-envを使うと機密性が高まる

当記事の内容をまとめます。

環境変数を使いこなすと、アプリのセキュリティが高まります。

安全な場所に大切な情報を隠せるからです。

ぜひ使いこなして、さまざまなアプリ開発に役立ててください。

モバイルバージョンを終了