Python

Pythonで設定ファイルとして.env または config.jsonを使ってみる

スポンサーラベル
Python

プログラムを作っていて、設定情報を効率的に管理したいことが多くあります。

その対応方法として、「.env」 ファイルと 「config.json」の2つがよく使用されます。それぞれの特徴や使い方を理解し、適切に使い分けることで、より安全でメンテナブルなコードを書くことができます。

今回はPythonで「.env」 ファイルと 「config.json」を使う方法とそれぞれの違いについて説明します。

1. .env と config.json の違い

大きな違いとして、.envは文字列のみを扱えますが、json形式の場合はリスト(配列)や葉葺(辞書)などの複雑な情報を管理できます。

よく使われる例としては、.envは環境ごとに異なる設定や機密情報を管理するために使用します。もう少し具体的にするとテスト環境(dev)と本番環境(prd)で使われる、それぞれのホスト名やパスワード、データベースなどです。

一方、config.jsonはアプリケーションで利用されるアプリケーション名やバージョンデフォルト値など、アプリとしての機能設定を変更する情報を保存します。

ただ、どちらも機密情報を保存する場合にはGitで管理されないように配慮する必要があります。

項目.envconfig.json
用途環境ごとの設定情報アプリに関する設定情報
型のサポートなし(文字列のみ)あり(数値・リスト・辞書)
管理方法環境変数として管理JSON構造として管理
バージョン管理.gitignore に追加しないと流出のリスクあり.gitignore に追加しないと流出のリスクあり
読み込み方法dotenv ライブラリを使用json.load() を使用

2. .env の使い方

.env ファイルは環境変数を定義するのに適しており、特にパスワードやAPIキーなどの機密情報の管理に向いています。

2.1. 1. .env ファイルを作成

まず、プロジェクトのルートディレクトリに .env ファイルを作成し、次のように記述します。

USERID=your_username  
PASSWD=your_password  
CHROMEDRIVER_PATH=./driver/chromedriver.exe  

2.2. 2. .env を Python で読み込む

Python で .env を読み込むには、python-dotenv ライブラリを使用します。

2.2.1. ライブラリのインストール

pip install python-dotenv  

2.2.2. Python コード

from dotenv import load_dotenv  
import os  

# .env ファイルの読み込み  
load_dotenv()  

USERID = os.getenv("USERID")  
PASSWD = os.getenv("PASSWD")  
CHROMEDRIVER_PATH = os.getenv("CHROMEDRIVER_PATH")  

print(f"UserID: {USERID}, Password: {PASSWD}, ChromeDriver: {CHROMEDRIVER_PATH}")  

2.3. .gitignore に追加**

.env に機密情報を含む場合は、誤ってGitリポジトリにコミットしないように .gitignore に追加しましょう。

3. config.json の使い方

config.json は、構造化データ(設定情報など)を管理するのに適しています。環境変数のように機密性の高い情報は .env にし、それ以外の設定は config.json にするのがベストプラクティス です。

3.1. 1. config.json ファイルを作成

プロジェクトのルートディレクトリに config.json ファイルを作成し、次のように記述します。

{
    "CHROMEDRIVER_PATH": "./driver/chromedriver.exe",  
    "RETRY_COUNT": 3,  
    "TIMEOUT": 10  
}  

3.2. 2. config.json を Python で読み込む

3.2.1. Python コード

import json  

# JSONファイルの読み込み  
with open("config.json", "r") as file:  
    config = json.load(file)  

CHROMEDRIVER_PATH = config["CHROMEDRIVER_PATH"]  
RETRY_COUNT = config["RETRY_COUNT"]  
TIMEOUT = config["TIMEOUT"]  

print(f"ChromeDriver: {CHROMEDRIVER_PATH}, Retry: {RETRY_COUNT}, Timeout: {TIMEOUT}")  

4. .env と config.json を組み合わせる

両方を組み合わせて使うことで、機密情報と一般的な設定情報を適切に管理できます。

from dotenv import load_dotenv  
import json  
import os  

# `.env` の読み込み(機密情報)  
load_dotenv()  
USERID = os.getenv("USERID")  
PASSWD = os.getenv("PASSWD")  

# `config.json` の読み込み(設定情報)  
with open("config.json", "r") as file:  
    config = json.load(file)  

CHROMEDRIVER_PATH = config["CHROMEDRIVER_PATH"]  
RETRY_COUNT = config["RETRY_COUNT"]  
TIMEOUT = config["TIMEOUT"]  

print(f"UserID: {USERID}, Password: {PASSWD}, ChromeDriver: {CHROMEDRIVER_PATH}, Retry: {RETRY_COUNT}, Timeout: {TIMEOUT}")  

5. まとめ

目的推奨ファイル
環境ごとに変わる設定や機密情報(APIキー、パスワード).env
アプリ設定情報(リトライ回数、タイムアウト設定)config.json
型のサポートが必要な場合(数値、リスト、辞書)config.json
セキュリティを重視する場合.env

.env は環境変数を管理し、config.json は設定ファイルとして活用することで、安全で柔軟な設定管理が可能になります。ぜひ適切に使い分けて、セキュアなプログラムを構築しましょう!

今回は以上です。

コメント

タイトルとURLをコピーしました