(最終更新月:2023年2月)
✔このような方へ向けて書かれた記事となります
「python-dotenvの使い方が知りたい」
「python-dotenvでできることって何があるのだろうか?」
「python-dotenvの実例が見たい」
✔当記事を通じてお伝えすること
- python-dotenvとは?
- python-dotenvの使い方
- python-dotenvの実例
当記事では、python-dotenvの基本的な使い方はもちろん、Djangoアプリの開発を通じた使用例までご紹介していきます。
ぜひ最後までご覧ください。
python-dotenvとは?
まずはpython-dotenvがどんなものかを整理しましょう。
使い方や実例をご覧いただくうえで、基本をしっかりと理解しておく必要があります。
- 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のインストール方法
- .envファイルの書き方
- 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で必要なメソッドのインポート
- load_dotenvメソッドで.envファイルから環境変数を読み込む
- osライブラリを使って必要な変数を取り出す
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アプリで使用する例をご紹介します。
具体的にはシークレットキーを隠す場面などで、有効です。
- シークレットキーの作成
- .envファイルを別フォルダに格納
- settings.pyで読み込む
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を使うと機密性が高まる
当記事の内容をまとめます。
- python-dotenvを使うとPythonコードで環境変数が扱える
- python-dotenvを使いこなすには、osライブラリも必要
- python-dotenvは隠したい文字列があるときに便利
環境変数を使いこなすと、アプリのセキュリティが高まります。
安全な場所に大切な情報を隠せるからです。
ぜひ使いこなして、さまざまなアプリ開発に役立ててください。