開発環境と本番環境の設定プロファイル
環境ごとの設定、フィーチャーフラグ、段階的なデプロイを学びます。
「開発環境と本番環境の設定プロファイル」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
設定プロファイルが重要な理由
本番環境のエージェントと開発環境のエージェントは、異なる動作をするべきです。ログレベル、モデルのグレード(コストと品質のバランス)、データベース、レート制限などが異なります。設定プロファイルを使えば、この切り替えを自動化できます。1つの環境変数で、すべての設定を一度に切り替えられます。
ENV変数による環境の検出
標準的な方法は、現在のデプロイ環境を識別するENV(またはENVIRONMENT)変数を読み取ることです。コードは、その値に基づいて適切な設定プロファイルを選択します。
import os
# Read the environment identifier
ENV = os.getenv('ENV', 'development').lower()
if ENV not in ('development', 'staging', 'production'):
raise ValueError(
f'Invalid ENV value: "{ENV}". '
f'Must be: development, staging, or production'
)
print(f'Running in {ENV} mode')
# Usage:
# ENV=development python agent.py -> dev settings
# ENV=staging python agent.py -> staging settings
# ENV=production python agent.py -> prod settings
# python agent.py -> defaults to development環境ごとの設定クラス
基底設定クラスと、環境ごとのサブクラスを定義します。各サブクラスでは、環境によって異なる値をオーバーライドします。条件分岐を大量に含む辞書よりも、読みやすく型安全です。
import os
class BaseConfig:
OPENAI_API_KEY: str = os.environ.get('OPENAI_API_KEY', '')
MAX_STEPS: int = 20
LOG_LEVEL: str = 'INFO'
CACHE_ENABLED: bool = True
CACHE_TTL_SECONDS: int = 3600
class DevelopmentConfig(BaseConfig):
MODEL: str = 'gpt-4o-mini' # cheaper in dev
LOG_LEVEL: str = 'DEBUG' # verbose logging in dev
CACHE_ENABLED: bool = False # fresh results in dev
MAX_STEPS: int = 10 # shorter loops in dev
class StagingConfig(BaseConfig):
MODEL: str = 'gpt-4o-mini'
LOG_LEVEL: str = 'INFO'
MAX_STEPS: int = 20
class ProductionConfig(BaseConfig):
MODEL: str = 'gpt-4o' # best quality in prod
LOG_LEVEL: str = 'WARNING' # less noise in prod
MAX_STEPS: int = 30 # more steps allowed in prod
if __name__ == '__main__':
for cls in (DevelopmentConfig, StagingConfig, ProductionConfig):
c = cls()
print(f'{cls.__name__}: model={c.MODEL} log_level={c.LOG_LEVEL} max_steps={c.MAX_STEPS} cache={c.CACHE_ENABLED}')
設定ファクトリ:適切なプロファイルの選択
設定ファクトリ関数はENV変数を読み取り、適切な設定クラスを返します。環境の切り替えロジックを把握する場所を、この1つの関数に集約できます。
import os
def get_config():
env = os.getenv('ENV', 'development').lower()
configs = {
'development': DevelopmentConfig,
'staging': StagingConfig,
'production': ProductionConfig
}
config_class = configs.get(env)
if not config_class:
raise ValueError(f'Unknown environment: {env}')
return config_class()
# Usage throughout your agent:
config = get_config()
print(f'Model: {config.MODEL}')
print(f'Max steps: {config.MAX_STEPS}')
print(f'Log level: {config.LOG_LEVEL}')
# All code uses config.MODEL, config.LOG_LEVEL etc.
# Switching environments requires only changing ENV variable型付き設定のためのPydantic Settings
pydantic-settingsは、強力で型安全な設定定義の仕組みを提供します。環境変数を自動的に読み取り、型を検証し、.envファイルから読み込むこともできます。pip install pydantic-settingsでインストールします。
# pip install pydantic-settings
from pydantic_settings import BaseSettings
from pydantic import Field
from typing import Literal
class AgentSettings(BaseSettings):
# Required fields — raise error if not set
openai_api_key: str
search_api_key: str
# Optional with defaults
env: Literal['development', 'staging', 'production'] = 'development'
model: str = 'gpt-4o-mini'
max_steps: int = Field(default=20, ge=1, le=100) # validated range
log_level: str = 'INFO'
cache_enabled: bool = True
cache_ttl_seconds: int = Field(default=3600, ge=60)
class Config:
env_file = '.env'
case_sensitive = False # OPENAI_API_KEY -> openai_api_key
# settings = AgentSettings() # raises ValidationError if required vars missing環境ごとのオーバーライドを使ったPydantic Settings
Pydantic Settingsと計算プロパティを組み合わせると、環境ごとのデフォルト値を適用しながら、環境変数で上書きできるようになります。
from pydantic_settings import BaseSettings
from pydantic import model_validator
import os
class AgentSettings(BaseSettings):
openai_api_key: str
env: str = 'development'
model: str = ''
log_level: str = ''
max_steps: int = 0
@model_validator(mode='after')
def apply_env_defaults(self) -> 'AgentSettings':
env_defaults = {
'development': {'model': 'gpt-4o-mini', 'log_level': 'DEBUG', 'max_steps': 10},
'staging': {'model': 'gpt-4o-mini', 'log_level': 'INFO', 'max_steps': 20},
'production': {'model': 'gpt-4o', 'log_level': 'WARNING', 'max_steps': 30}
}
defaults = env_defaults.get(self.env, env_defaults['development'])
if not self.model: self.model = defaults['model']
if not self.log_level: self.log_level = defaults['log_level']
if not self.max_steps: self.max_steps = defaults['max_steps']
return self
class Config:
env_file = '.env'環境ごとのフィーチャーフラグ
設定プロファイルを使って、環境ごとに機能を有効化または無効化します。たとえば、デバッグUIは開発環境だけで有効にし、実際の決済は本番環境だけで使用し、ステージング環境ではサンドボックス化されたサービスを指定します。
import os
class AgentFeatureFlags:
env = os.getenv('ENV', 'development')
# Enable memory persistence (requires DB)
MEMORY_ENABLED: bool = env in ('staging', 'production')
# Use real payment processing
REAL_PAYMENTS: bool = env == 'production'
# Enable verbose step-by-step output
VERBOSE_STEPS: bool = env == 'development'
# Use cheap model for unit test runs
FORCE_MINI_MODEL: bool = os.getenv('CI') == 'true'
flags = AgentFeatureFlags()
print(f'Memory: {flags.MEMORY_ENABLED}')
print(f'Verbose: {flags.VERBOSE_STEPS}')
print(f'Payments: {flags.REAL_PAYMENTS}')起動時の設定検証
起動時にすべての設定を検証し、概要を出力します。これにより、処理を開始する前に、運用担当者がエージェントが正しく設定されていることを確認できます。本番環境での設定ミスを見逃すことも防げます。
import os
import sys
def validate_and_print_config(config) -> None:
print(f'=== Agent Configuration ===')
print(f'Environment : {config.env}')
print(f'Model : {config.model}')
print(f'Max steps : {config.max_steps}')
print(f'Log level : {config.log_level}')
print(f'Cache : {"enabled" if config.cache_enabled else "disabled"}')
print(f'OpenAI key : ...{config.openai_api_key[-4:]}')
print('===========================')
# Critical validations
if config.env == 'production' and config.log_level == 'DEBUG':
print('WARNING: DEBUG logging in production exposes sensitive data!')
if not config.openai_api_key:
print('FATAL: OPENAI_API_KEY not set')
sys.exit(1)
print('Configuration validated.')
if __name__ == '__main__':
from types import SimpleNamespace
demo_config = SimpleNamespace(
env='development', model='gpt-4o-mini', max_steps=10,
log_level='DEBUG', cache_enabled=False, openai_api_key='sk-demo-1234'
)
validate_and_print_config(demo_config)
環境ごとの設定値のオーバーライド
CI/CDパイプラインでは、プロファイル全体を変更せずに、特定の設定値だけを上書きします。ENV変数と一緒に個別の変数を渡すことで、特定のデプロイ用に設定をカスタマイズできます。
# Staging deployment with custom model override:
# ENV=staging AGENT_MODEL=gpt-4o python agent.py
# Production with reduced max_steps for cost control:
# ENV=production AGENT_MAX_STEPS=15 python agent.py
# CI test run — use production profile but with cheap model:
# ENV=production AGENT_MODEL=gpt-4o-mini CI=true python agent.py
# The config class reads ENV first for the profile,
# then individual overrides take precedence:
import os
env = os.getenv('ENV', 'development')
config = get_config() # loads base profile for env
# Individual overrides applied on top:
if os.getenv('AGENT_MODEL'):
config.MODEL = os.getenv('AGENT_MODEL')
if os.getenv('AGENT_MAX_STEPS'):
config.MAX_STEPS = int(os.getenv('AGENT_MAX_STEPS'))
print(f'Final model: {config.MODEL}')チームメンバー向けの設定プロファイルの文書化
設定プロファイルを、コードコメントやREADME、またはその両方に明確に記載します。新しい開発者が安心してデプロイできるよう、環境ごとに何が変わるのかを理解できるようにしておく必要があります。
# config_profiles.py — Configuration per environment
#
# | Setting | development | staging | production |
# |----------------|----------------|----------------|-------------|
# | MODEL | gpt-4o-mini | gpt-4o-mini | gpt-4o |
# | MAX_STEPS | 10 | 20 | 30 |
# | LOG_LEVEL | DEBUG | INFO | WARNING |
# | CACHE_ENABLED | False | True | True |
# | MEMORY_DB | SQLite (local) | PostgreSQL | PostgreSQL |
#
# To switch environments:
# ENV=staging python agent.py
#
# To override a single setting:
# ENV=production AGENT_MAX_STEPS=15 python agent.py
print('Config profile table documents all per-environment differences')テストでの設定:テストプロファイルの強制
テストは常に専用のテスト設定で実行し、本番設定は決して使用しないようにします。適切な設定を適用し、本番APIへの誤った呼び出しを防ぐテスト用フィクスチャを作成します。
import os
import pytest
@pytest.fixture(autouse=True)
def test_environment(monkeypatch):
'Force test configuration for all tests'
monkeypatch.setenv('ENV', 'test')
monkeypatch.setenv('AGENT_MODEL', 'gpt-4o-mini')
monkeypatch.setenv('AGENT_MAX_STEPS', '5') # short loops in tests
monkeypatch.setenv('LOG_LEVEL', 'DEBUG')
monkeypatch.setenv('CACHE_ENABLED', 'false')
# Use a fake API key — tests should mock all LLM calls
monkeypatch.setenv('OPENAI_API_KEY', 'test-key-not-real')
# This fixture runs before every test automatically
# Tests cannot accidentally use production settings理解度チェック:設定プロファイル
環境ごとの設定プロファイルについて、理解度を確認します。
まとめ:開発環境と本番環境の設定プロファイル
これで、環境をまたいでエージェントを管理するための設定戦略が一通り整いました。
- デプロイ環境を識別するために
ENV変数を使用する - 環境ごとに設定クラスを定義し、適切なデフォルト値を設定する
- 設定ファクトリを使って適切なプロファイルを自動的に選択する
- 型安全で検証済みの設定に
pydantic-settingsを使用する - フィーチャーフラグを使って、環境ごとに機能を有効化または無効化する
- 起動時に設定を検証して出力し、運用担当者が値を確認できるようにする
- pytestのフィクスチャでテスト設定を強制し、本番環境への呼び出しを防ぐ
適切な設定管理があるからこそ、同じコードベースを開発、ステージング、本番の各環境に安全にデプロイできます。
よくある質問
「開発環境と本番環境の設定プロファイル」レッスンは無料ですか?
はい。「開発環境と本番環境の設定プロファイル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「開発環境と本番環境の設定プロファイル」で何を学びますか?
環境ごとの設定、フィーチャーフラグ、段階的なデプロイを学びます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「開発環境と本番環境の設定プロファイル」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- エージェント向け環境変数
- .envファイルとpython-dotenv
- 秘密情報のローテーションとセキュリティ
- 開発環境と本番環境の設定プロファイル