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

Flaskアプリのテストと本番環境を分離する方法(設定・データベース)

Flaskアプリのテストと本番環境を分離する方法(設定・データベース)
Flaskアプリのテストと本番環境を分離する方法(設定・データベース)

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

生徒

「先生、Flaskアプリを開発しているとき、本番とテストで同じデータベースを使っても大丈夫ですか?」

先生

「それは避けたほうがいいです。テスト中にデータを消したり壊したりするリスクがあるからです。本番環境とテスト環境は分けることが推奨されます。」

生徒

「どうやって簡単に分けられるんですか?」

先生

「Flaskでは設定ファイルや環境変数を使うと簡単に分けられます。順番に見ていきましょう。」

1. 環境ごとに設定を分ける

1. 環境ごとに設定を分ける
1. 環境ごとに設定を分ける

Flaskアプリでは、設定ファイル環境変数を使うことで、テスト環境と本番環境の設定を切り替えられます。環境変数とは、コンピュータに登録する「この環境ではこう動く」という目印のようなものです。

例えば、config.pyに次のように書きます。


class Config:
    DEBUG = False
    TESTING = False
    SQLALCHEMY_DATABASE_URI = "sqlite:///production.db"

class TestConfig(Config):
    DEBUG = True
    TESTING = True
    SQLALCHEMY_DATABASE_URI = "sqlite:///test.db"

こうすることで、テスト環境ではtest.db、本番環境ではproduction.dbを使うように切り替えられます。

2. Flaskアプリで設定を読み込む方法

2. Flaskアプリで設定を読み込む方法
2. Flaskアプリで設定を読み込む方法

Flaskアプリ本体で、どの環境設定を使うか指定します。


from flask import Flask
import os
from config import Config, TestConfig

app = Flask(__name__)

if os.environ.get("FLASK_ENV") == "testing":
    app.config.from_object(TestConfig)
else:
    app.config.from_object(Config)

こうすると、環境変数FLASK_ENVtestingに設定するとテスト環境用の設定が読み込まれます。設定を変えるだけで、本番データを安全に保ちながらテストできます。

3. データベースを分ける理由

3. データベースを分ける理由
3. データベースを分ける理由

テスト環境と本番環境でデータベースを分ける最大の理由は、データの安全性です。テスト中にレコードを追加したり削除したりしても、本番データには影響しません。

また、テストでは架空のデータを使うことで、実際のユーザー情報を守れます。個人情報保護の観点でも重要です。

4. Flaskでテスト用データベースを作る方法

4. Flaskでテスト用データベースを作る方法
4. Flaskでテスト用データベースを作る方法

SQLiteのような軽量データベースを使えば、テスト用のデータベースを簡単に作れます。


from app import app, db

app.config.from_object("config.TestConfig")
db.create_all()  # テーブルを作成

これでtest.dbにテーブルが作られ、テスト用のデータを安全に操作できます。

5. 自動テストで本番環境を汚さない

5. 自動テストで本番環境を汚さない
5. 自動テストで本番環境を汚さない

CI/CDパイプラインでテストを自動化する場合も、必ずテスト用データベースを使います。例えばGitHub ActionsやGitLab CIでFlaskのテストを走らせるとき、テスト環境を指定して安全に実行できます。


# GitHub Actionsでの例
- name: Run tests
  run: |
    export FLASK_ENV=testing
    python -m unittest discover

この方法で、テスト中に本番データを誤って消すリスクを防げます。

6. 本番環境との接続を切り替えるポイント

6. 本番環境との接続を切り替えるポイント
6. 本番環境との接続を切り替えるポイント
  • 環境変数でFLASK_ENVを切り替える
  • 設定ファイルで本番用とテスト用を分ける
  • テスト用データベースを用意し、本番データに触らない
  • CI/CDでテストを自動実行する

これらを守ることで、Flaskアプリ開発のテストと本番環境を安全に分離できます。

まとめ

まとめ
まとめ

Flaskアプリでテスト環境と本番環境を分離する重要性

Flaskアプリを開発するうえで、テスト環境と本番環境を分けることは、アプリを安全かつ安定して運用するための基本です。 開発中やテスト中は、データを何度も追加したり削除したり、失敗する前提で操作を行います。 もし本番環境と同じデータベースを使ってしまうと、実際のユーザー情報を誤って消してしまったり、正しいデータを壊してしまう危険があります。

特にFlaskはシンプルで手軽にAPIやWebアプリを作れる反面、設定を分けずにそのまま動かせてしまうため、 初心者のうちは「テストも本番も同じ設定」で進めてしまいがちです。 しかし、アプリが成長し、ユーザーが増えるほど、環境を分離しておくことの価値は大きくなります。

設定ファイルと環境変数で安全に切り替える

今回の記事では、設定ファイルと環境変数を使って、Flaskアプリの動作を環境ごとに切り替える方法を学びました。 本番用の設定とテスト用の設定をクラスとして分けておくことで、アプリのコード自体を変更せずに、 実行する環境だけを切り替えられるのが大きなメリットです。

環境変数は「今どの環境で動いているか」をFlaskに伝える目印になります。 これにより、同じアプリでも、本番では安全重視、テストでは検証重視といった使い分けが可能になります。


# 環境変数によって設定を切り替える例
if os.environ.get("FLASK_ENV") == "testing":
    app.config.from_object(TestConfig)
else:
    app.config.from_object(Config)

このような仕組みを作っておくことで、「テスト中に本番データを触ってしまう」という事故を未然に防げます。 これは個人開発だけでなく、チーム開発や業務システムでも必須の考え方です。

データベースを分けることで得られる安心感

テスト用データベースと本番用データベースを分けることで、開発者は安心して試行錯誤できます。 テストでは、ダミーデータや架空のユーザー情報を使い、自由に操作できます。 これにより、実際の利用者の情報を守りながら、アプリの品質を高められます。

また、SQLiteのような軽量データベースを使えば、テスト用データベースの作成や削除も簡単です。 テストが終わったら消してしまえるため、環境を常にクリーンな状態に保てます。

自動テストとCIでさらに安全に

CI環境で自動テストを実行する場合も、必ずテスト環境を指定することが重要です。 環境変数を使ってテスト用設定を読み込ませることで、テストが自動で実行されても、 本番データベースに影響が出ることはありません。

こうした仕組みを整えておくと、コードを修正するたびに安心してテストを回せるようになります。 結果として、Flaskアプリの品質が安定し、トラブルの少ない運用につながります。

先生と生徒の振り返り会話

生徒

「最初は、テスト用と本番用を分けるのって面倒そうだと思っていましたけど、 こうして見ると、事故を防ぐためにとても大事なんですね。」

先生

「そうですね。一度仕組みを作ってしまえば、その後は設定を切り替えるだけで済みます。 むしろ分けていない方が、後から大きなトラブルになりやすいんです。」

生徒

「テスト中に本番データを消してしまう話を聞くと、ちょっと怖くなりました。 最初から環境を分けておくのが安心ですね。」

先生

「その通りです。Flaskはシンプルだからこそ、環境分離を意識することが大切です。 今日学んだ方法を使えば、安全に開発と運用を続けられますよ。」

生徒

「これからは、テスト環境と本番環境をきちんと分けてFlaskアプリを作ってみます。 自信を持って開発できそうです!」

カテゴリの一覧へ
新着記事
New1
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
New2
Flask
Flask×Flask-SocketIOでチャットアプリを作る流れを初心者向けにやさしく解説
New3
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
New4
Flask
Flask-WTFでファイルアップロードフォームを完全ガイド!初心者でもわかる画像やPDFのアップロード方法
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.8
Java&Spring記事人気No8
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説