claude-memory/project_architecture_decisi...

83 lines
4.4 KiB
Markdown
Raw Normal View History

---
name: アーキテクチャ決定事項
description: 技術選定・設計方針の決定理由。なぜその選択をしたかの根拠。将来の AI が同じ議論を繰り返さないために保存。
type: project
---
## 認証方式: Supabase Auth に決定2026-03-27
**決定**: Supabase Auth を採用する。
- Magic Link メール送信: Resend をカスタム SMTP として Supabase に接続noreply@soar-enrich.com
- Passkey指紋・顔: Supabase Auth が標準提供
- VPS server.js は Supabase JWT を受け取って検証するだけ(発行は Supabase
- VPS に作成済みの auth テーブルmagic_link_tokens 等)は将来削除予定(今は放置)
**Why:** 実装量が大幅に少ない・habit/pulse を Supabase に移行するときの RLS と自動連携・Resend DNS は Supabase のカスタム SMTP として引き続き活用できる。
**Passkey ドメイン課題:** ワイルドカード DNS `*.posimai.soar-enrich.com → 76.76.21.21` を Eiji さんに依頼予定。設定後に rpID=posimai.soar-enrich.com で全アプリ共有可能。
**How to apply:** X-API-Key・?init_key=・localStorage 認証ロジックは実装完了まで変更禁止。
---
## データ保存先: VPS PostgreSQL と Supabase の分担
**決定**: 用途によって使い分ける。
| 保存先 | 対象データ | 理由 |
|--------|-----------|------|
| VPS PostgreSQL | brain 記事・journal 日記・認証・セッション | サーバー側 AI 処理・全文検索が必要。すでに存在する |
| Supabase | togetherリアルタイム同期・将来: habit/pulse | リアルタイム購読・RLS によるユーザーデータ分離が自然 |
| localStorage | timer 設定・veil 設定 | 端末ごとに持つのが自然な設定値 |
**Why:**
- VPS: サーバー側で Gemini 呼び出し・検索・集計が必要なデータは API サーバーと同じ場所に置く
- Supabase: 「ユーザーが書いて読むだけ」のシンプルなデータは RLS で安全に管理できる Supabase が適切
- ユーザーデータhabit/pulseを VPS に置く場合は自前で `WHERE user_id = :me` を全エンドポイントに実装する必要があり、バグ時のデータ漏洩リスクがある
**How to apply:** habit/pulse のクラウド移行は Supabase を推奨。brain/journal は VPS から動かさない。
---
## CDN バージョン: Lucide @0.344.0 固定
**決定**: `unpkg.com/lucide@0.344.0` に固定。`@latest` は使用禁止。
**Why:**
- `@latest` を使うと Lucide がバージョンアップしたとき Service Worker が古いバージョンをキャッシュしたままになりアイコンが消える
- アイコン名・API の breaking change が起きたとき気づかずにアプリが壊れる
- バージョンを固定すれば自分のタイミングで確認して更新できる
**How to apply:** CDN 経由で読み込むすべてのライブラリはバージョン番号を明記する。`@latest` は CLAUDE.md 違反。
---
## ドメイン構成: A案API を別サブドメインに分離)を採用
**決定・完了2026-03-26:**
- `posimai.soar-enrich.com` → Vercel76.76.21.21)→ posimai-dashboard
- `api.soar-enrich.com` → VPS85.131.245.239)→ バックエンド API :8090
**完了済み:**
- DNS 切り替え完了A レコード設定済み)
- Resend DNSDKIM/SPF設定済み・稼働中
- 全フロントアプリの API URL を `api.soar-enrich.com/brain/api` に更新済み
**次期計画: ワイルドカード DNS `*.posimai.soar-enrich.com`**
- 全アプリを `brain.posimai.soar-enrich.com` 等に統一することで Passkey の rpID 問題を解決
- DNS レコード 1 件で 23 アプリ対応(個別 CNAME 不要)
- 実施時期未定(認証方式決定後)
**How to apply:** フロントの API URL は `api.soar-enrich.com/brain/api` が正。`posimai.soar-enrich.com` は今や Dashboard URL なので API 参照に使ってはいけない。
---
## localStorage 廃止方針
**決定**: habit・pulse・reader 既読履歴は将来的に Supabase へ移行する。ただし現時点では対応しない(商用化フェーズ 3
**Why:** localStorage はブラウザキャッシュ削除でデータ消失する。有料ユーザーに提供できない。
**How to apply:** 現状の localStorage ロジックには手を付けない。移行は認証実装完了後に着手。