こんにちは、Heywaです。
PythonとSeleniumを使ったブラウザ自動化は非常に便利ですが、スクリプトを運用していく上で必ず直面する問題があります。それは「認証情報や環境依存の設定をどう管理するか」という問題です。
今回は、Claudeを活用してSeleniumスクリプトを構築する際に、私が実践している「設定ファイル分離のベストプラクティス」について解説します。セキュリティと保守性を両立させるための、システム思考的なアプローチです。
なぜ設定ファイルを分離すべきなのか?
Seleniumでログイン処理などを自動化する場合、IDやパスワード、対象のURLなどをスクリプト内に直接書き込んでしまう(ハードコーディング)のは非常に危険です。
- セキュリティリスク: GitHubなどのバージョン管理システムに誤ってプッシュしてしまうと、認証情報が漏洩します。
- 保守性の低下: パスワードが変更されたり、対象のURLが変わったりするたびに、Pythonのコード自体を書き換える必要があります。
- 環境間の移行が困難: 開発環境(Mac M1)と本番環境(AWS EC2)で異なる設定を使いたい場合、コードの分岐が複雑になります。
これらの問題を解決するために、ロジック(Pythonコード)と設定(認証情報など)を明確に分離することが不可欠です。
.envファイルとpython-dotenvの活用
私が最も推奨する方法は、.env ファイルと python-dotenv ライブラリの組み合わせです。Claudeにスクリプトの作成を依頼する際も、必ず「設定は.envから読み込むようにして」と指示を出しています。
1. .envファイルの作成
プロジェクトのルートディレクトリに .env という名前のファイルを作成し、設定値を記述します。
# .env
TARGET_URL=https://example.com/login
LOGIN_USER=my_username
LOGIN_PASS=my_super_secret_password
HEADLESS_MODE=True
注意: この .env ファイルは絶対にGitの管理下に含めないよう、.gitignore に追記しておきましょう。
2. Pythonスクリプトからの読み込み
次に、Python側でこれらの値を読み込みます。pip install python-dotenv でライブラリをインストールしておきます。
import os
from dotenv import load_dotenv
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# .envファイルの読み込み
load_dotenv()
# 環境変数の取得
TARGET_URL = os.getenv('TARGET_URL')
LOGIN_USER = os.getenv('LOGIN_USER')
LOGIN_PASS = os.getenv('LOGIN_PASS')
HEADLESS_MODE = os.getenv('HEADLESS_MODE', 'False').lower() == 'true'
def setup_driver():
options = Options()
if HEADLESS_MODE:
options.add_argument('--headless')
# WebDriverの初期化処理...
return webdriver.Chrome(options=options)
# 以降、取得した変数を使ってSeleniumの処理を記述
Claudeへのプロンプト例
Claudeにこの構成のスクリプトを書かせる場合、以下のようなプロンプトが効果的です。
「PythonとSeleniumを使って、指定したサイトにログインするスクリプトを作成してください。ただし、以下の要件を厳守すること。
1. URL、ユーザー名、パスワードはハードコーディングせず、python-dotenvを使って.envファイルから読み込む設計にすること。
2. エラーハンドリング(要素が見つからない場合など)を適切に行うこと。
3. 処理完了後、またはエラー発生時は必ずWebDriverを終了(quit)させること。」
まとめ
設定ファイルの分離は、プログラミングの基本中の基本ですが、自動化スクリプトをサクッと書く際には意外と疎かになりがちです。
しかし、システムとして長期的に運用していく(例えば、私のボートレース予測システムのように毎日稼働させる)のであれば、最初からこの設計を取り入れておくことで、後々のメンテナンスコストが劇的に下がります。皆さんもぜひ、安全で保守性の高い自動化パイプラインを構築してください。
