【コピペOK】python-dotenvで.envを安全に使う方法|APIキー直書きを卒業する
APIキーの直書きは危険です。GitHubに上げると漏れる可能性があります。
たとえば、次のようなトラブルにつながります。
- APIキーを盗用され、高額な請求が発生する:外部サービスのAPIを勝手に使われ、短時間で利用料が増えることがあります
- 管理画面やデータベースに不正アクセスされる:ユーザー名やパスワードを直書きしていると、サイト改ざんやデータ流出につながります
- キーを停止するまでサービスが使えなくなる:漏洩に気づいてキーを無効化すると、再発行と設定変更が終わるまでアプリが止まることがあります
この記事では、python-dotenvで.envを読み込む方法をコピペで解決します。
# 危険な例:コードに秘密情報を直接書いている
API_KEY = "sk-abcdef1234567890"
AUTH = ("admin", "password123")
PythonでOpenAI API、WordPress API、Google APIなどを使うと、APIキーやパスワードをどこに置くか迷います。手元では直書きでも動きますが、そのまま公開すると秘密情報が外に出るリスクがあります。
この記事では、python-dotenvを使って.envファイルからAPIキーを読み込む方法を、初心者向けにコピペできる形で解説します。
結論:APIキーはコードに書かず.envに分ける
PythonでAPIキーやパスワードを扱うなら、次の3つをセットで使います。
.envに秘密情報を書くpython-dotenvでPythonから読み込む.gitignoreに.envを追加してGitHubに上げない
フォルダ構成はこの形です。
project/
├─ main.py
├─ .env
└─ .gitignore
.envには本物のAPIキーを書きます。
API_KEY=sk-abcdef1234567890
DB_PASSWORD=mysecretpassword
Python側ではload_dotenv()で読み込みます。
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.environ["API_KEY"]
db_password = os.environ["DB_PASSWORD"]
最後に、.gitignoreへ.envを追加します。
.env
これで、コードには秘密情報を書かず、GitHubにも.envを上げない形にできます。
なぜAPIキーを直書きしてはいけないのか
APIキーをコードに直接書くと、次のリスクがあります。
- GitHubに公開される:公開リポジトリに上げた瞬間、第三者に見られる可能性があります
- Gitの履歴に残る:あとで消しても、過去のコミットには残ります
- チーム共有しにくい:人によって違うキーやパスワードを安全に扱えません
- 環境を切り替えにくい:開発環境と本番環境の設定を分けにくくなります
特にAPIキーは、漏れると自動で悪用されることがあります。意図しない課金や利用制限につながることもあるため、「あとで消せばいい」ではなく、最初からコードに書かない運用にしておくのが安全です。
.envファイルとは何か
.envファイルは、APIキー・パスワード・トークンなどの秘密情報をコードから分けて保存するファイルです。
Pythonのコードには実際の値を書かず、環境変数として読み込みます。これにより、コードだけをGitHubに公開しても、.envを除外していれば秘密情報は公開されません。
ただし、.env自体が暗号化されるわけではありません。メールやチャットにそのまま貼るような共有は避けましょう。
python-dotenvをインストールする
python-dotenvは、.envファイルをPythonから読み込むためのライブラリです。
pip install python-dotenv
仮想環境を使っている場合は、仮想環境を有効化してから実行します。環境によってはpython -m pip install python-dotenvでも構いません。
python-dotenvの使い方
ここからは、.envを作ってPythonから読み込む手順です。
1. .envファイルを作成する
プロジェクトのルートフォルダに.envファイルを作ります。
# .env
API_KEY=sk-abcdef1234567890
DB_PASSWORD=mysecretpassword
値の前後に余計なスペースは入れない方が分かりやすいです。
2. Pythonから.envを読み込む
Python側では、load_dotenv()を呼び出してからos.environで値を取得します。
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.environ["API_KEY"]
print(api_key)
load_dotenv()を実行すると、.envに書いた値が環境変数として読み込まれます。
3. os.environ[]とos.getenv()を使い分ける
APIキーのように必須の値にはos.environ[]がおすすめです。キーが存在しない場合にKeyErrorが出るため、設定漏れに早く気づけます。値がなくても処理を続けたい任意設定にはos.getenv("DEBUG_MODE", "false")のように書きます。
.gitignoreに.envを追加してGitHubに上げない
.envを作っただけでは不十分です。GitHubに上げないために、.gitignoreへ必ず追加します。
.env
チーム開発では、本物の値を入れないサンプルとして.env.exampleを作ると便利です。
# .env.example
API_KEY=
DB_PASSWORD=
.envはGitに上げず、本物のAPIキーを書きます。.env.exampleはGitに上げて、必要な項目名だけを共有します。
.gitignoreに追加したあと、次のコマンドで確認します。
git status --short .env
git ls-files .env
どちらにも.envが表示されなければ、Gitの管理対象には入っていません。すでに.envをコミット済みの場合、.gitignoreに追加しただけでは追跡対象から外れないため、次の手順で対応します。
もし.envをコミットしてしまったら
.envを誤ってコミットした場合、最初にやるべきことはファイル削除ではありません。
まずAPIキーを無効化し、新しいキーを再発行してください。
Gitの履歴に残ったキーは、あとから削除しても第三者に見られている可能性があります。そのため、漏れた可能性があるキーは使い続けない方が安全です。
その後、Gitの追跡対象から外します。
git rm --cached .env
.gitignoreに.envを追加して、改めてコミットします。
git add .gitignore
git commit -m "Ignore .env file"
公開済みリポジトリに秘密情報を上げてしまった場合は、履歴削除の対応が必要になることもあります。ただし、まずキーの無効化と再発行を優先してください。
よくある質問
Q. .envファイルはどこに置けばいいですか?
基本的には、プロジェクトのルートフォルダに置きます。main.pyやrequirements.txtと同じ階層に置くと分かりやすいです。
Q. チームで開発する場合、.envは共有しますか?
.envファイル自体は共有しません。代わりに.env.exampleをGitで共有し、各メンバーが自分の環境で.envを作成します。
Q. load_dotenv()を書いたのに読み込めません
まず.envの場所を確認してください。load_dotenv()は通常、Pythonスクリプトと同じディレクトリ、または上位ディレクトリにある.envを探します。実行方法やプロジェクト構成によって想定した.envが見つからない場合は、load_dotenv(dotenv_path="...")でパスを指定します。
Q. .envに書いた値は暗号化されますか?
暗号化されません。.envは秘密情報をコードから分けるためのファイルです。GitHubに上げない、不要な人に共有しないことが前提です。
Q. 本番環境でも.envファイルを使いますか?
本番環境では、OSの環境変数やクラウドのシークレット管理サービスを使うのが一般的です。.envは主にローカル開発環境で使う方法と考えると安全です。
まとめ:直書きをやめて.envに分ける
PythonでAPIキーやパスワードを扱うなら、コードへの直書きは避けましょう。
最低限やることは次の3つです。
.envにAPIキーを書くpython-dotenvで読み込む.gitignoreに.envを追加する
この形にしておけば、GitHubにコードを公開するときも秘密情報を漏らしにくくなります。APIを使うPythonスクリプトを書き始めたら、早い段階で.envとpython-dotenvを導入しておきましょう。
Pythonでのファイル操作やosモジュールの使い方についてはこちらもあわせてご覧ください。


ディスカッション
コメント一覧
まだ、コメントがありません