通貨ETLパイプライン
概要
リアルタイムで為替レートを収集し、データを変換してPostgreSQLに保存する 自動ETLパイプライン — Apache Airflowでオーケストレーション、Dockerでコンテナ化。
ハイライト
- 本番環境での完全なExtract → Transform → Loadパイプライン
- Airflow UIでの監視とリトライによる毎時自動実行
- GitHub ActionsによるCI/CD:プッシュごとにlint、フォーマット、テスト
- 外部依存なしのテスト(APIモック、インメモリSQLite)
アーキテクチャ
API (AwesomeAPI)
│
▼
┌─────────────┐ ┌─────────────────┐ ┌──────────────┐
│ 抽出 │────▶│ 変換 │────▶│ ロード │
│ Requests │ │ Pandas │ │ SQLAlchemy │
│ バリデーション│ │ 型付け │ │ PostgreSQL │
└─────────────┘ └─────────────────┘ └──────────────┘
│
▼
┌─────────────────────────┐
│ Apache Airflow │
│ 毎時オーケストレーション │
│ 自動リトライ │
└─────────────────────────┘
技術スタック
| 技術 | バージョン | 役割 |
|---|---|---|
| Python | 3.13 | メイン言語 |
| Apache Airflow | 2.9.2 | パイプラインオーケストレーション |
| PostgreSQL | 15 | データストレージ |
| Pandas | 2.2+ | データ変換 |
| SQLAlchemy | 2.0+ | データベース抽象化 |
| Docker / Compose | latest | コンテナ化 |
| Pytest | 8.0+ | 自動テスト |
| Ruff | 0.4+ | リントとフォーマット |
今後の改善
- [ ] Rawレイヤー — ParquetでAPIの生データを保存
- [ ] 冪等性 — 重複挿入の防止
- [ ] Great Expectations — データ品質検証
- [ ] ダッシュボード — 為替レート履歴の可視化