Flaskで環境変数を使う方法を詳しく解説!
2024年7月3日
こんにちは!
FlaskはPythonで構築された軽量なウェブフレームワークで、そのシンプルさと拡張性から多くの開発者に使われています。
Flaskアプリケーションをデプロイする際に、セキュリティや設定管理の観点から環境変数を使用することが一般的です。
今回の記事では、Flaskで環境変数を使う方法について詳しく説明し、実際の使用例などを含めて解説します。
環境変数とは?
まずは、そもそも環境変数が何なのか?なぜ使うのかについてご説明します。環境変数についてご存じの方は読み飛ばしてください。
環境変数とはシステム全体でアクセスできる変数
環境変数とは、システム全体でアクセスできる変数のことです。
プログラムの設定情報や機密情報を格納するために使用されます。具体的には、データベースの接続情報や、APIの鍵などを保存します。
環境変数を使うことで、コードに直接ハードコードすることなく、設定情報を外部から注入することができます。
なぜ環境変数を使うのか?
環境変数を使う理由は以下の2つです。
- セキュリティの向上
- 設定の分離
セキュリテイの面では、機密情報をコードに直接記述しないため、リポジトリに誤ってコミットしてしまうリスクを減らせます。例えば、コーディング内にパスワードを記述した状態で、GitHubに公開すると、パスワードが流出してしまいます。
また、設定の分離という面では、異なる環境(開発、テスト、本番)での設定変更が容易になります。開発環境では、開発用のデータベースの情報を設定し、本番環境では、本番用のデータベースの情報を設定することができます。それぞれ、開発用の環境変数ファイル、本番用の環境変数ファイルを準備して、それぞれの環境で読み込めば実現できます。
このようなメリットがあるため、環境変数が使われます。
環境変数の設定方法については、こちらの記事で詳しく解説しています。
関連記事:【Linux】exportコマンドの使い方解説!環境変数の設定をしよう
Flaskで環境変数を使う方法
Flaskで環境変数を使う方法は、以下の3つの方法があります。
- Pythonのosモジュールを使う
- .envファイルを使う
- Flask-Configを使う
それぞれの方法について詳しく解説します。
Pythonのosモジュールを使う
Pythonの標準ライブラリであるos
モジュールを使って環境変数にアクセスできます。
os.environ
を使うことで、環境変数の取得が可能です。
import os
# 環境変数の値を取得
value = os.environ.get('MY_VARIABLE')
また、環境変数が存在しない場合、デフォルトの値を設定することも可能です。
import os
# 環境変数が存在しない場合
value = os.environ.get('MY_VARIABLE', 'default_value')
.envファイルを使う
開発環境では、環境変数を管理しやすくするために.envファイルを使うことが一般的です。
このファイルに環境変数を定義し、Pythonのdotenvライブラリを使って読み込みます。.envファイルを使う手順を解説します。
1.まず、プロジェクトのルートディレクトリに.envファイルを作成し、環境変数を定義します。
SECRET_KEY=supersecretkey
DATABASE_URL=postgresql://user:password@localhost/dbname
2.python-dotenvライブラリをインストールします
pip install python-dotenv
3.Flaskアプリケーションで.envファイルを読み込みます。
import os
from flask import Flask
from dotenv import load_dotenv
# .envファイルを読み込む
load_dotenv()
app = Flask(__name__)
# 環境変数から設定を取得
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL')
@app.route('/')
def home():
#環境変数を使う処理など
if __name__ == '__main__':
app.run()
このような方法で、.env
ファイルに定義された環境変数がアプリケーションで使用できます。
Flask-Configを使う
Flaskには、設定を管理するためのFlask-Config
拡張があります。
これを使うことで、環境ごとに異なる設定を簡単に管理できます。
1.まず、Flask-Configをインストールします。
pip install Flask-Config
2.config.pyを作成し、以下のように定義します。以下は、開発環境(DevelopmentConfig)、テスト環境(TestingConfig)、本番環境(ProductionConfig)の設定を定義しています。
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY', 'default_secret_key')
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
class DevelopmentConfig(Config):
DEBUG = True
class TestingConfig(Config):
TESTING = True
class ProductionConfig(Config):
DEBUG = False
TESTING = False
3.Flaskアプリケーションに設定を適用します。
import os
from flask import Flask
from config import DevelopmentConfig, TestingConfig, ProductionConfig
app = Flask(__name__)
config_name = os.environ.get('FLASK_CONFIG', 'development')
if config_name == 'development':
app.config.from_object(DevelopmentConfig)
elif config_name == 'testing':
app.config.from_object(TestingConfig)
elif config_name == 'production':
app.config.from_object(ProductionConfig)
else:
app.config.from_object(DevelopmentConfig)
@app.route('/')
def home():
#環境変数を使う処理など
if __name__ == '__main__':
app.run()
この方法では、環境変数FLASK_CONFIGの値に応じて異なる設定を反映することができます。
まとめ
今回の記事では、Flaskで環境変数の使い方を解説しました。
Flaskで環境変数を使うことで、セキュリティや設定管理の面で大きなメリットがあります。環境変数を使うことはWeb開発をする上で重要です。
今回解説した内容が、開発のお役に立てれば幸いです。
ここまでお読みいただきありがとうございました。
Pythonの基礎から応用まで学べる
Python WebAcademy
Python WebAcademyでは、Pythonの基礎からアーキテクチャなどの応用的な内容まで幅広く学べます。また、ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。
無料で試すインフラの学習はInfraAcademy
おすすめの記事