カテゴリ: 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
Python
Pythonでセットの要素数を調べる方法(len()の使い方)を初心者向けに解説!
New2
Python
Pythonのfrozensetとは?ミュータブルなsetとの違いをわかりやすく解説
New3
Flask
FlaskでPOSTリクエストを受け取る方法!初心者でもわかるJSONデータの受け取り方
New4
Python
Pythonでセットを活用してデータをフィルタリングする方法!初心者でもわかるセットの基本と使い方
人気記事
No.1
Java&Spring記事人気No1
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Python
Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
No.3
Java&Spring記事人気No3
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskでAPIを作る基本!初心者向けに仕組みと特徴をやさしく解説
No.6
Java&Spring記事人気No6
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
No.7
Java&Spring記事人気No7
Flask
FlaskのSQLAlchemyでフィルタリング検索!filter, filter_byの使い方完全ガイド
No.8
Java&Spring記事人気No8
Python
Pythonの文字列操作完全ガイド!結合・分割・検索の基本をやさしく解説