【Flask入門】.envファイルを使って環境変数を安全に管理する方法

Python

Flaskアプリ開発では、APIキーやパスワードをコードに直接書くのはNGです。

代わりに .env ファイルを使って環境変数(Environment Variables)として管理するのが、安全・便利・本番対応できる方法です。

この記事では、初心者でもすぐできるように、python-dotenv を使った Flask + .env連携の実践例 をわかりやすく解説します。

この記事のゴール

  • .envファイルとは何かを理解する
  • Flaskで .env の内容を自動読み込みする方法を習得
  • 実務でよく使う設定例(APIキー、DB接続、デバッグ設定など)
スポンサーリンク
スポンサーリンク

.envファイルとは?

.env ファイルとは、アプリで使う設定値を「環境変数」として保存するためのファイルです。

# .env の例
FLASK_ENV=development
FLASK_DEBUG=True
SECRET_KEY=mysecretkey123
OPENWEATHER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

「.env」は環境変数(Environment Variables)の略。ファイル名の最初がドット(.)なのは隠しファイルという意味です。

Flaskでの環境変数を管理する流れ

  • .env ファイルを作る
  • Pythonの python-dotenv ライブラリで読み込む
  • Flaskアプリから os.getenv() で取得する

実践: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アプリを作ろう」から変更はありません。適宜、ご参照下さい。

ラズベリーパイ4b セット

Flask等の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_KEYFlaskのセッション暗号化キー
FLASK_ENV / FLASK_DEBUG開発モードの切り替え
DATABASE_URLPostgreSQLやSQLiteの接続文字列
OPENWEATHER_API_KEYAPIキー管理
EMAIL_HOST, EMAIL_USERメール送信設定
LOG_LEVELログ出力レベル(INFO/DEBUG)

適宜、ご参考になされて下さい。

まとめ

ポイント内容
.env とは?設定値を安全に管理する隠しファイル
読み込み方法python-dotenvload_dotenv()
Flaskとの連携os.getenv() で取得し、SECRET_KEY やAPIキーに活用
セキュリティ.gitignore.env を追加し、APIキー流出を防止

タイトルとURLをコピーしました