自社開発
会員制の Web・モバイルアプリ
個人向けの会員制ツールを、Web(SPA)とモバイルアプリの両方で提供する構成です。認証、定期処理、通知の土台を作りました。
構成
クライアント
- WebReact 19 / Vite(SPA)
- モバイルExpo / React Native
サーバー
- APIGo / Gin(ORM なし)
- 定期処理プロセス内スケジューラ
データ
- DBMySQL 8.4
- メールSMTP(STARTTLS)
運用
- 開発環境Docker Compose
- CIGitHub Actions / Playwright
技術的なポイント
- 認証の堅い設計
- ログインは、メールとパスワード(bcrypt)と、OpenID Connect の両方に対応しています。
- メール確認のトークンは、ハッシュにして保存します。使えるのは 1 回だけで、24 時間で無効になります。
- 外部アカウントは、確認済みのメールアドレスとしか紐付けません。これで乗っ取りを防いでいます。
- CSRF・IDOR の対策
- CSRF を防ぐため、Origin と Sec-Fetch-Site ヘッダーを検査しています。
- IDOR(他人のデータを ID で見られる問題)を防ぐため、データを取り出す層で必ずユーザーごとに絞り込んでいます。
- 冪等な定期処理 — DB の一意制約を使って、再実行しても、停止のあとに追いついて処理しても、二重には処理されないようにしています。
- 日付と金額の厳密な扱い — 日本時間の日付を専用の型で扱います。月末の日付もずれないように補正します(1/31 → 2/28 → 3/31)。金額の丸めはサーバー側だけで行います。