カテゴリ: Flask 更新日: 2026/02/01

Flaskで環境ごとにログ設定を切り替える!本番・開発の管理テクニック

Flaskで複数環境ごとにログ設定を切り替えるテクニック
Flaskで複数環境ごとにログ設定を切り替えるテクニック

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

生徒

「先生、自分のパソコンで開発している時は細かいログを見たいんですけど、本番で公開する時は大事なエラーだけを記録したいんです。これって手書きで毎回書き直すしかないんですか?」

先生

「そんなことはありませんよ!Flaskには『環境変数』という仕組みを使って、開発用と本番用でログの設定を自動でガチャンと切り替えるテクニックがあるんです。」

生徒

「自動で切り替わるんですか!設定ミスも減りそうですね。どうすればいいのか教えてください!」

先生

「はい、まずは『環境』という考え方から順番に解説していきましょう。」

1. 「開発環境」と「本番環境」の違いを知ろう

1. 「開発環境」と「本番環境」の違いを知ろう
1. 「開発環境」と「本番環境」の違いを知ろう

プログラミングを始めたばかりの方が最初に覚えるべき大切な考え方が、環境(かんきょう)の使い分けです。アプリが動く場所は、大きく分けて二つあります。

  • 開発環境(ローカル環境): あなたが今触っている自分のパソコンのことです。ここでは、プログラムの動きを細かくチェックするために、たくさんのログを出力します。
  • 本番環境(プロダクション環境): インターネット上で実際に世界中の人が使うサーバーのことです。ここでは、余計な情報を出しすぎるとサーバーが重くなったり、セキュリティ上のリスクになったりするため、必要最低限のログに絞ります。

これを「可観測性(オブザーバビリティ)」の観点から見ると、開発時は『透明度』を高くし、本番では『効率』を重視するという戦略になります。これを自動で切り替えるのが、今回学ぶ Flask の高度な設定管理です。

2. 環境変数(FLASK_ENV)でモードを切り替える仕組み

2. 環境変数(FLASK_ENV)でモードを切り替える仕組み
2. 環境変数(FLASK_ENV)でモードを切り替える仕組み

パソコンには、プログラムの外側から「今は本番ですよ」「今は開発中ですよ」と合図を送るための、環境変数(かんきょうへんすう)という名前の付いた設定値があります。Flaskでは、この値を読み取って動作を分岐させることができます。

例えば、FLASK_ENV という名前の設定が development なら開発、production なら本番、という風にルールを決めます。これによって、コードの中身を一行も書き換えることなく、起動する場所に合わせて勝手にログの設定が切り替わるようになるのです。

3. 【実践】環境ごとにクラスを分ける設定方法

3. 【実践】環境ごとにクラスを分ける設定方法
3. 【実践】環境ごとにクラスを分ける設定方法

まずは、設定の内容を「クラス」という箱にまとめて整理しましょう。開発用と本番用で、別々の設定を作っておきます。


class Config:
    """共通の基本設定"""
    LOG_LEVEL = "INFO"

class DevelopmentConfig(Config):
    """開発用の設定:細かいログまで出す"""
    LOG_LEVEL = "DEBUG"

class ProductionConfig(Config):
    """本番用の設定:重大なエラーだけ出す"""
    LOG_LEVEL = "ERROR"

このように整理しておくと、後から「本番のログレベルだけ変えたい」と思った時に、どこを直せばいいか一目で分かります。

4. アプリ起動時にログ設定を読み込むコード

4. アプリ起動時にログ設定を読み込むコード
4. アプリ起動時にログ設定を読み込むコード

次に、先ほど作ったクラスをFlaskアプリに読み込ませる仕組みを作ります。ここでは Python の os.environ という機能を使って、パソコンに設定された「合図(環境変数)」を読み取ります。


import os
import logging
from flask import Flask

app = Flask(__name__)

# 環境変数から「今どの環境か」を読み取る(デフォルトは開発用にする)
env = os.environ.get('FLASK_ENV', 'development')

if env == 'production':
    app.config.from_object(ProductionConfig)
else:
    app.config.from_object(DevelopmentConfig)

# 読み込んだ設定を使って、ログのレベルを決定する
app.logger.setLevel(app.config['LOG_LEVEL'])

@app.route('/')
def hello():
    app.logger.debug("開発中しか見えない細かいログです")
    app.logger.error("これは本番でも見える重大なログです")
    return "ログ設定の切り替えテスト中!"

5. 開発環境:DEBUGレベルで細かく追跡する

5. 開発環境:DEBUGレベルで細かく追跡する
5. 開発環境:DEBUGレベルで細かく追跡する

開発環境では、ログのレベルを DEBUG(デバッグ) に設定します。デバッグとは、プログラムの「虫(間違い)」を見つけて直す作業のことです。開発中は何が起きているかすべて知りたいので、計算の途中経過や、どんなデータが送られてきたかなどの情報をすべて画面(コンソール)に出力させます。

Flaskのデフォルトのログ機能は非常に優秀で、開発モードに切り替えると、リクエストがあった瞬間に詳細な情報を出してくれます。これによって、初めてパソコンでプログラミングをする方でも、「今何が起きたか」をリアルタイムで追いかけることができるようになります。

6. 本番環境:ERRORレベルでサーバーを守る

6. 本番環境:ERRORレベルでサーバーを守る
6. 本番環境:ERRORレベルでサーバーを守る

本番環境で一番怖いのは、ログが出すぎてサーバーの保存容量(ストレージ)がいっぱいになってしまうことです。また、詳細な情報を出しすぎると、悪い人に「このアプリはこういう仕組みで動いているんだな」とヒントを与えてしまうリスクもあります。

そのため、本番では ERROR(エラー) または WARNING(ワーニング) レベルに設定し、「修理が必要な一大事」の時だけログに残るようにします。こうすることで、サーバーの負荷を下げ、セキュリティを守りつつ、トラブルが起きたときだけ確実に情報をキャッチできる体制を整えます。

7. 【上級編】環境ごとにログの出力先を変える

7. 【上級編】環境ごとにログの出力先を変える
7. 【上級編】環境ごとにログの出力先を変える

さらに本格的な管理をしたい場合は、ログの「出し先」も切り替えましょう。開発時は「画面」に、本番時は「ファイル」に保存するように設定します。これには、以前学んだ FileHandler などを環境ごとに使い分けます。


if not app.debug:  # 本番環境の場合
    import logging
    from logging.handlers import RotatingFileHandler
    
    # 本番用:ファイルに保存する設定を追加
    file_handler = RotatingFileHandler('production.log', maxBytes=10240, backupCount=10)
    file_handler.setFormatter(logging.Formatter(
        '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
    ))
    app.logger.addHandler(file_handler)

8. 実際にどうやって「合図」を送るのか(実行方法)

8. 実際にどうやって「合図」を送るのか(実行方法)
8. 実際にどうやって「合図」を送るのか(実行方法)

「環境変数で切り替えるのは分かったけど、どうやってその変数に値を入れるの?」という疑問にお答えします。アプリを動かすための黒い画面(コマンドプロンプトやターミナル)で、実行する直前に以下のように入力します。


# Windowsの場合
set FLASK_ENV=production
python app.py

# MacやLinuxの場合
export FLASK_ENV=production
python app.py

この一行を実行するだけで、プログラムを一切触らずに「本番モード」で起動させることができます。これができるようになると、初心者から一歩進んで、プロの現場でも通用する「環境管理」のスキルが身についたと言えます。

9. 設定が正しく切り替わっているか確認するコツ

9. 設定が正しく切り替わっているか確認するコツ
9. 設定が正しく切り替わっているか確認するコツ

設定を切り替えたら、本当に意図したレベルになっているか確認しましょう。最も簡単な方法は、アプリの起動直後に「現在のログレベル」を表示させるコードを一行入れることです。


print(f"現在のログレベルは: {app.logger.getEffectiveLevel()}")
# ちなみに 10 は DEBUG、20 は INFO、40 は ERROR を意味します

数字が表示されるので少し驚くかもしれませんが、これもパソコンの中での約束事です。こうして一つずつ「今の状態」を確かめる癖をつけることが、ミスを防ぐ最強のテクニックになります。環境ごとのログ切り替えをマスターして、スマートなFlask開発を楽しみましょう!

カテゴリの一覧へ
新着記事
New1
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New2
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New3
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
New4
Flask
FlaskのURLルールとは?ルーティングの基本と動的URLの作り方を解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.5
Java&Spring記事人気No5
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.6
Java&Spring記事人気No6
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.7
Java&Spring記事人気No7
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説