Blow Up by Black Swan

pythonー設定ファイルの取り扱い(configparserモジュール)

スクレイピングプログラムなど、サーバなどにデプロイしてコードを走らせておく時に、データベースの設定情報や他のセンシティブな設定情報の取り扱いをどうすれば良いか悩むことがあると思います。

私も、今作成しているプログラムの各種設定をどうやって管理すれば良いか悩んでいました。そこで、pythonにconfigparserという設定ファイルを取り扱うモジュールがあることを知り、勉強しました。pythonの使い方を一通り学習していれば、簡単に使うことができるモジュールです。

今回は、このconfigparserモジュールについてまとめました。

1. configparserモジュールとは

configparserモジュールとは、pythonで設定ファイルを取り扱うために備えられた標準モジュールです。pythonの辞書型に類似した「iniファイル」を利用し、ここから各種設定を呼び出したり、または書き込んだりすることができます。辞書型のように、keyを指定し、valueを取り出します。

1-1. configparserモジュールの特徴

configparserモジュールの特徴は以下になります。

  • 標準ライブラリ(pipでのインストールは不要です)
  • 設定ファイルにiniファイルを利用する
  • 文字列として保存される。int型やfloat型などの他のデータ型として扱いたい場合は、取り出し時に自分で変換する必要がある
  • iniファイルは通常のopen関数でも内容を読み込めてしまうので、セキュリティについてはファイルの権限設定など、他の仕組みも必要?

1-2. iniファイルの特徴

ここで利用されるiniファイルは、前述のように辞書型のようなファイルになります。ただし、その記載の仕方は少し異なっており、key-valueのペア以外により大きなセグメントを表現するために「セクション」と呼ばれるものを指定します。このセクションによって、テスト用や開発用、本番環境用など複数の環境や設定が記述しやすいのかなと思います。下記がiniファイルの記述イメージです。

#iniファイルの記述方法

[Section1]  <-セクション
key1 = value1  #辞書のようなkey-value形式。コロン(:)で接続することもできる
key2 = value2

[Section2]
key1 = value1
key2 = value2

2. configparserモジュールの使い方

ここではconfigparserモジュールの使い方についてまとめています。利用する上でのベースとなるコードは、configparserモジュールの読み込みとインスタンスの作成です。

import configparser

config_read = configparser.ConfigParser()  #ConfigParserオブジェクトの生成

2-1. configparserモジュールでの設定ファイルの読み込みと値の取り出し

まずは、iniファイルから設定値を取り出してみます。iniファイルは3つのセクションを設け、それぞれにkey-valueが格納されています。今回は、下記ファイルを作成します。後ほど、パスの設定が必要なので、下記データをわかりやすいところに保存します。

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes

[bitbucket.org]
User = hg

[topsecret.server.com]
Port = 50022
ForwardX11 = no

まず、readメソッドを利用することで対象ファイルを読み込みます。読み込むことで、ConfigParserオブジェクトに設定ファイルの値が格納されます。次に値の取り出し方ですが、取り出し方は2つあり、基本はkeyを指定してvalueを取り出す辞書型のような扱い方です。

config_read.read('/hoge/config.ini')
config_read['DEFAULT']['CompressionLevel']

上記のコードを実行すると、 '9'が返されます。もう一つの方法は、getメソッドを利用する方法です。セクション情報を格納するConfigParserオブジェクトを作成し、getメソッドでセクション内の情報を取得します。

default = config_read['DEFAULT']
default.get('CompressionLevel')

上記コードの実行結果も'9'になります。

2-2. configparserモジュールによる設定ファイルへの書き込み

次は、設定ファイルへの書き込みです。ConfigParserオブジェクトでは、セクションやそのkey-value情報を格納しておくことができるため、ConfigParserオブジェクトに情報を格納し、格納したConfigParserをファイルに書き込むという流れで処理を行います。ConfigParserオブジェクトへの値の格納の仕方は3つあり、下記コードでそれぞれ記述しています。

import configparser

config_write = configparser.ConfigParser()

#格納方法1
config_write['section1'] = {
    "Debug": "True",
    "Testing": "True"
}

#格納方法2
config_write['section2'] = {}
config_write['section2']['Debug'] = 'True'
config_write['section2']['Testing'] = 'False'

#格納方法3
config_write['section3'] = {}
section3 = config_write['section3']
section3['Debug'] = 'False'
section3['Testing'] = 'False'

#ファイルへの書き込み
with open('/hoge/config2.ini', 'w') as configfile:
    config_write.write(configfile)

以上で、ファイルへの書き込みが完了し、以下のようなファイルが作成されます。

[section1]
debug = True
testing = True

[section2]
debug = True
testing = False

[section3]
debug = False
testing = False

2-3. configparserでサポートされるデータ型

最後にconfigparserでサポートするデータ型です。configparserでは基本的に文字列形式でしか値を保存しません。

type(config_read['DEFAULT']['CompressionLevel'])

戻り値

str

そのため、この値をint型やfloat型で取り扱いたい場合は、int()関数やfloat()関数を利用してデータ型を地震で変更する必要があります。

3. まとめ

以上がconfigparserモジュールの使い方です。非常に簡単に取り扱うことができました。

一方で、

  • flaskなどのフレームワークでは、それ仕様の設定方法が存在している
  • セキュリティ対策は取った方が良いと思われる

という課題、という疑問点があるので、色々なアプリケーションなどに挑戦しながらこの疑問点を解消していきたいなと思います。

4. 参考サイト

今回の主要参考サイトは以下になります。