📑

設定ファイル内容を一元管理できる! pyconfviewer

2024/11/03に公開

はじめに

色々自分で作っているとどのプログラミング言語でもアプリケーションを作る場合に .env なども含め様々な設定ファイルが必要になると思います。

これが1つのファイルで済むなら管理も簡単なのですが、複数ファイルにまたがると設定を一括で見れるものはないな.. なんて思うことがあります。

できれば、開発用と本番用で設定ファイルは同じだけど、中身が違うのでその差分も見たいな... なんて思うこともありました。

それを解決するために設定ファイルの内容を HTML に出力し、閲覧できる Python ライブラリを作成しました。

それが pyconfviewer です!

pyconfviewer とは

すべては下記の Github Repository に記載があるのですが、こちらでも記載をしましょう。
https://github.com/pkaiy81/pyconfviewer

はじめに で記載したことを行ってくれる Python ライブラリになります。

主な機能

  • 複数のフォーマットでの設定の読み込みをサポート: YAML,JSON.INI,.env,TOML の設定を簡単に視覚化するための HTML レポートを生成
  • 2つのディレクトリ間の構成を比較し、HTMLフォーマットで相違点を強調表示
  • 簡単なコマンド例で簡単にインストールおよび実行可能

インストール

Python ライブラリなのでインストールはこれだけ!

pip install pyconfviwer

実際に使用してみよう!

ディレクトリ構成は何でもいいですが、今回は下記のように config_a/config_b に各設定ファイルを配置してみましょう。
各ファイルはこちらにありますのでご使用ください。

── tests
    ├── mock_configs
    │   ├── config_a
    │   │   ├── file1.yaml
    │   │   ├── file2.json
    │   │   ├── settings.ini
    │   │   └── settings.toml
    │   └── config_b
    │       ├── file1.yaml
    │       ├── file2.json
    │       ├── settings.ini
    │       └── settings.toml

設定ファイルが置ければ、あとはライブラリを使用するスクリプトを書くだけ。
tests ディレクトリと同じ階層に demo.py を作成します。

README.md のままですが、下記で確認は可能です。

demo.py
import os
from pyconfviewer.config_generator import ConfigGenerator

# Define the configuration directory
config_dir = "tests/mock_configs/config_a"
output_dir = "output"
config_html = os.path.join(output_dir, "config_report.html")

# Create an instance of ConfigGenerator and generate the HTML report
config_generator = ConfigGenerator()
configs = config_generator.load_configs(config_dir)
config_generator.generate_config_html(configs, output_dir=output_dir, output_html_path=config_html)

print(f"Configuration HTML generated at {config_html}")


from pyconfviewer.diff_generator import DiffGenerator

# Define the configuration directories to compare
config_a_dir = "tests/mock_configs/config_a"
config_b_dir = "tests/mock_configs/config_b"
diff_html = os.path.join(output_dir, "diff_report.html")

# Create an instance of DiffGenerator and generate the HTML diff report
diff_generator = DiffGenerator()
configs_a = config_generator.load_configs(config_a_dir)
configs_b = config_generator.load_configs(config_b_dir)
diffs = diff_generator.generate_diff(configs_a, configs_b)
diff_generator.generate_diff_html(diffs, output_dir=output_dir, output_html_path=diff_html)

print(f"Diff HTML generated at {diff_html}")

実行

下記で実行してください。

python3 demo.py

実行が完了すると output ディレクトリ配下に config_report.html/diff_report.html が作成されていると思います。

表示確認

作成された config_report.html/diff_report.html はダブルクリックなどでブラウザが開くと思いますので、そちらで閲覧をしてみてください。

下記のようになっていれば、成功です!
config_report.html

diff_report.html

おわりに

いかがでしたでしょうか。
設定ファイルが多い環境もあると思いますが、これで一括で見ることができるかなと思います。
まだ作成したばかりなので対応しているファイル形式は多くありません。

他にもサポートが必要なファイル形式があればコメントなどで教えてください !!!

Discussion