J-Quants をはじめ、外部 API を使う学習では API キーなどの認証情報 を扱う場面が必ず出てきます。これらをコードに直書きすると、Git や生成AI 経由で 意図せず外部へ漏れる事故 につながります。
本記事では、.env ファイルと python-dotenv を中心に、学習プロジェクトでも事故を起こしにくい運用をまとめます。
目次
- 守るべき 3 つの原則
.envファイルの書き方.gitignoreへの登録(最重要)- python-dotenv で読み込む
- API キーをコードに混ぜないコード例
- 環境変数を OS 側で設定する選択肢
- 生成AI を使うときの注意
- 誤って
.envをコミットしてしまったとき - チェックリスト
守るべき 3 つの原則
最初に結論を書きます。学習用途で守るべきは次の 3 点です。
- コードに直書きしない:
api_key = "sk-..."は禁止。値は環境変数または.env経由で読む .envは Git に入れない:.gitignoreに必ず登録する- 生成AI に貼り付けない:プロンプトに API キーを混ぜない
3 つ目は、生成AI ツールが学習に使う・ログに残る前提を踏まえると重要度が高い項目です。コードを質問するときは、鍵の部分を架空値に書き換えてから貼る 癖を付けます。
.env ファイルの書き方
プロジェクトのルートに .env というファイルを作ります。中身は KEY=value の形式です。
JQUANTS_MAILADDRESS=user@example.comJQUANTS_PASSWORD=replace-with-real-passwordJQUANTS_API_KEY=replace-with-real-api-key値はクオートで囲まなくて構いません。空白を含む値は囲みます。値の中に # を含む場合は引用符で囲みます。
.gitignore への登録(最重要)
.env を Git に入れないため、.gitignore に登録します。
.env.env.*!.env.example.env.* で .env.local などの派生ファイルもまとめて除外し、!.env.example で テンプレート用ファイルだけ例外的に追跡 する書き方が定番です。
.env.example を用意する
.env.example は キー名だけを書いた空の雛形 で、Git に入れて公開して構いません。
JQUANTS_MAILADDRESS=JQUANTS_PASSWORD=JQUANTS_API_KEY=リポジトリを clone した直後、cp .env.example .env でコピーして値を埋めるという運用が回しやすくなります。
python-dotenv で読み込む
.env を Python から読むライブラリが python-dotenv です。
インストール
pip install python-dotenv使い方
import osfrom dotenv import load_dotenv
# .env を環境変数に読み込む(同じディレクトリにある前提)load_dotenv()
mail = os.environ["JQUANTS_MAILADDRESS"]password = os.environ["JQUANTS_PASSWORD"]print(mail)load_dotenv() を呼んだ後は、Python 標準の os.environ から値を取り出します。os.getenv("KEY", "default") を使うと、未設定時のデフォルト値を渡せます。
Notebook での使い方
Jupyter Notebook でも同じです。最初のセルで load_dotenv() を呼ぶだけで、以降のセルから環境変数として読めます。
from dotenv import load_dotenvload_dotenv()API キーをコードに混ぜないコード例
良い例と悪い例を並べて確認します。
# 悪い例: コードにキーを直書きimport requests
API_KEY = "sk-real-key-dont-do-this"res = requests.get("https://api.example.com/data", headers={"Authorization": f"Bearer {API_KEY}"})# 良い例: 環境変数経由で読み込むimport osimport requestsfrom dotenv import load_dotenv
load_dotenv()api_key = os.environ["EXAMPLE_API_KEY"]
res = requests.get( "https://api.example.com/data", headers={"Authorization": f"Bearer {api_key}"},)呼び出しコードに鍵そのものが現れない構造を維持します。
環境変数を OS 側で設定する選択肢
.env を使わず、OS の環境変数として設定する方法もあります。長期運用ではこちらのほうが堅牢です。
# macOS / Linux(zsh)export JQUANTS_API_KEY="your-api-key"
# Windows(PowerShell の現在セッションのみ)$env:JQUANTS_API_KEY = "your-api-key"~/.zshrc などに書くと永続化できますが、他人と共有する PC では避ける のが無難です。学習用途なら .env 方式で十分です。
生成AI を使うときの注意
生成AI でコードを書いてもらうとき、エラーログやコードを丸ごと貼ることがあります。そのままだとキーが流出する ため、貼る前に以下を機械的に置換する習慣を付けます。
| 元の値 | 貼り付け時に置き換える例 |
|---|---|
| 実際の API キー | <API_KEY> |
| 実メール | user@example.com |
| パスワード | <PASSWORD> |
| 実 URL のクエリ | パラメータを伏せる |
ツール固有の機能(プロンプト履歴の無効化など)に頼るのではなく、手元で潰してから貼る のが原則です。
誤って .env をコミットしてしまったとき
最悪のケースは、.env を .gitignore に入れる前に git add . && git commit && git push してしまうパターンです。対処の優先順位は次の通りです。
- 対象 API のキー / トークンを直ちに再発行 する(これが最優先)
- リポジトリの履歴からファイルを除去する(
git rm --cached→ 履歴書き換え) - リモートから push し直す
- クローンしている全員に再 clone を依頼する
「履歴を綺麗に消すこと」より、鍵を無効化すること が先です。再発行が間に合えば、流出した古い鍵は使えなくなります。
チェックリスト
学習プロジェクトを始めるときに 1 度だけ確認しておきたい内容です。
-
.envが.gitignoreに入っている -
.env.exampleがリポジトリに入っている -
load_dotenv()を呼んでからos.environ経由で読んでいる - API キーを生成AI への貼り付けで送っていない
- OS や Drive にバックアップを取るときも
.env込みで取っていないか確認した
まとめ
- API キーは コードに直書きせず、
.env+os.environ経由で読む .envは 必ず.gitignoreに入れ、.env.exampleを雛形として残す- python-dotenv の
load_dotenv()で読み込む - 生成AI に貼る前に キーを架空値へ置換する 習慣を付ける
- 誤って公開してしまったら、鍵の再発行が最優先