0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Pythonでスクリプトを書いていると、APIキーやデータベースのパスワードなど、コードに直接書きたくない値が出てくる。そういった値を管理するのに便利なのが .env ファイルと python-dotenv ライブラリだ。

この記事では、.env ファイルの基本的な使い方を順を追って説明する。

なぜコードに直接書いてはいけないのか

たとえば、次のようなコードを書いたとする。

API_KEY = "sk-abc123xyz"

このままGitHubなどにpushすると、APIキーが世界中に公開されてしまう。悪意ある第三者に悪用されたり、クラウドサービスの利用料が発生したりするリスクがある。

設定値はコードの外に出しておくのが基本だ。

.envファイルとは

.env ファイルは、環境変数をテキスト形式で書いておくファイルだ。形式はシンプルで、キー=値 を1行ずつ並べるだけ。

API_KEY=sk-abc123xyz
DATABASE_URL=sqlite:///mydb.db
DEBUG=true

このファイルはGitの管理対象から外す(.gitignore に追加する)ことで、秘密の値をリポジトリに含めずに済む。

セットアップ

インストール

pip install python-dotenv

ファイル構成

myproject/
├── .env          # 秘密の値を書くファイル(Gitに含めない)
├── .env.example  # .envのサンプル(Gitに含める)
├── .gitignore
└── main.py

.env.example には実際の値を書かず、キー名だけ残しておくと、チームメンバーが何の値を用意すればいいか分かりやすい。

# .env.example
API_KEY=
DATABASE_URL=
DEBUG=

基本的な使い方

.envファイルを読み込む

from dotenv import load_dotenv
import os

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

api_key = os.getenv("API_KEY")
print(api_key)  # sk-abc123xyz

load_dotenv() を呼ぶと、.env に書いた値が環境変数としてセットされる。その後は os.getenv() で取得できる。

値が存在しない場合のデフォルト値

debug = os.getenv("DEBUG", "false")  # 第2引数がデフォルト値

.envDEBUG が書いていない場合は "false" が返る。

.gitignoreへの追加

.env ファイルは必ずGitの管理対象から外しておく。

# .gitignore
.env

これを忘れると、誤ってコミットしてしまう可能性がある。

よくあるミス

os.environ との違い

os.environ["KEY"] はキーが存在しないと KeyError が発生する。os.getenv("KEY") はキーが存在しない場合に None を返すため、エラーが起きにくい。用途に応じて使い分けよう。

# KeyErrorが発生する可能性がある
value = os.environ["API_KEY"]

# 存在しない場合はNoneが返る
value = os.getenv("API_KEY")

値は常に文字列になる

.envDEBUG=true と書いても、Python側では文字列の "true" として扱われる。真偽値として使いたい場合は変換が必要だ。

debug = os.getenv("DEBUG", "false").lower() == "true"

load_dotenv() を呼ぶタイミング

load_dotenv() はスクリプトの先頭で呼ぶようにする。後から呼んだ場合、それより前の os.getenv() には反映されない。

まとめ

やること 方法
インストール pip install python-dotenv
.envに書く KEY=value 形式
読み込む load_dotenv()
値を取得する os.getenv("KEY")
Gitから除外する .gitignore.env を追加

.env ファイルを使う習慣をつけておくと、セキュリティ的に安全なコードが書けるようになる。小さなスクリプトであっても、APIキーなどを扱う場合は活用してみるのはどうでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?