この PRD は「実装予定の仕様(あるべき設計)」を書く正典である。 現在の実装と乖離していても、 それは実装がまだ追いついていない gap であり、PRD の誤りではない (理想を本文に書き、現状との差は「gap」「計画中」と明示する)。 読み手・レビューは、PRD が現行コードより先行している箇所を欠陥ではなく実装 TODO として扱うこと。
ただし次は現状に忠実であること(ここが食い違えば PRD の誤り): ①各章の**「実装済み」記述は 現状を正確に表す、②既存の DB 列・API・環境変数名はスキーマに漏らさず載せる、 ③設計の意味論**(
tasks.userIdが GitHub numeric id である等)は実データと一致させる。 未確定の論点は「要確認」と明記する。🔒 この PRD に GitHub Issue 番号は書かない。 Issue の番号と開閉状況はリポジトリとは独立に 変わる一時的な情報である。未実装の項目は「未実装」「計画中」「検討中」という状態だけを書き、 個別の課題は GitHub Issues 側で追う。
セキレイをモチーフにした個人用の Todo Web アプリである。GitHub アカウントでログインし、 自分のタスクを管理する。
同時に、Next.js の Server Component / Server Action と Hono API を組み合わせた構成そのものが 題材でもあり、「Next.js らしいデータのやり取り」を実際に動くアプリで確かめる場を兼ねる。
目的・利用者の範囲・非目標は 00-product.md に集約している。 共有やコラボレーション、通知、モバイルアプリ化を非目標とすることも、オフライン対応が 非目標ではなく長期の検討事項であることも、同章に書いてある。
機能の実装状況(実装済み / 未実装 / 要確認 / 検討中)は 00-product.md §機能の実装状況にまとめている。 各項目からは該当章へリンクしている。
進行中の課題は GitHub Issues を参照すること。
ブラウザから見えるオリジンは 1 つだけ(ローカル dev / リモート dev / 本番いずれも同じ形)。
[Browser] ──HTTPS──► [Next.js on Vercel] https://<frontend-domain>
・/ → UI / Server Actions
・/api/* → rewrites() が ${API_URL} へ素通し
│ (ブラウザは踏まない裏口)
▼
[server-ts on VPS] Hono + better-auth
│
▼
[MySQL on VPS]
pnpm workspace で nextjs/ server-ts/ database/(+ 未使用の honox/)に分割している。
詳細は 01-architecture.md。
本リポジトリは公開である。隠す対象は文書である。
- 🔒 秘密情報は文書にもコードにも一切書かない。
.env*の値・BETTER_AUTH_SECRET・ DB 資格情報・session cookie の値・OAuth client secret。.env*は読まない・コミットしない。 - 🔒 API ドメイン・VPS の接続先・本番/開発の具体情報は書かない。 TLS・リバースプロキシ・ トンネルの設定・運用スクリプト・VPS の事業者名やスペックは、姿勢のみを記述する。 実値・実手順は gitignore 対象のローカルメモに置き、「存在すれば参照する」形にする。
- 🔒 PRD 本文には実ドメイン名を書かない。
<frontend-domain>/<api-domain>/<dev-host>/<root-domain>/<owner>のプレースホルダを用いる。 - ⚠ コード中に現れる公開フロントエンドの URL は許容する。 OG image の URL は絶対でなければ
ならず(クローラが相対 URL を解決できない)、
nextjs/src/app/layout.tsxの metadata に 実ドメインが入っている。これは既に公開されている情報であり、隠しても実益がない。 緩むのは公開フロントエンドの URL だけである。 API ドメイン・接続先・資格情報・env の値を 隠す線は一切変わらない。 - 🔒 一時的な情報は書かない。 「いま何件壊れている」「次に何をする」といった、時間とともに 変わる情報と、GitHub Issue の番号は書かない(→ 冒頭の注記)。
| 文書 | 内容 |
|---|---|
| 00-product.md | 目的 / 利用者の範囲 / 非目標 / 画面と操作 / 機能の実装状況 |
| 01-architecture.md | 単一オリジン構成 / インフラの置き場所とその理由 / ワークスペース分割 / gap |
| 02-auth.md | better-auth / GitHub OAuth / session と cookie / 防御の位置 / tasks.userId の意味論 |
| 03-data-model.md | DB スキーマとマイグレーション方式 / drizzle のバージョン指定 |
| 04-dev-environment.md | ローカル dev / リモート dev / dev セッション / env 構成 / 静的チェック |
| 05-deploy.md | Vercel / VPS / ghcr.io / 本番マイグレーション(姿勢のみ) |