【要約】5年分のレシートメールを解析したら、ソシャゲ課金が433万円だった [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、自身の膨大なレシートメールから正確な支出傾向を把握しようとした際、以下の技術的障壁に直面した。
- ・決済代行(PayPal等)の介在により、送信元アドレスから直接的な請求先を特定できない。
- ・同一の請求先が、表記揺れや法人格の有無により別々のエンティティとして認識される。
- ・ISO-2022-JPの文字コードやHTML実体参照が、金額抽出の精度を低下させる。
- ・macOSのMail.app特有のファイルエクスポート仕様や、重複データの混入。
// Approach
開発者は、データの正確性とプライバシー保護を両立するため、以下の設計・実装を採用した。
- ・パーサーの分離: 取得元と解析ロジックを切り離し、PayPalやApple等のフォーマット別に専用パーサーを実装。
- ・正規化ロジックの導入: 法人格の除去や、名称の差分に基づく文字列の統合処理を実施。
- ・堅牢なデコード処理: TextDecoderを用いたバイト列の適切な処理と、HTMLタグを空白に置換する解析手順を確立。
- ・CSPの適用: default-src 'none' を設定し、ブラウザ側で外部通信を物理的に遮断。
// Result
開発者は、59ヶ月間で計433万円に及ぶソシャゲ課金の推移を可視化することに成功した。
- ・総額だけでなく、月ごとの支出推移(2024年のピークから減少傾向)という判断材料を得た。
- ・「未分類」や「不明」を許容する設計により、推測による誤った集計を回避し、データの信頼性を確保した。
- ・ブラウザ完結型により、セキュリティ懸念を払拭したツールを実現した。
Senior Engineer Insight
> 本記事は、非構造化データのパースにおける「泥臭いエッジケース」の宝庫である。特に、文字コードの誤認やHTML構造の崩れ、ファイルプロミスといった、一見単純なタスクに潜む罠への対処は、実務におけるデータパイプライン構築の教訓として極めて価値が高い。また、セキュリティを「宣言」ではなくCSPによる「強制」で担保する姿勢は、プライバシーを扱うシステム設計において模範的である。