Flaskアプリ開発では、APIキーやパスワードをコードに直接書くのはNGです。
代わりに .env ファイルを使って環境変数(Environment Variables)として管理するのが、安全・便利・本番対応できる方法です。
この記事では、初心者でもすぐできるように、python-dotenv を使った Flask + .env連携の実践例 をわかりやすく解説します。
この記事のゴール
.envファイルとは?
.env ファイルとは、アプリで使う設定値を「環境変数」として保存するためのファイルです。
# .env の例
FLASK_ENV=development
FLASK_DEBUG=True
SECRET_KEY=mysecretkey123
OPENWEATHER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
「.env」は環境変数(Environment Variables)の略。ファイル名の最初がドット(.)なのは隠しファイルという意味です。
Flaskでの環境変数を管理する流れ
実践:Flaskで.envを使ってAPIキーを管理する
フォルダ構成
flask_env_demo/
├── app.py
└── .env
実行ファイルと同じ階層に作成します。
.envファイルを作成
flask_env_demo/.env に以下を記述します。
FLASK_DEBUG=True
SECRET_KEY=dev-secret-key
OPENWEATHER_API_KEY=あなたのAPIキー
DEFAULT_CITY=Tokyo
python-dotenv をインストール
pip install python-dotenv
app.py(サンプルコード)
「【Flask入門】外部API(天気情報)と連携してWebアプリを作ろう」で使用している「app.py」のAPIキーを「.env」から呼び出すように変更しました。
from flask import Flask, render_template, request
from dotenv import load_dotenv
import os
import requests
# --- .envファイルを読み込む ---
load_dotenv() # カレントディレクトリの .env を自動読み込み
app = Flask(__name__)
API_KEY = os.getenv("OPENWEATHER_API_KEY")
@app.route('/', methods=['GET', 'POST'])
def index():
weather_data = None
error = None
if request.method == 'POST':
city = request.form.get('city')
if not city:
error = '都市名が未入力です。'
else:
url = f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric&lang=ja'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
weather_data = {
'city': city,
'temp': data['main']['temp'],
'description': data['weather'][0]['description'],
'icon': data['weather'][0]['icon']
}
else:
error = f'天気情報の取得に失敗しました。(ステータスコード: {response.status_code})'
return render_template('index.html', weather=weather_data, error=error)
if __name__ == '__main__':
app.run(debug=os.getenv("FLASK_DEBUG", False))
「html」ファイルは「【Flask入門】外部API(天気情報)と連携してWebアプリを作ろう」から変更はありません。適宜、ご参照下さい。
実行方法
python app.py
ブラウザで http://localhost:5000 を開くと、.env ファイルの内容(都市名・APIキー)を元に天気が表示されます。
結果

セキュリティのポイント
| やってはいけない例 | 正しい方法 |
|---|---|
APIキーを app.py に直書き | .env から読み込む |
.env をGitHubにアップロード | .gitignore に追加する |
| 本番と開発を同じ設定 | .env.prod, .env.dev に分ける |
上記に気を付けて開発を行うと良いです。
.gitignoreに追加
# プロジェクトの .gitignore に追記
.env
よく使う.env設定例(実務向け)
| 変数名 | 用途 |
|---|---|
SECRET_KEY | Flaskのセッション暗号化キー |
FLASK_ENV / FLASK_DEBUG | 開発モードの切り替え |
DATABASE_URL | PostgreSQLやSQLiteの接続文字列 |
OPENWEATHER_API_KEY | APIキー管理 |
EMAIL_HOST, EMAIL_USER | メール送信設定 |
LOG_LEVEL | ログ出力レベル(INFO/DEBUG) |
適宜、ご参考になされて下さい。
まとめ
| ポイント | 内容 |
|---|---|
.env とは? | 設定値を安全に管理する隠しファイル |
| 読み込み方法 | python-dotenv の load_dotenv() |
| Flaskとの連携 | os.getenv() で取得し、SECRET_KEY やAPIキーに活用 |
| セキュリティ | .gitignore に .env を追加し、APIキー流出を防止 |
