スクレイピングプログラムなど、サーバなどにデプロイしてコードを走らせておく時に、データベースの設定情報や他のセンシティブな設定情報の取り扱いをどうすれば良いか悩むことがあると思います。
私も、今作成しているプログラムの各種設定をどうやって管理すれば良いか悩んでいました。そこで、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. 参考サイト
今回の主要参考サイトは以下になります。