## プロジェクトの概要
アプリの中核データソースである証券口座連携基盤(Plaid → SnapTrade)の全面移行と、API 連携基盤の型安全化を、iOS・バックエンド双方の設計・実装を担当して完遂したプロジェクトです。移行により固定費(月額 10,000 ドル)を従量課金モデルへ変更し、現在の利用規模で最大75%のコスト削減と、ユーザー数に応じてコストが最適化されるスケーラブルな料金体系を実現しました。
## 担当領域について
- SnapTrade 連携のサービス層設計(連携 URL 発行 → OAuth → 再連携 → 過去データバックフィルという連携ライフサイクル全体の抽象化)から UI・リリースまで
- Supabase Edge Functions ベースの API を OpenAPI / oRPC の型安全なクライアントへ移行(数十エンドポイント、サービス無停止)
- バックエンド開発: 銘柄スコア計算ロジック、主要エンドポイントへの JWT 検証導入(リクエストの user_id を信用せず認証セッションから導出するセキュリティ強化)、金融計算のバグ修正
- バックエンド側 SnapTrade 実装(initial-sync ステートマシン、突合 cron 等)のコードレビューによる API 契約の整合性担保
## 技術的なアピール点
この移行は、そもそも自分の課題提起から始まったプロジェクトです。当初導入されていた Plaid は、バックエンド側の要件を満たせるか十分に検証されないまま採用されており、証券トランザクションの種別(Buy / Sell / Dividend など)が証券会社ごとに正規化されずバラバラの形式で返ってくるという問題を抱えていました。ポートフォリオのリターン率は過去のトランザクション履歴を組み立てて計算するため、この不整合はユーザーのポートフォリオチャートが正しく表示されないという、投資アプリとして致命的な品質問題に直結していました。そこで「そもそも連携プロバイダー自体を替えるべきではないか」と自発的に代替サービスの調査を開始。候補となった SnapTrade と直接連絡を取り、API がバックエンドの要件(トランザクションの正規化、履歴の取得範囲など)を満たすかを自ら検証した上で移行を提案し、iOS・バックエンド双方の実装からリリースまで主導しました。課題の発見からプロバイダー選定・検証・移行完遂までを自分起点で動かし、結果としてデータ品質の問題を解消するとともに、月額 10,000 ドルの固定費を従量課金へ切り替えるコスト構造の改善にもつなげています。
API 基盤の型安全化では、いきなり置き換えるのではなく「文字列指定の Edge Function 呼び出しを enum 化 → swift-openapi-generator による生成クライアントへ移行」と段階を設計。認証ヘッダー注入と指数バックオフリトライをミドルウェアに分離し、生成型→ドメインモデル変換を Mapper 層に隔離、エラー型が依存の向きを壊さないようパッケージ境界まで設計しました。さらにバックエンドの OpenAPI spec 変更を iOS リポジトリへ自動 PR する GitHub Actions を構築し、バックエンドの破壊的変更を開発段階で検知できる体制にしています。フロントとバックの「API 契約」を仕組みで守るという思想で取り組みました。