Pythonにおける柔軟な設定ファイル管理ライブラリanyconfigの活用法

anyconfigによる設定ファイルの読み込み

Pythonプロジェクトにおいて、YAML、JSON、INI、TOMLといった多様な設定ファイル形式を統一的なインターフェースで扱えるのがanyconfigライブラリです。複数のファイルを自動的にマージしたり、ファイル形式を意識せずに辞書型としてデータを取得したりすることができます。

ファイルからの読み込み (load)

anyconfig.loadは、ファイルパス、ファイルパスのリスト、あるいはワイルドカードを使用したパス指定を受け取ります。

import anyconfig

# 単一のYAMLファイルを読み込む
app_settings = anyconfig.load("settings.yaml")

# 複数のファイルを読み込み、内容をマージする
# 後にあるファイルのキーが優先されます
files = ["defaults.json", "overrides.yaml"]
merged_config = anyconfig.load(files)

# globパターンを使用した読み込み
# フォルダ内のすべての.ymlファイルを一括で読み込む
wildcard_configs = anyconfig.load("/path/to/configs/*.yml")

文字列からのパース (loads)

設定内容が既に文字列として存在する場合は、loadsを使用してデシリアライズします。この際、ac_parserで形式を指定することが推奨されます。

raw_json_data = '{"database": {"host": "localhost", "port": 5432}}'
parsed_data = anyconfig.loads(raw_json_data, ac_parser="json")

設定の保存とシリアライズ

ファイルへの書き出し (dump)

Pythonの辞書オブジェクトを特定の設定ファイル形式で保存します。拡張子から自動的にフォーマットが判別されます。

export_data = {
    "version": "1.0.0",
    "features": ["auth", "logging"]
}

# JSON形式でファイルに保存
anyconfig.dump(export_data, "output_config.json")

文字列への変換 (dumps)

辞書オブジェクトを特定の形式の文字列に変換します。

yaml_string = anyconfig.dumps(export_data, ac_parser="yaml")
print(yaml_string)

ファイルオブジェクトの操作

anyconfig.openを使用すると、ファイルオブジェクトをラップして操作できます。これは、loadメソッドに直接渡すストリームとしても利用可能です。

with anyconfig.open("config.yml", mode="r") as config_file:
    data = anyconfig.load(config_file)

辞書のマージ機能

anyconfig.mergeを使用すると、2つの辞書を再帰的にマージできます。デフォルトでは、第2引数の内容が第1引数の内容を上書き・統合します。

base_params = {
    "retry": {
        "count": 3,
        "delay": 10
    },
    "enabled": True
}

custom_params = {
    "retry": {
        "delay": 20
    },
    "timeout": 30
}

anyconfig.merge(base_params, custom_params)
# base_paramsの中身が更新され、retry.delayは20になり、timeoutが追加される

バリデーションとスキーマ生成

設定ファイルの構造が正しいかを検証するために、JSON Schemaに基づいたバリデーションが可能です。

# 既存の設定からスキーマを自動生成
config_data = anyconfig.load("current_config.json")
generated_schema = anyconfig.gen_schema(config_data)

# 検証を実行 (有効であればTrueが返る)
is_valid, error_msg = anyconfig.validate(config_data, generated_schema)

サポートされている主要フォーマット

anyconfigは、依存ライブラリのインストール状況に応じて多くの形式をサポートします。

フォーマット 識別子 (Type) 必要なライブラリ
JSON json 標準ライブラリ
INI ini configparser (標準)
YAML yaml PyYAML
TOML toml toml
XML xml lxml または ElementTree
MessagePack msgpack msgpack-python

タグ: anyconfig Python YAML JSON configuration

10月22日 23:34 投稿