claude-memory/project_architecture_decisi...

83 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 ロジックには手を付けない。移行は認証実装完了後に着手。