0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python設定ファイルの種類一覧とメリットデメリット(主観)

Posted at

Pythonプロンプトで設定ファイル(configファイル)が必要になるときがありますね。
設定ファイルはいろいろな書き方がありますが、それらの種類ごとに書き方の例、使い方の例、主観のメリット、デメリットをまとめます。

Pythonスクリプト

書き方の例

config.py
DEBUG = True
TEMPLATE_DEBUG = DEBUG # DEBUG変数に依存した設定も可能
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'my_db',
        'USER': 'db_user',
    },
    'staging': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'staging_db',
        'USER': 'staging_user',
    }
}

使い方の例

# main_app.py の例
import config
from pprint import pprint
import os

print(f"デバッグモード: {config.DEBUG}")

# 環境変数PYSCHOOL_DATABASEに応じてデータベース設定を切り替える例
env = os.environ.get('PYSCHOOL_DATABASE', 'default')
print(f"現在の環境: \"{env}\"")
if env in config.DATABASES:
    pprint(config.DATABASES[env])
else:
    print('データベース設定の環境が不明です。')

メリット

  • 読み書きが簡単
  • 変数や構造を使ったリッチな書き方ができる
  • IDEで補完してくれる

デメリット

  • プログラムが書けてしまうのでセキュリティリスクあり
  • プログラムと設定の境界があいまいになる
  • Python以外の言語で読むのが困難

INIファイル

書き方の例

config.ini
ServerAliveInterval = 45
Compression = yes
ForwardX11 = yes

[my_app]
database_host = localhost
database_port = 5432

使い方の例

import configparser

config = configparser.ConfigParser()
config.read('config.ini')
print(f"データベースホスト: {config['my_app']['database_host']}") # 'localhost'
print(f"デフォルトの圧縮設定: {config['Compression']}") # 'yes'
print(f"my_appの圧縮設定 (DEFAULTから継承): {config['my_app'].getboolean('Compression')}") # True

メリット

  • シンプル
  • 標準ライブラリ(configparser)で使える

デメリット

  • 古くて書いている人を見るのはまれ
  • 型の扱いが困難
  • データ構造の表現が困難

JSONファイル

書き方の例

config.json
{
  "theme": "dark",
  "user_settings": {
    "font_size": 12,
    "language": "en"
  }
}

使い方の例

import json

with open('config.json', 'r') as f:
    loaded_config = json.load(f)
print(f"フォントサイズ: {loaded_config['user_settings']['font_size']}") # 12

メリット

  • 利用されているシーンが多い
  • データ構造の読み書きしやすい
  • 標準ライブラリ(json)で使える

デメリット

  • コメントが書けない & コメントアウトできない

YAMLファイル

書き方の例

config.yaml
server:
  # ホスト
  host: 0.0.0.0
  # ポート
  port: 8080
users:
  - user1
  - user2
  - user3

使い方の例

import yaml

with open('server_config.yaml', 'r') as file:
    loaded_config = yaml.safe_load(file)
print(f"サーバーポート: {loaded_config['server']['port']}") # 8080

メリット

  • データ構造の読み書きしやすい
  • コメントが書ける

デメリット

  • 外部ライブラリ(PyYAML)が必要

TOMLファイル

書き方の例

config.toml
# config.toml の例
title = "My Awesome App"

[database]
type = "PostgreSQL"
host = "localhost"
port = 5432
enabled = true

[[users]] # リストのテーブル(配列の要素がテーブルの場合)
name = "Alice"
id = 1
email = "alice@example.com"

[[users]]
name = "Bob"
id = 2
email = "bob@example.com"

使い方の例

import tomllib # Python 3.11+
# import tomli # Python 3.10以前

# 読み込みの例
with open('config.toml', 'rb') as f: # TOMLファイルはバイナリモードで開く
    config = tomllib.load(f) # または tomli.load(f)

print(f"アプリケーションタイトル: {config['title']}") # My Awesome App
print(f"データベースポート: {config['database']['port']}") # 5432

メリット

  • シンプルで読み書きしやすい
  • データ型が明確
  • コメントが書ける
  • Python3.11以降は標準ライブラリ(tomllib)で使える

デメリット

  • 新しくて使っている人がまだ少ない

まとめ

これから書くならYAMLかTOMLが良いんですかね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?