【コピペ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つをセットで使います。

  1. .envに秘密情報を書く
  2. python-dotenvでPythonから読み込む
  3. .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.pyrequirements.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つです。

  1. .envにAPIキーを書く
  2. python-dotenvで読み込む
  3. .gitignore.envを追加する

この形にしておけば、GitHubにコードを公開するときも秘密情報を漏らしにくくなります。APIを使うPythonスクリプトを書き始めたら、早い段階で.envpython-dotenvを導入しておきましょう。

Pythonでのファイル操作やosモジュールの使い方についてはこちらもあわせてご覧ください。

Python: 現在時刻をファイル名に付けたログファイルを作成する方法

スポンサーリンク