【要約】文字起こしの誤変換が1件も直らない。用語辞書が無くても失敗にならなかった [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が自作の文字起こしツールを運用する際、用語辞書の読み込みに失敗しても処理が正常終了してしまう問題に直面した。辞書による誤変換の修正が機能していないにもかかわらず、システムはエラーを報告しなかった。具体的には以下の課題があった。
- ・
path.exists()が偽の際に、空の辞書を返して例外を握りつぶしていた。 - ・「ファイルが存在しない」ことと「中身が空である」ことを区別できていなかった。
- ・パスの誤設定や権限不足が、終了コード0のまま処理を完走させていた。
- ・辞書の内容(重複や型)が不正でも、黙って処理が進んでしまう状態だった。
// Approach
開発者は、存在確認による判定を廃止し、実際に読み込みを試みて例外の種類によって原因を切り分ける設計を採用した。これにより、エラーの発生原因を明確に特定できるようになった。具体的な手法は以下の通りである。
- ・
FileNotFoundErrorやOSErrorを個別のカスタム例外に分類し、原因を明示。 - ・JSONの構造、キーの有無、重複、空文字の有無を厳格にバリデーション。
- ・時間のかかる文字起こし処理の前に辞書読み込みを行い、Fail Fastを実現。
- ・辞書なしの実行は環境変数ではなく、引数(
allow_missing)で明示的に制御。 - ・例外メッセージには、セキュリティを考慮しフルパスではなくファイル名と親ディレクトリのみを記述。
// Result
設計変更により、異常が発生した際に原因を即座に特定できる堅牢なシステムへと改善した。これにより、運用時の調査コストが大幅に削減される。具体的な成果は以下の通りである。
- ・パスの打ち間違いや権限不足を、具体的な例外メッセージで即座に通知。
- ・辞書が空、または不正な形式の場合に、処理を即座に停止させることに成功。
- ・空文字による予期せぬ置換(全文字間への挿入)などの論理的な不具合を防止。
- ・「辞書なし」の動作を引数で制御することで、意図しない設定の残留を回避。
Senior Engineer Insight
> 「正常終了(Exit Code 0)」が必ずしも「成功」を意味しないという、実戦的な教訓である。サイレントエラーは、検知が遅れるほど修正コストが指数関数的に増大する。本記事の設計は、例外を単なるエラー通知ではなく、診断のための重要なコンテキストとして扱っている点が極めて優秀だ。特に、重い処理の前にバリデーションを配置するFail Fastの徹底と、フルパスを避けるセキュリティ意識は、大規模システムを運用する上で必須の作法である。単に動くコードではなく、運用に耐えうるコードの書き方が示されている。