アプリケーションの設定情報(データベースの接続先、デバッグモードの有無、タイムアウト時間など)を外部ファイルに分離することは、開発の基本です。
Pythonでは、古くから使われているシンプルな形式である INIファイル を扱うための標準ライブラリ configparser が用意されています。
この記事では、INIファイルの構造と、configparser を使って文字列、数値、真偽値を適切に読み込む方法について解説します。
1. INIファイルの準備
まず、読み込み対象となる設定ファイル config.ini を用意します。INIファイルは [セクション名] と キー = 値 で構成されます。
config.ini
[SERVER]
host = 192.168.1.10
port = 8080
debug_mode = yes
[APP_SETTINGS]
timeout = 15.5
max_users = 100
admin_email = admin@example.com
2. ファイルの読み込み
Python側で configparser モジュールをインポートし、パーサーオブジェクトを作成してファイルを読み込みます。
import configparser
# パーサーの作成
config = configparser.ConfigParser()
# 設定ファイルの読み込み (エンコーディング指定を推奨)
config.read("config.ini", encoding="utf-8")
# 読み込めているかセクション名を表示して確認
print(f"セクション一覧: {config.sections()}")
実行結果:
セクション一覧: ['SERVER', 'APP_SETTINGS']
3. 値の取得方法
configparser は、設定値をすべて「文字列」として読み込みます。しかし、ポート番号は整数、タイムアウトは小数、デバッグモードは真偽値として扱いたい場合があります。
そのために、型変換を自動で行う専用のメソッド(getint, getfloat, getboolean)が用意されています。
文字列として取得 (get または [])
基本の get() メソッド、または辞書のような [] アクセスを使用します。
# [SERVER] セクションの host キーを取得
host_val = config.get("SERVER", "host")
# [] を使ったアクセスも可能(こちらの方が直感的)
admin_mail = config["APP_SETTINGS"]["admin_email"]
print(f"Host: {host_val} (型: {type(host_val)})")
print(f"Email: {admin_mail}")
実行結果:
Host: 192.168.1.10 (型: <class 'str'>)
Email: admin@example.com
整数として取得 (getint)
ポート番号や個数など、整数が必要な場合に使用します。
# [SERVER] の port (8080) を整数として取得
port_val = config.getint("SERVER", "port")
# [APP_SETTINGS] の max_users (100) を整数として取得
max_users = config.getint("APP_SETTINGS", "max_users")
print(f"Port: {port_val} (型: {type(port_val)})")
実行結果:
Port: 8080 (型: <class 'int'>)
浮動小数点数として取得 (getfloat)
タイムアウト時間やレートなど、小数が必要な場合に使用します。
# [APP_SETTINGS] の timeout (15.5) をfloatとして取得
timeout_val = config.getfloat("APP_SETTINGS", "timeout")
print(f"Timeout: {timeout_val} (型: {type(timeout_val)})")
実行結果:
Timeout: 15.5 (型: <class 'float'>)
真偽値として取得 (getboolean)
ここが configparser の便利な点です。INIファイルに yes/no, on/off, true/false, 1/0 のいずれかが書かれていれば、それを正しく True / False のブール値に変換してくれます。
# [SERVER] の debug_mode (yes) をブール値として取得
is_debug = config.getboolean("SERVER", "debug_mode")
print(f"Debug Mode: {is_debug} (型: {type(is_debug)})")
if is_debug:
print("デバッグモードで動作します。")
実行結果:
Debug Mode: True (型: <class 'bool'>)
デバッグモードで動作します。
まとめ
configparser を使うと、INIファイルを簡単に扱うことができます。
config.read("ファイル名"): 読み込み。config["Section"]["Key"]: 文字列として取得(基本)。config.getint(): 整数として取得。config.getfloat(): 小数として取得。config.getboolean():yes,on,1などをTrueに変換して取得。
型に応じたメソッドを使うことで、コード内での型変換の手間を省き、エラーを防ぐことができます。
