プログラムを作っていて、設定情報を効率的に管理したいことが多くあります。
その対応方法として、「.env」
ファイルと 「config.json
」の2つがよく使用されます。それぞれの特徴や使い方を理解し、適切に使い分けることで、より安全でメンテナブルなコードを書くことができます。
今回はPythonで「.env」
ファイルと 「config.json
」を使う方法とそれぞれの違いについて説明します。
1. .env と config.json の違い
大きな違いとして、.envは文字列のみを扱えますが、json形式の場合はリスト(配列)や葉葺(辞書)などの複雑な情報を管理できます。
よく使われる例としては、.envは環境ごとに異なる設定や機密情報を管理するために使用します。もう少し具体的にするとテスト環境(dev)と本番環境(prd)で使われる、それぞれのホスト名やパスワード、データベースなどです。
一方、config.jsonはアプリケーションで利用されるアプリケーション名やバージョン、デフォルト値など、アプリとしての機能設定を変更する情報を保存します。
ただ、どちらも機密情報を保存する場合にはGitで管理されないように配慮する必要があります。
項目 | .env | config.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
は設定ファイルとして活用することで、安全で柔軟な設定管理が可能になります。ぜひ適切に使い分けて、セキュアなプログラムを構築しましょう!
今回は以上です。
コメント