こんにちは、Tech Samuraiです!
前回の記事「洗濯物乾燥シミュレーター開発記」では、シミュレーションのパラメータを管理するために**TOML**という形式の設定ファイルを利用しました。以前のプロジェクトではINIファイルを使っていましたが、なぜ今回はTOMLを選んだのでしょうか?
そして、RyeやPoetryといったモダンなツールを使うと必ず生成される、あの**`pyproject.toml`**というファイル。このファイルの正体について、疑問に思ったことはありませんか?
今回の記事では、Pythonにおける設定ファイルの二大巨頭、**INI**と**TOML**を徹底的に比較し、なぜ現代のPython開発においてTOMLがスタンダードになりつつあるのか、その理由を探検します!
1. 伝統的な設定ファイル:INI (`configparser`)
INIは、古くから使われているシンプルな設定ファイル形式です。Pythonでは、標準ライブラリである`configparser`を使って、このINIファイルを簡単に読み書きできます。
INIファイル (`config.ini`) の例:
[SIMULATION]
base_evaporation_factor = 0.001
is_active = true
[WIND_FACTORS]
none = 1.0
low = 1.5
INIの長所と短所
- 長所:
- Pythonの標準ライブラリだけで扱えるため、追加のインストールが不要。
- 単純なキーと値のペアを管理するには、非常にシンプルで分かりやすい。
- 短所:
- 全てが文字列として読み込まれる:
0.001
は浮動小数点数として、true
はブール値として扱いたいのに、`configparser`はこれらを全て文字列として読み込みます。そのため、コード側でfloat()
やbool()`
を使って、手動で型変換する必要があります。 - リストが表現できない:
`target_headers = item1, item2`
のように書いても、ただの長い文字列として扱われてしまいます。
- 全てが文字列として読み込まれる:
2. モダンな設定ファイル:TOML
TOML (Tom’s Obvious, Minimal Language) は、INIの欠点を克服し、人間にとってより読みやすく、直感的に書けるように設計された、新しい設定ファイル形式です。
TOMLファイル (`config.toml`) の例:
(INIと同じ内容をTOMLで書くと、こうなります)
[simulation]
base_evaporation_factor = 0.001 # これは数値(float)として解釈される
is_active = true # これはブール値(bool)として解
釈される
# テーブル(辞書)の表現
[wind_factors]
none = 1.0
low = 1.5
# 配列(リスト)の表現も簡単
supported_fabrics = ["綿", "化学繊維", "厚手"]
TOMLの圧倒的なメリット
- データ型が豊か: 数値、ブール値、文字列を自動で認識してくれます。コード側での面倒な型変換が不要になります。
- リスト(配列)をネイティブにサポート: 角括弧
[]`
で囲むだけで、簡単にリストを定義できます。 - 階層構造が明確:
[table.subtable]`
のように、より複雑な設定も直感的に記述できます。
Python 3.11からは、標準ライブラリ**`tomllib`**が追加されたため、TOMLファイルを読み込むためだけなら、追加のインストールも不要になりました。(書き込みには`toml`ライブラリのインストールが必要です)
3. `pyproject.toml`の謎、解明
ここで、冒頭の疑問に戻ります。RyeやPoetryが生成する`pyproject.toml`とは、一体何なのでしょうか?
その答えは、「Pythonプロジェクト自体の設定を記述するための、TOML形式で書かれた標準的な設定ファイル」です。
かつてPythonプロジェクトの設定は、`setup.py`や`requirements.txt`など、様々なファイルに散らばっていました。この混乱を統一するため、Pythonのコミュニティは**TOML形式**を公式に採用し、プロジェクト名、バージョン、依存ライブラリといった全ての情報を、このpyproject.toml`
という一つのファイルに集約することを決定したのです。
つまり、Pythonのエコシステム自体が、設定ファイルの「正解」としてTOMLを選んだ、というわけです。この事実こそが、私たちが新しいプロジェクトでTOMLを積極的に採用すべき、最も強力な理由です。
まとめ
特徴 | INI (`configparser`) | TOML (`tomllib`) |
---|---|---|
データ型 | 全て文字列 | 数値, bool, 文字列を自動認識 |
リスト | 非対応 | ネイティブ対応 |
標準サポート | 読み書き (標準) | 読み込みのみ (Python 3.11+) |
エコシステム | 伝統的 | `pyproject.toml`で公式採用 |
結論として、
- ごく単純なキーと値のペアだけで、古いPython環境にも対応する必要があるなら、INIも選択肢の一つ。
- しかし、数値やリストを扱ったり、モダンなPythonプロジェクトを開発したりするなら、エコシステムの標準でもあるTOMLを選ぶのが、疑いようのないベストプラクティスです。
技術選定の裏側にある「なぜ?」を知ることで、あなたのプログラミングはさらに面白くなるはずです!
【完全ガイド】PythonとPySide6で学ぶGUIアプリ開発ロードマップ(入門から実践まで)
【Git中級編】もっと便利に!日常操作を効率化するGitコマンドオプション集
コメント