Flaskアプリで環境変数を管理するベストプラクティスまとめ!初心者でもわかる安全で便利な方法
生徒
「Flaskでアプリを作っているんですが、パスワードや秘密の情報ってどこに書けばいいんですか?」
先生
「そういう大事な情報はコードに直接書かず、環境変数(かんきょうへんすう)として管理するのが安全なんです。」
生徒
「環境変数ってなんですか?難しそう…。」
先生
「大丈夫。環境変数は、アプリに外から情報を渡すための“メモ”のようなものです。安全に管理できて、切り替えも簡単なんですよ。今から詳しく説明しますね!」
1. 環境変数とは?
環境変数とは、パソコンやサーバーの中に設定できる「名前と値のペア」のことです。例えば「SECRET_KEY=abc123」という形で、Flaskアプリに秘密のキーを渡せます。
これを使うメリットは次の通りです。
- パスワードや秘密キーをソースコードに書かなくて済むので安全
- 開発環境・本番環境ごとに簡単に切り替えできる
- チーム開発でも、他の人に見せたくない情報を守れる
たとえるなら、冷蔵庫の扉に貼るメモのようなものです。冷蔵庫の中身(アプリ本体)には触れずに、「今日は牛乳を買う」と外に書いておく感じです。
2. WindowsやMacで環境変数を設定する方法
Flaskアプリで環境変数を使うには、まずパソコンに値を設定します。
Windowsの場合
set SECRET_KEY=abc123
set FLASK_ENV=development
Mac/Linuxの場合
export SECRET_KEY=abc123
export FLASK_ENV=development
この状態でFlaskアプリを起動すると、アプリは設定した環境変数を読み取ることができます。
3. Flaskで環境変数を使う方法
Pythonには標準でosというモジュールがあり、これを使うと簡単に環境変数を取得できます。
import os
from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'default_key')
@app.route("/")
def index():
return f"SECRET_KEYは {app.config['SECRET_KEY']} です"
if __name__ == "__main__":
app.run()
os.getenvの第二引数にデフォルト値を書いておくと、環境変数が設定されていない場合でも動作します。
4. .envファイルで管理する方法(おすすめ)
毎回コマンドでsetやexportを打つのは面倒ですよね。そこで便利なのが.envファイルです。このファイルにまとめて書いておけば、自動で読み込ませられます。
.envファイルの例
SECRET_KEY=abc123
FLASK_ENV=development
DEBUG=True
Pythonコード
まず、python-dotenvというライブラリをインストールします。
pip install python-dotenv
その後、アプリのコードで読み込みます。
import os
from flask import Flask
from dotenv import load_dotenv
# .envファイルを読み込む
load_dotenv()
app = Flask(__name__)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
@app.route("/")
def index():
return f"現在のSECRET_KEYは {app.config['SECRET_KEY']} です"
if __name__ == "__main__":
app.run()
この方法なら、開発用・本番用で別々の.envファイルを使うだけで簡単に切り替えられます。
5. ベストプラクティスまとめ
環境変数を安全に管理するためのコツを整理します。
- .envファイルをGitなどにアップしない(.gitignoreに追加)
- 本番環境と開発環境で値を分ける
- 必須の環境変数はデフォルト値を書かない(設定忘れを防ぐため)
- チーム開発ではサンプル用.env.exampleを共有
このルールを守れば、安全で管理しやすいFlaskアプリが作れます。
6. よくあるエラーと解決方法
初心者がつまずきやすいポイントをまとめました。
- エラー: SECRET_KEYがNoneになる
→ .envファイルが正しい場所にあるか確認しましょう。 - エラー: モジュールdotenvが見つからない
→pip install python-dotenvを忘れていないか確認してください。 - 本番環境で値が反映されない
→ サーバー側の環境変数を正しく設定しているか確認しましょう。
まとめ
Flaskアプリで環境変数を活用する方法を振り返ると、開発の安全性と柔軟性を高めるうえで非常に重要な仕組みであることが理解できます。特に、SECRET_KEYやデータベース接続情報のような機密性の高い値をソースコードに直接書かず、環境ごとに外部設定として管理することで、運用上のリスクを大幅に下げることができます。開発環境・本番環境・検証環境など、用途に応じて設定を簡単に切り替えられる点も大きなメリットです。 また、.envファイルによる管理は、値をひとつのファイルにまとめられるため非常にわかりやすく、python-dotenvを使うことでアプリ起動時に自動読み込みが行われ、毎回手動で環境変数を設定する手間から解放されます。実際の開発現場でも広く利用されている方法であり、チーム開発でも統一した形式で設定を共有できる点は大きな強みです。さらに、.gitignoreへ.envを登録しておくことで、誤って機密情報を公開してしまうトラブルも防ぐことができます。 Flaskではos.getenvを利用して環境変数を取得しますが、デフォルト値を設定しておけば想定外の未設定にも対応でき、アプリが急に動かなくなる事態を避けることができます。一方、重要な値はデフォルトを設定せず、設定漏れに気付けるようにしておくなど、場面に応じた使い分けも求められます。開発者が意識すべきポイントとして、単に環境変数を使うだけでなく、アプリ全体の流れと動作を理解しながら管理する姿勢が欠かせません。 初心者がつまずきやすい問題として、dotenvのインストール忘れ、.envファイルの配置ミス、サーバー側の環境変数未設定などが挙げられますが、基本的なルールを理解していれば落ち着いて原因を突き止められます。今回学んだ内容はFlaskだけにとどまらず、他のWebフレームワークやサービスでも共通して活用できる知識であり、アプリ開発の基礎力を高める大切なステップになるはずです。
サンプルプログラム
from flask import Flask
import os
from dotenv import load_dotenv
# .envを読み込む
load_dotenv()
app = Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY", "sample_default")
app.config["FLASK_ENV"] = os.getenv("FLASK_ENV", "development")
app.config["DEBUG"] = os.getenv("DEBUG", "False")
@app.route("/")
def home():
return f"現在のSECRET_KEYは {app.config['SECRET_KEY']} です"
生徒
「環境変数を使うと、どうしてこんなに管理しやすくなるんですか?」
先生
「コードと大切な値を分けて管理できるからですね。環境が変わってもファイルを書き換える必要がなく、外部設定を切り替えるだけで済むんです。」
生徒
「たしかに、.envを使うと見通しも良くなりました。python-dotenvが自動で読み込んでくれるのも便利ですね。」
先生
「そのとおりです。そして、.envをGitに含めないよう注意しておけば、機密情報が外に漏れるリスクも減ります。」
生徒
「今回学んだ方法を使えば、安心してFlaskアプリを開発できますね!」
先生
「ええ。環境変数は多くのWebアプリで使われる基本技術なので、しっかり身につけておくと必ず役に立ちますよ。」