カテゴリ: Flask 更新日: 2025/12/23

Flaskアプリを開発環境と本番環境で切り替える方法を初心者向けに解説!

Flaskアプリを複数環境(開発・本番)で切り替える方法
Flaskアプリを複数環境(開発・本番)で切り替える方法

先生と生徒の会話形式で理解しよう

生徒

「Flaskでアプリを作ったんですが、公開用(本番環境)と開発用ってどうやって切り替えるんですか?」

先生

「とても良いところに気が付きましたね。Flaskでは開発環境と本番環境を切り替えることで、安全性や動作の違いをしっかり管理できますよ。」

生徒

「何か特別な設定が必要なんですか?」

先生

「はい、環境ごとに設定ファイルを分けたり、環境変数を使ったりします。今日は初心者でもわかるように、基本から丁寧に説明していきますね!」

1. 「開発環境」と「本番環境」の違いとは?

1. 「開発環境」と「本番環境」の違いとは?
1. 「開発環境」と「本番環境」の違いとは?

「開発環境」とは、プログラムを書きながら動作確認や修正を行うための場所で、基本的には自分のパソコンの中だけで使います。 一方「本番環境」は、完成したアプリをインターネット上に公開し、実際のユーザーが利用する状態を指します。

この2つは目的がまったく違うため、設定内容も変える必要があります。たとえば開発環境では、エラーが起きたときに原因がすぐ分かるよう、 エラーメッセージや画面を詳しく表示します。

反対に本番環境では、エラー内容をそのまま表示すると内部の仕組みが外部に見えてしまい危険です。 そのため、本番ではエラー表示を最小限にして、安全性を優先します。

初心者向け:違いを超シンプルにすると


# 開発環境のイメージ
DEBUG = True   # エラーを詳しく表示する

# 本番環境のイメージ
DEBUG = False  # エラーはユーザーに見せない

まずは「開発環境=作業用で分かりやすさ重視」「本番環境=公開用で安全重視」 という違いを覚えておくと、Flaskの環境切り替えが理解しやすくなります。

2. Flaskの環境切り替えには「環境変数」を使う

2. Flaskの環境切り替えには「環境変数」を使う
2. Flaskの環境切り替えには「環境変数」を使う

Flaskで開発環境と本番環境を切り替えるときに便利なのが、「環境変数(かんきょうへんすう)」です。 環境変数は、プログラムの外側から設定を渡せる仕組みで、コードを書き換えずに動作を変えられるのが大きな特徴です。

イメージとしては、パソコンやサーバーに貼ってある「今はどのモードで動かすか」というメモのようなものです。 Flaskはこのメモを読み取って、「開発用の動き」か「本番用の動き」かを判断します。

Flaskでは FLASK_ENV という環境変数を使うのが基本です。 値を development にすると開発環境、production にすると本番環境として扱われます。


# 開発環境に切り替える場合
export FLASK_ENV=development

この状態でアプリを起動すると、エラー内容が詳しく表示され、デバッグしやすくなります。 プログラム初心者のうちは、この開発モードで動かすのが基本です。


# 本番環境に切り替える場合
export FLASK_ENV=production

本番環境では、エラーの詳細が画面に出なくなり、安全性を重視した動作になります。 まずは「環境変数でモードを切り替えられる」という点を押さえておくと、Flaskの設定が一気に理解しやすくなります。

3. config.pyで設定をまとめて管理しよう

3. config.pyで設定をまとめて管理しよう
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アプリに設定を読み込ませる

4. Flaskアプリに設定を読み込ませる
4. Flaskアプリに設定を読み込ませる

ここからは、先ほど作った config.py の設定を、Flaskアプリ側に読み込ませます。 ポイントは「環境変数で今のモードを判定して、合う設定を選ぶ」だけです。 これができると、開発用・本番用でコードを書き換える必要がほぼなくなります。

以下の例では、FLASK_ENVdevelopment なら開発設定、そうでなければ本番設定を読み込む流れになっています。 もし環境変数が設定されていない場合でも困らないように、最初から本番(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. 実際の使用例:開発環境で動かす

5. 実際の使用例:開発環境で動かす
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に

6. 本番環境ではデバッグを必ずOFFに
6. 本番環境ではデバッグを必ずOFFに

本番環境でDEBUG=Trueのままだと、外部の人にエラー内容や内部構造が見えてしまい、とても危険です。

公開時は必ず環境変数で次のように設定しましょう。


export FLASK_ENV=production

そしてFlaskアプリでもDEBUG=Falseが有効になっていることを確認してください。

7. .envファイルで環境変数を管理する方法

7. .envファイルで環境変数を管理する方法
7. .envファイルで環境変数を管理する方法

環境変数を毎回コマンドで設定するのは面倒です。そこで、.envというファイルを使って自動的に設定を読み込む方法があります。


FLASK_ENV=development
SECRET_KEY=my-secret-key

このファイルを作っておき、Pythonコードで次のように読み込みます。


from dotenv import load_dotenv
load_dotenv()

この方法を使えば、パスワードなどの情報もファイルに隠しておけるので便利です。

8. configディレクトリに分ける設計も便利

8. configディレクトリに分ける設計も便利
8. configディレクトリに分ける設計も便利

もっと規模が大きくなったら、次のように設定ファイルをディレクトリに分けて整理すると見やすくなります。


config/
├── __init__.py
├── development.py
└── production.py

それぞれに別の設定を書くことで、切り替えが簡単になります。

9. 起動時に環境を選べるようにする

9. 起動時に環境を選べるようにする
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. 環境の切り替えは安全なアプリの第一歩

10. 環境の切り替えは安全なアプリの第一歩
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ファイルも使ってみたいです。秘密鍵や環境変数を安全に管理できるのはありがたいです。」

先生

「安全に管理する仕組みを身につけることはアプリ運用ではとても重要です。今回の知識を活かして、より安全にアプリを動かせるようにしていきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Flaskで開発環境と本番環境の違いは何ですか?

Flaskでは開発環境は自分のPC上での確認用、本番環境はインターネット上に公開された運用用です。開発環境ではエラー表示があり、本番環境ではセキュリティ重視で非表示になります。
カテゴリの一覧へ
新着記事
New1
Django
Djangoのプロジェクトとアプリの違いを徹底解説!初心者でも迷わない構造の考え方
New2
Flask
FlaskでRQ(Redis Queue)を使って非同期タスク管理を行う方法|初心者向けやさしい解説
New3
Flask
FlaskでCookieを安全に使う方法!HttpOnly・Secureフラグの使い方を徹底解説
New4
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Django
DjangoとFlaskの違いを完全比較!初心者でもわかるPythonフレームワーク入門
No.3
Java&Spring記事人気No3
Flask
Flaskアプリの環境変数設定方法!安全で柔軟な構成を実現しよう
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.7
Java&Spring記事人気No7
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
No.8
Java&Spring記事人気No8
Flask
Flask-WTFの使い方!フォームバリデーションを簡単にする拡張機能の導入手順