# config.py 変更参照ドキュメント このファイルは `config.py` に対して行った最近のリファクタリング / 安全化についての参照資料です。 目的: import 時の副作用を抑止し、`device_manager` などの外部モジュールがない環境でも安全に `config` をインポートできるようにすること。 主な変更点 - import-time の初期化保護 - `Config.__new__` の中で `init_config()` / `load_config()` を呼び出しますが、これらを try/except で保護し、初期化に失敗しても例外を上位に伝播させずログ記録のみで処理を継続します。 - このため、アプリ起動環境に必須ではない外部依存が欠けている場合でも、`import config` によるクラッシュを防止します。 - 外部モジュールの呼び出しをガード - `device_manager`、翻訳/文字起こし関連のモデル一覧 (`whisper_models`, `ctranslate2_weights`) などは import 時に直接呼び出さず、存在チェック(try/except)を行って安全なデフォルト(空リストや "NoDevice" など)にフォールバックします。 - これによりヘビーな依存(Windows 固有パッケージや大きな ML ライブラリ)がない CI 環境や軽量実行環境での import が安定します。 - エラーロギング - 初期化やデフォルト取得に失敗した場合は、例外を握りつぶすのではなく `utils.errorLogging()` を経由してエラーメッセージを残します。これにより問題の診断が容易になります。 - 設定デフォルト値の扱い - `getDefaultMicDevice()` / `getDefaultSpeakerDevice()` などを呼ぶ箇所は try/except で保護され、失敗時には `"NoHost"` / `"NoDevice"` 等の安全な文字列で代替されます。 利用上の注意 - 既存のコードは `config` をインポートしただけで `device_manager` を起動することを想定している箇所があるかもしれません。今回のリファクタリングでは "import 時に副作用を起こさない" ことを優先しているため、もし明示的な初期化を必要とする場合は、呼び出し側で `device_manager.init()` を明示的に行ってください。 - もし `config` のロードで致命的な設定エラーが発生した場合でも、アプリは継続動作しますが、ログを確認して手動で修復することが必要になる場合があります。 ドキュメントの提案差分 - 既存 `docs/modules/config.md` の "生成とライフサイクル" セクションに次の一文を追加することを推奨します: > 注意: `Config()` のインポートは副作用を起こさないよう保護されています。プラットフォーム依存のコンポーネント(例: `device_manager`)は明示的に初期化してください。 - `SELECTABLE_*` 系の説明に、起動環境に依存して空になる可能性があることを明示するパラグラフを追加してください(CI 環境や headless 環境では空になる)。 --- 作業済み: このファイルはワークスペースに `docs/modules/config_ref.md` として作成済みです。既存 `docs/modules/config.md` は上書きしていません。上書き/マージの希望があれば続けます。