【要約】Web開発を勉強するために、OCRツールを作成する(1) [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者は、レシートのOCRからデータ管理までの一連のシステムを構築する際、以下の課題に直面した。
- ・セキュリティの確保:GCPの認証情報をクライアント側に露出させるリスクがある。
- ・ユーザー体験の低下:OCR処理は計算負荷が高く、同期処理ではレスポンスが遅延する。
- ・処理の効率化:OCRの前処理やデータ整形を効率的に行う仕組みが必要である。
// Approach
設計者は、セキュリティとレスポンス性能を両立させるため、以下の手法を採用した。
- ・役割の分離:API担当のNode.jsと、重い処理を行うPythonワーカーを分離した。
- ・非同期イベント駆動:GCSへのアップロードをPub/Subで検知し、バックグラウンドで処理する。
- ・鍵の隠蔽:Node.jsで署名付きURLを発行し、クライアントに直接鍵を渡さない構成とした。
- ・高度な抽出:Gemini APIを活用し、OCR結果の整形を自動化する。
// Result
設計段階において、以下の成果が得られた。
- ・設計の明確化:各コンポーネントの役割と、通信フローが定義された。
- ・UXと安全性の両立:非同期処理による高速なレスポンスと、鍵の隠蔽による安全な設計を実現した。
- ・実装への道筋:構成設計が完了し、次工程の実装フェーズへ移行できる状態となった。
Senior Engineer Insight
> 学習用としては、非常に実戦的な設計思想である。特に、Node.jsとPythonを分離し、Pub/Subで繋ぐ構成は、スケーラビリティの観点からも理にかなっている。ただし、実運用では以下の点に注意が必要である。
- ・結果整合性:アップロード直後にデータが反映されない事象への考慮。
- ・エラーハンドリング:OCR失敗時のリトライ戦略や、デッドレターキューの設計。
- ・コスト管理:Gemini APIやGCPリソースの利用料金の監視。