スポンサーリンク

Pythonでiniファイルを使う方法|configparserの基本と読み書きの実例付き!

Python入門

はじめに|iniファイルって何に使うの?

Pythonでプログラムを作っていると、「この設定、毎回コードに書くの面倒だな…」と思うこと、ありませんか?

たとえば…

  • データの保存先フォルダのパス
  • 使用するユーザー名やAPIキー
  • デバッグモードのON/OFF設定

こういった**「あとから自由に変えたい情報」**は、コードとは別に管理したほうが便利です。そこで活躍するのが「iniファイル」です。


iniファイルは、古くから使われているシンプルな設定ファイル形式です。拡張子は .ini。Windowsのシステム設定やゲームのコンフィグでもおなじみですね。

書き方もとっても簡単で、

[settings]
debug = true
username = my_user

のように、セクション・キー・値のセットで情報を整理できます。

このファイルをPythonで読み込めば、「設定をコードにベタ書きする必要なし」「あとから値を変えてもOK」という便利な仕組みが手に入ります。

本記事では、Python標準ライブラリのconfigparserを使って、iniファイルを読み書きする方法をやさしく解説していきます。

「設定ファイルってなんか難しそう…」と感じている方も、これを読めばあっという間に使いこなせるようになりますよ!

それではさっそく、iniファイルの基本構造から見ていきましょう。




1. iniファイルの基本構造を理解しよう

まずは、iniファイルがどんな構造になっているのかを見てみましょう。

iniファイルは、以下のような3つの要素で構成されています

  1. セクション(section)
  2. キー(key)
  3. 値(value)

🔸 セクションは「[]」で囲む

セクションは、設定をグループ化するための見出しのようなものです。[general][user] など、角括弧 [ ] で囲んで記述します。

[database]

このセクションの中に、具体的な設定項目を入れていきます。


🔸 キーと値は「=」か「:」でつなぐ

セクションの中では、キーと値を = または : でつないで書きます

[database]
host = localhost
port = 3306

どちらの区切り方でもOKですが、=を使うケースが多いです。


🔸 コメントは「#」か「;」で書ける

設定ファイルには「この行は何を意味するのか?」を書いておきたくなりますよね。そんなときは行の先頭に # または ; を付けることでコメントを追加できます。

# これはホストの設定
host = localhost
; ポート番号は3306
port = 3306

🔸 値は複数行にもできる

長い文字列を複数行に分けたいときは、2行目以降をインデントして書くことで対応できます。

[description]
text = これは複数行にわたる説明です。
インデントすれば続きとして認識されます。

🔸 他の値を参照することもできる!

なんと、一度定義した値を使い回すこともできるんです。%(キー名)s という書き方で参照できます。

[paths]
base_dir = /home/user/project
data_dir = %(base_dir)s/data

この例では、data_dir の中で base_dir の値 /home/user/project を使っています。こうすれば、一括変更もしやすくなりますね!

次は、いよいよこのiniファイルをPythonから読み込んで使う方法を見ていきましょう!




2. Pythonでiniファイルを読む|configparserの基本

iniファイルの書き方がわかったら、次はそれをPythonプログラムの中で使えるようにする方法を見ていきましょう。

Pythonでは、設定ファイルを読み込むために標準モジュールの configparser を使います。追加でインストールする必要はないので、すぐに使い始められます!


🔸 基本の流れはこの3ステップ!

import configparser

# 1. ConfigParserオブジェクトを作成
config = configparser.ConfigParser()

# 2. iniファイルを読み込む
config.read('setting.ini')

# 3. 値を取り出す
host = config['database']['host']
port = config['database']['port']

簡単ですよね?


🔸 まずはconfigparserをインポート

標準ライブラリなので、以下のようにインポートするだけです。

import configparser

🔸 ConfigParserオブジェクトを作る

設定ファイルを操作するための「操作ユニット」のようなものを用意します。

config = configparser.ConfigParser()

🔸 ファイルを読み込む

読み込むファイルのパスを、read()メソッドで指定します。

config.read('setting.ini')

このとき、相対パスや絶対パスどちらでもOKです。


🔸 セクション・キーでアクセスする

設定値は、辞書のようにしてアクセスできます。

config['セクション名']['キー名']

たとえば、setting.iniの中身がこうだったとします:

[database]
host = localhost
port = 3306

これをPythonで読み込むと…

host = config['database']['host']  # 'localhost'
port = config['database']['port'] # '3306'(文字列)

すべての値は文字列として取得されるので、数値として使いたいときは変換が必要です。これについては次の章で詳しく解説します。


🔸 セクションだけを取得したいときは?

セクションごとに辞書のようにまとめて扱いたいときは、次のように書けます:

db_config = config['database']
print(db_config['host']) # localhost

セクションをひとまとめにできるので、使い勝手がよくなります。

次は、**取得した値をどう扱うか?型の変換はどうする?ブール値の扱いは?**といった点を詳しく見ていきます!




3. 型変換と便利な取得メソッド

前の章で、iniファイルから値を読み込む方法を紹介しましたが、**取得した値はすべて「文字列(str)」**として扱われます。

でも実際のアプリでは、数値や真偽値など、型に合わせて使いたい場面が多いですよね。ここではそのための便利な方法を解説します。


🔸 数値を使いたいときは int() や float()

たとえば、ポート番号をiniファイルから読み込んだとき:

[server]
port = 8080

Pythonでそのまま取得すると…

port = config['server']['port']
print(type(port)) # <class 'str'>

→ 文字列ですね。

このままだと数値として比較したり計算したりできないので、int()関数で変換して使います:

port = int(config['server']['port'])

小数点を含む数値なら float() を使いましょう。


🔸 真偽値(ブール値)を扱いたいときは getboolean()

Pythonでは TrueFalse を使って条件分岐することが多いですが、文字列としての 'true''false' はそのままでは使えません

そんなときは、セクションオブジェクトの getboolean()メソッド を使えばOK!

[feature]
enabled = true
enabled = config.getboolean('feature', 'enabled')
print(enabled) # True(ブール型)

次のような文字列はすべて True として認識されます:

  • true, yes, on, 1

逆に以下は False になります:

  • false, no, off, 0

🔸 他にも便利な取得メソッド

configparserでは、他にも次のようなメソッドが用意されています:

メソッド名戻り値の型説明
get()str(文字列)通常の取得(これが基本)
getint()int(整数)整数として取得
getfloat()float(小数)小数として取得
getboolean()bool(真偽値)真偽値として取得(yes/noなど)

これらを使えば、毎回int()float()で変換する手間が省けてコードもすっきりします。

timeout = config.getint('server', 'timeout')

🔸 値が存在しない場合の扱いに注意!

設定ファイルに存在しないキーを読み込もうとすると、例外(KeyError)が発生します。

print(config['server']['not_exist'])  # ← エラー!

安全に扱いたい場合は、get()にデフォルト値を渡すような工夫をすると安心です(独自関数で包むなど)。

次は、実際の現場で使えるiniファイルの活用例と運用のベストプラクティスを紹介します。ここまでの知識をどう活かせるのか、ぜひチェックしてみてください!




4. iniファイルの活用例とベストプラクティス

ここまでで、iniファイルの基本的な構文や、Pythonからの読み込み方法が分かってきましたね。

では実際にどんな場面で役立つのか、活用例やベストな使い方のコツを見ていきましょう!


🔸 活用例①:アプリの設定ファイルに使う

小〜中規模のPythonスクリプトやデスクトップアプリで、環境や動作を外部から制御するのにiniファイルはとても便利です。

たとえば次のような設定ファイルを用意しておくと…

[app]
theme = dark
language = ja

[paths]
base_dir = /home/user/myapp
log_dir = %(base_dir)s/logs

ユーザーが設定を自由に書き換えられるようになりますし、アプリの再起動なしで反映することも可能です。


🔸 活用例②:複数環境(開発・本番)を切り替える

WebアプリやAPIを開発していると、開発環境と本番環境で設定を分けたいことがあります。

[development]
debug = true
db_host = localhost

[production]
debug = false
db_host = db.prod.example.com

Pythonのコード内で 環境名 を切り替えることで、設定を柔軟に読み替えられます。

env = 'development'  # ここを 'production' に変えるだけで切り替えOK
config = configparser.ConfigParser()
config.read('setting.ini')
db_host = config[env]['db_host']

🔸 ベストプラクティス①:定数はまとめておこう

複数の値で共通になるパスや定数は、変数として定義して再利用すると便利です。

[common]
base_dir = /app/data

[log]
log_dir = %(base_dir)s/logs

あとでパスを変更したくなっても、1箇所だけ直せばOKなので、保守性が高くなります


🔸 ベストプラクティス②:iniファイルはバージョン管理しよう

設定ファイルは、Gitなどのバージョン管理に含めておくことが大切です。

ただし、パスワードやAPIキーなど機密情報を含む場合は、別ファイルに分ける.gitignore で除外しておくと安全です。


🔸 ベストプラクティス③:YAMLやJSONとの使い分け

最近はYAMLやJSON形式の設定ファイルもよく使われます。それぞれの特徴をまとめてみると…

形式特徴向いているケース
INIシンプル、軽量、見やすい小規模設定、ユーザー編集が前提
YAML階層構造、可読性が高い中〜大規模設定、複雑な構造が必要な場合
JSON機械処理向き、他言語と互換性◎Webアプリ、APIレスポンス

iniファイルは「とにかく簡単に設定したいとき」にピッタリなんです!

ここまでで、iniファイルの基礎から活用法までバッチリ理解できましたね。




5. まとめ|iniファイルは「軽い設定管理」に最適!

ここまで、Pythonでiniファイルを使う方法を見てきました。

おさらいすると、iniファイルは…

  • 設定をコードの外に出して管理できる
  • セクション・キー・値のシンプルな構造で分かりやすい
  • Python標準のconfigparserで簡単に読み込める
  • 型変換や変数参照も柔軟にできる

というメリットがあります。

とくに、小規模なスクリプトやツール、設定の多くないデスクトップアプリなどでは、「ちょうどいい」設定管理の方法として活躍してくれます。

もちろん、もっと複雑な設定が必要なら、YAMLやJSONといった別のフォーマットに移行してもOK。その前のステップとして、まずはini形式から始めてみるのがオススメです。

これで、あなたも設定ファイルマスターの第一歩を踏み出しました!

設定の記述と読み込みができるようになれば、アプリやスクリプトの使い勝手もグッと良くなります。ぜひ、今回の知識をあなたのプロジェクトに活かしてみてくださいね。


🧩 あわせて読みたい


よくある質問(Q&A)

Q
iniファイルはどんなときに使えばいいの?
A

プログラムの「設定」や「構成情報」を、コードとは別に管理したいときに便利です。たとえば、フォルダのパス、ログレベル、使用モード(テスト/本番)などを記録しておくのに最適です。

Q
Pythonのconfigparserで取得した値がすべて文字列になるのはなぜ?
A

iniファイルの仕様上、すべての値は「文字列」として扱われます。そのため、数値や真偽値として使いたい場合は、int()getboolean()などで明示的に変換する必要があります。

Q
値を他のキーの値で参照できるってどういう意味?
A

一度定義した値を別の場所で再利用できる仕組みです。たとえば:

[base]
root = /app

[log]
log_dir = %(root)s/logs

このように書くと、log_dirには「/app/logs」が自動で代入されます。パスの一括管理などでとても役立ちます。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク