設定ファイルの読み込み (configparserモジュール)について

多くのアプリケーションでは、動作設定を外部の設定ファイルで管理することが一般的です。これにより、プログラムのソースコードを直接変更せずに、動作を簡単にカスタマイズできます。Pythonでは、設定ファイルの読み書きに便利なconfigparserモジュールが標準ライブラリとして提供されています。 この記事では、configparserモジュールを使って、INI形式の設定ファイルを読み書きする方法について詳しく解説します。設定ファイルの読み込み、設定値の取得、書き込みといった基本操作を中心に説明します

configparserモジュールとは?

configparserモジュールは、INI形式の設定ファイルを読み込み、解析、書き込みを行うためのツールです。INIファイルは、以下のようなシンプルなテキスト形式で、設定をセクションごとに分け、キーと値のペアで管理します。

INI形式の例

[General]
app_name = MyApp
version = 1.0
[Database]
host = localhost
port = 5432
username = admin
password = secret

このように、セクション(例: [General], [Database])の中に、キーと値(key = value)のペアを記述します。configparserは、この形式のファイルを簡単に操作できるツールです

設定ファイルの読み込み

まずは、configparserを使ってINI形式の設定ファイルを読み込む方法を見ていきます。

設定ファイルの準備

以下のような設定ファイルをconfig.iniとして保存します。

[General]
app_name = MyApp
version = 1.0
[Database]
host = localhost
port = 5432
username = admin
password = secret

設定ファイルを読み込む

次に、configparserを使ってこの設定ファイルを読み込み、各設定項目を取得するコードを作成します。

import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# 設定ファイルの読み込み
config.read('config.ini')
# セクションごとの設定値を取得
app_name = config['General']['app_name']
version = config['General']['version']
db_host = config['Database']['host']
db_port = config['Database']['port']
db_user = config['Database']['username']
db_password = config['Database']['password']
print(f"App Name: {app_name}")
print(f"Version: {version}")
print(f"Database Host: {db_host}")
print(f"Port: {db_port}")
print(f"Username: {db_user}")
print(f"Password: {db_password}")

実行結果

App Name: MyApp
Version: 1.0
Database Host: localhost
Port: 5432
Username: admin
Password: secret

読み込みに関するポイント

  • ConfigParser: configparser.ConfigParser()を使って、設定ファイルを管理するオブジェクトを作成します。
  • read(): config.read('ファイル名')でINIファイルを読み込みます。
  • セクションとキーでアクセス: 設定値は、セクション名とキー名を指定して取得します(config['セクション']['キー'])。

設定値の操作と型変換

設定ファイルの値はすべて文字列として読み込まれますが、数値やブール値に変換することも簡単にできます。

型変換を行う

次のように、数値やブール値に変換して扱うことができます。

# 数値として取得
db_port = config.getint('Database', 'port')
# ブール値として取得
debug_mode = config.getboolean('General', 'debug')
  • getint(): 整数値を取得します。
  • getboolean(): 真偽値を取得します。

設定値が存在しない場合のデフォルト値

設定値が存在しない場合のデフォルト値を指定することも可能です。

# 存在しない設定値にデフォルト値を設定
timeout = config.getint('Database', 'timeout', fallback=30)
print(f"Timeout: {timeout}")

ここでは、timeoutが設定ファイルに存在しない場合、デフォルトで30を使用するよう指定しています

設定ファイルの書き込み

configparserモジュールは、設定ファイルの読み込みだけでなく、設定ファイルへの書き込みもサポートしています。

設定ファイルに新しいセクションやキーを追加する

次に、config.iniに新しい設定項目を追加してみましょう。

import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# 設定ファイルの読み込み
config.read('config.ini')
# 新しいセクションと設定項目の追加
config.add_section('Logging')
config.set('Logging', 'log_file', 'app.log')
config.set('Logging', 'log_level', 'DEBUG')
# 設定ファイルに書き込み
with open('config.ini', 'w') as configfile:
    config.write(configfile)
print("設定ファイルに新しいセクションを追加しました")

書き込み後の設定ファイル

[General]
app_name = MyApp
version = 1.0
[Database]
host = localhost
port = 5432
username = admin
password = secret
[Logging]
log_file = app.log
log_level = DEBUG

設定ファイルの書き込みに関するポイント

  • add_section(): 新しいセクションを追加します。
  • set(): 既存のセクションに新しいキーと値を設定します。
  • write(): config.write(configfile)で、設定内容をファイルに書き込みます。

設定の削除

設定ファイルから不要なセクションやキーを削除することも可能です。

セクションやキーの削除

# セクションの削除
config.remove_section('Logging')
# キーの削除
config.remove_option('Database', 'password')
# 設定ファイルに書き込み
with open('config.ini', 'w') as configfile:
    config.write(configfile)

この例では、Loggingセクションを削除し、Databaseセクション内のpasswordキーを削除しています

設定ファイルを使ったプロジェクトの管理

configparserを活 用することで、プログラムの設定を外部のINIファイルにまとめて管理できます。これにより、設定をコードから分離し、プログラムを変更せずに動作や環境に応じて設定を柔軟にカスタマイズできるようになります。

例: Webアプリケーションの設定

例えば、次のようなWebアプリケーションの設定を外部のINIファイルで管理することができます。

[WebApp]
host = 0.0.0.0
port = 8080
debug = True

アプリケーションのソースコードでは、configparserを使ってこれらの設定を読み込みます。

import configparser
config = configparser.ConfigParser()
config.read('webapp_config.ini')
host = config['WebApp']['host']
port = config.getint('WebApp', 'port')
debug = config.getboolean('WebApp', 'debug')
# 取得した設定を使ってWebアプリケーションを起動
run_web_app(host, port, debug=debug)

これにより、動作環境ごとに設定ファイルを変更するだけで、プログラムの挙動を簡単にカスタマイズできます

まとめ

Pythonconfigparserモジュールを使うと、INI形式の設定ファイルを読み書きでき、プログラムの設定を外部ファイルに切り離して管理できます。これにより、コードの変更を最小限に抑えつつ、設定の変更やカスタマイズが簡単になります。

  • 設定ファイルを読み込み、必要な設定値を取得する
  • 型変換やデフォルト値を使って設定値を柔軟に扱う
  • 設定ファイルに新しいセクションやキーを追加、編集、削除する これらの機能を使って、よりメンテナンスしやすい柔軟なプログラムを構築しましょう。