Flaskアプリを開発環境と本番環境で切り替える方法を初心者向けに解説!
生徒
「Flaskでアプリを作ったんですが、公開用(本番環境)と開発用ってどうやって切り替えるんですか?」
先生
「とても良いところに気が付きましたね。Flaskでは開発環境と本番環境を切り替えることで、安全性や動作の違いをしっかり管理できますよ。」
生徒
「何か特別な設定が必要なんですか?」
先生
「はい、環境ごとに設定ファイルを分けたり、環境変数を使ったりします。今日は初心者でもわかるように、基本から丁寧に説明していきますね!」
1. 「開発環境」と「本番環境」の違いとは?
「開発環境」とは、プログラムを書きながら動作確認や修正を行うための場所で、基本的には自分のパソコンの中だけで使います。 一方「本番環境」は、完成したアプリをインターネット上に公開し、実際のユーザーが利用する状態を指します。
この2つは目的がまったく違うため、設定内容も変える必要があります。たとえば開発環境では、エラーが起きたときに原因がすぐ分かるよう、 エラーメッセージや画面を詳しく表示します。
反対に本番環境では、エラー内容をそのまま表示すると内部の仕組みが外部に見えてしまい危険です。 そのため、本番ではエラー表示を最小限にして、安全性を優先します。
初心者向け:違いを超シンプルにすると
# 開発環境のイメージ
DEBUG = True # エラーを詳しく表示する
# 本番環境のイメージ
DEBUG = False # エラーはユーザーに見せない
まずは「開発環境=作業用で分かりやすさ重視」「本番環境=公開用で安全重視」 という違いを覚えておくと、Flaskの環境切り替えが理解しやすくなります。
2. Flaskの環境切り替えには「環境変数」を使う
Flaskで開発環境と本番環境を切り替えるときに便利なのが、「環境変数(かんきょうへんすう)」です。 環境変数は、プログラムの外側から設定を渡せる仕組みで、コードを書き換えずに動作を変えられるのが大きな特徴です。
イメージとしては、パソコンやサーバーに貼ってある「今はどのモードで動かすか」というメモのようなものです。 Flaskはこのメモを読み取って、「開発用の動き」か「本番用の動き」かを判断します。
Flaskでは FLASK_ENV という環境変数を使うのが基本です。
値を development にすると開発環境、production にすると本番環境として扱われます。
# 開発環境に切り替える場合
export FLASK_ENV=development
この状態でアプリを起動すると、エラー内容が詳しく表示され、デバッグしやすくなります。 プログラム初心者のうちは、この開発モードで動かすのが基本です。
# 本番環境に切り替える場合
export FLASK_ENV=production
本番環境では、エラーの詳細が画面に出なくなり、安全性を重視した動作になります。 まずは「環境変数でモードを切り替えられる」という点を押さえておくと、Flaskの設定が一気に理解しやすくなります。
3. config.pyで設定をまとめて管理しよう
環境ごとにコードを書き換えていると、設定ミスが起きやすくなります。
そこでおすすめなのが、config.py という設定専用ファイルを作り、
開発環境用・本番環境用の設定をまとめて管理する方法です。
この方法を使えば、「どの環境で動かしているのか」を意識せずに、 Flask側が自動的に正しい設定を読み込んでくれるようになります。 初心者の方でも、設定の見通しが良くなるのが大きなメリットです。
class Config:
# どの環境でも共通して使う設定
SECRET_KEY = 'your-secret-key'
class DevelopmentConfig(Config):
# 開発環境専用の設定
DEBUG = True
class ProductionConfig(Config):
# 本番環境専用の設定
DEBUG = False
ここでは、まず共通の設定を Config クラスにまとめ、
それを開発用・本番用のクラスが引き継ぐ形にしています。
こうすることで、共通部分と環境ごとの違いが一目で分かります。
DEBUG は特に重要な設定で、True の場合はエラー内容が詳しく表示され、
False にすると本番向けの安全な動作になります。
まずは「設定はここに集める」という考え方を覚えておきましょう。
4. Flaskアプリに設定を読み込ませる
ここからは、先ほど作った config.py の設定を、Flaskアプリ側に読み込ませます。
ポイントは「環境変数で今のモードを判定して、合う設定を選ぶ」だけです。
これができると、開発用・本番用でコードを書き換える必要がほぼなくなります。
以下の例では、FLASK_ENV が development なら開発設定、そうでなければ本番設定を読み込む流れになっています。
もし環境変数が設定されていない場合でも困らないように、最初から本番(production)を標準にしているのも安全な考え方です。
from flask import Flask
import os
from config import DevelopmentConfig, ProductionConfig
app = Flask(__name__)
# 環境変数 FLASK_ENV を読み取る(なければ production 扱い)
env = os.getenv('FLASK_ENV', 'production')
if env == 'development':
app.config.from_object(DevelopmentConfig)
else:
app.config.from_object(ProductionConfig)
初心者向け:この部分は何をしている?
os.getenv() は「環境変数を見に行く」ための関数です。ここでは
FLASK_ENV を確認して、どちらの設定を使うかを決めています。
# 超シンプルな考え方(イメージ用)
mode = os.getenv("FLASK_ENV", "production")
# mode が "development" なら開発設定、そうでなければ本番設定
つまり、環境変数 → 設定を選ぶ → Flaskに反映という順番です。 ここが理解できると、Flaskの「環境切り替え」がぐっと身近になります。
5. 実際の使用例:開発環境で動かす
それでは、実際にFlaskアプリを開発環境として起動してみましょう。 ここでは「環境変数を設定する → Flaskを起動する」という、とても基本的な流れを確認します。 難しい設定は一切なく、コマンドを順番に実行するだけでOKです。
まずはターミナル(コマンド入力画面)を開き、次のように環境変数を設定してからアプリを起動します。 これにより、Flaskは「今は開発モードで動かす」と判断します。
export FLASK_ENV=development
flask run
正しく起動すると、ターミナルに次のような表示が出ます。
Debug mode: on と出ていれば、開発環境で動いている合図です。
* Running on http://127.0.0.1:5000/
* Debug mode: on
この状態では、エラーが起きたときに原因が画面に詳しく表示されるため、 初心者でも問題点を見つけやすくなります。 まずは「開発中はこの起動方法を使う」と覚えておくと安心です。
6. 本番環境ではデバッグを必ずOFFに
本番環境でDEBUG=Trueのままだと、外部の人にエラー内容や内部構造が見えてしまい、とても危険です。
公開時は必ず環境変数で次のように設定しましょう。
export FLASK_ENV=production
そしてFlaskアプリでもDEBUG=Falseが有効になっていることを確認してください。
7. .envファイルで環境変数を管理する方法
環境変数を毎回コマンドで設定するのは面倒です。そこで、.envというファイルを使って自動的に設定を読み込む方法があります。
FLASK_ENV=development
SECRET_KEY=my-secret-key
このファイルを作っておき、Pythonコードで次のように読み込みます。
from dotenv import load_dotenv
load_dotenv()
この方法を使えば、パスワードなどの情報もファイルに隠しておけるので便利です。
8. configディレクトリに分ける設計も便利
もっと規模が大きくなったら、次のように設定ファイルをディレクトリに分けて整理すると見やすくなります。
config/
├── __init__.py
├── development.py
└── production.py
それぞれに別の設定を書くことで、切り替えが簡単になります。
9. 起動時に環境を選べるようにする
起動時に環境をコマンドライン引数で選べるようにすると、より柔軟に運用できます。
import sys
if len(sys.argv) > 1 and sys.argv[1] == 'dev':
app.config.from_object(DevelopmentConfig)
else:
app.config.from_object(ProductionConfig)
このようにすれば、python app.py devで開発モードに切り替えることもできます。
10. 環境の切り替えは安全なアプリの第一歩
開発と本番を分けて運用することで、効率よく開発できて、しかもセキュリティも強化されます。
今回紹介した設定はどれも基本的なものですが、Flaskを本格的に使うなら欠かせない内容です。
まとめ
Flaskアプリを開発環境と本番環境で切り替える方法を振り返ると、アプリの安全性や効率性を高めるためには「環境によって設定を分ける」という考え方がとても重要だと分かります。開発環境ではエラー内容を細かく確認したり、ログをたくさん出力したり、自由に検証を行ったりと、作業をしやすくする工夫が必要です。その一方で、本番環境では動作の安定性やセキュリティを重視し、デバッグ表示をオフにして外部から内部構造が見えないように保護することが不可欠となります。 特に、Flaskでは環境変数やconfig.pyを使って切り替える仕組みが整っているため、設定を複数に分けることで、アプリの規模が大きくなっても管理しやすくなります。設定ファイルを一箇所にまとめることで、どこを修正すればよいかがはっきりし、複雑なアプリでも明確なルールで運用できるメリットが大きいです。また、.envファイルで環境変数を管理すると、秘密鍵や接続情報など重要なデータをコードから分離できるので、安全に運用でき、設定間違いも減らすことができます。 さらに、configディレクトリで設定を分ける方式や、起動時の引数で環境を選択する方法など、プロジェクトの規模や運用スタイルに合わせて柔軟に構築できる点も強みです。Flaskはシンプルな構造を持ちながら、開発と本番の切り替えを自由に設計できるため、小規模から大規模まで幅広いアプリケーションに対応できます。 以下には、今回学んだ設定を応用したサンプルプログラムを掲載しています。このサンプルをベースに、開発環境と本番環境を適切に切り替える一連の流れを整理し、実際のプロジェクトでも役立ててください。
環境切り替えに対応したFlask設定(まとめ用サンプル)
# config/base.py
class BaseConfig:
SECRET_KEY = "base-secret-key"
class DevelopmentConfig(BaseConfig):
DEBUG = True
DATABASE_URI = "sqlite:///dev.db"
class ProductionConfig(BaseConfig):
DEBUG = False
DATABASE_URI = "mysql://user:pass@localhost/prod"
# app.py
from flask import Flask
import os
from config.base import DevelopmentConfig, ProductionConfig
def create_app():
app = Flask(__name__)
env = os.getenv("FLASK_ENV", "production")
if env == "development":
app.config.from_object(DevelopmentConfig)
else:
app.config.from_object(ProductionConfig)
@app.route("/")
def index():
return f"現在の環境: {env}"
return app
app = create_app()
if __name__ == "__main__":
app.run()
.envファイル読み込み例
from dotenv import load_dotenv
load_dotenv()
# .env
# FLASK_ENV=development
# SECRET_KEY=my-secret
このように設定を整理しておけば、環境ごとの動作が明確になり、公開時のトラブルを大幅に減らすことができます。また、開発環境では自由に試し、本番環境ではしっかりと動作を固定することで、安全性と開発効率を両立できます。PythonやFlaskの特性を活かしながら設定を組み立てることで、アプリケーションの品質も向上しますので、ぜひ今回の内容を参考にして自分の環境に最適な構成を整えてみてください。
生徒
「開発環境と本番環境で設定を分けることがこんなに大事だとは知りませんでした。特にDEBUGの扱いは危険なんですね。」
先生
「その通りです。DEBUG=Trueのまま公開すると内部情報が丸見えになり、攻撃のきっかけになることもありますから注意が必要です。」
生徒
「config.pyで設定をまとめる方法も便利だと思いました。開発中の設定と公開用の設定がはっきり分かれて見やすいです。」
先生
「設定ファイルを分けることで、複数人で開発するときも混乱が少なくなりますし、トラブルの原因を追いやすくなります。慣れてきたらディレクトリで分類する方法もぜひ試してみてください。」
生徒
「.envファイルも使ってみたいです。秘密鍵や環境変数を安全に管理できるのはありがたいです。」
先生
「安全に管理する仕組みを身につけることはアプリ運用ではとても重要です。今回の知識を活かして、より安全にアプリを動かせるようにしていきましょう。」