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

※本サイトにはプロモーション・広告が含まれています。

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

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

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

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

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

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

  • python-dotenvとは?
  • python-dotenvの使い方
  • python-dotenvの実例

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

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

筆者プロフィール

筆者プロフィールアイコン

【現職】プロジェクトマネージャー/SE(元外資系金融機関営業)

【副業】ブログ(月間15万PV)/YouTube/Web・アプリ制作

コミュニケーション × ビジネススキル × 文章力 × プログラミングスキルを活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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は隠したい文字列があるときに便利

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

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

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

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