3つの無料APIと2層キャッシュで投資データ基盤を作った話【投資分析システム設計記 #2】 | TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
無料APIを利用する場合、J-Quantsの「1分間5リクエスト」やEDINETの「1日100リクエスト」といった厳しいレート制限が、大量の銘柄データを扱う際の大きなボトルネックとなる。これらを適切に制御しないと、スクリーニング処理が途中で停止したり、制限超過によるエラーが頻発したりする課題がある。
// Approach
APIを抽象基底クラス(ABC)で共通化し、yfinanceを主軸、EDINETをフォールバックとする構成を採用。さらに、メモリとSQLiteによる2層キャッシュを実装し、データの更新頻度に応じたTTL管理を行う。スクリーニング実行前にデータを一括取得するプリフェッチ戦略により、実行時のAPI依存を排除した。
// Result
プリフェッチとキャッシュの組み合わせにより、日次実行時のAPIコール削減率を約99%にまで高めることに成功。無料プランの制約下においても、200銘柄規模のスクリーニングを、API制限に抵触することなく安定して完走できるデータ基盤を構築した。
Senior Engineer Insight
> 無料APIの制約を「設計」でねじ伏せる、極めて実戦的なアプローチだ。特に、APIを抽象化してフォールバック構造を組み込み、実行時のAPI呼び出しを「ゼロ」にするプリフェッチ戦略は、コストとパフォーマンスの両立において非常に合理的である。ただし、yfinanceのような非公式APIへの依存は、将来的な仕様変更による破壊的変更のリスクを孕んでいる。また、SQLiteによる永続化は小規模には適しているが、データ量が増大した際には、分散DBへの移行や、キャッシュの整合性管理をより厳格に行う必要があるだろう。