トークン・認証
| 項目 | 方針 |
|---|
| セッション/リフレッシュトークン生成 | nanoid(暗号学的に安全な乱数ベース) |
| 認証コード生成 | crypto.getRandomValues による暗号学的に安全な6桁数字 |
| Cookie名 | __Host-session(Secure + Path=/ を強制する__Host-プレフィックス) |
データベース
| 項目 | 方針 |
|---|
| タイムスタンプ型 | 全テーブルで timestamptz(UTC保存) |
| 主キー | serial(auto increment) |
| ORM | Drizzle |
メール送信
| 項目 | 方針 |
|---|
| 開発環境 | コンソールログ出力 |
| 本番環境 | 外部メールサービス(TBD) |
| 失敗時 | リトライせずクライアントにエラーを返す |
データ管理
| 項目 | 方針 |
|---|
| 期限切れデータ掃除 | 1日1回のバッチ処理で auth_codes / sessions の期限切れレコードを削除 |
テスト
| 項目 | 方針 |
|---|
| テスト方針 | APIレベルのインテグレーションテスト(DB含む) |
| テストツール | Honoのテストヘルパーを利用 |
コーディング指針 — 何をどこに書くか
| 成果物 | 書くこと | 答える問い | 例 |
|---|
| コード | How | どう動くか? | 命名・構造・フローで振る舞いを自明にする |
| テスト | What | 何をするか? | 期限切れトークンを拒否する のように振る舞いを日本語で宣言する |
| コミットログ | Why | なぜこの変更? | トークン検証を修正: 30秒以上経過したトークンを拒否 (FR-003) |
| コードコメント | Why not | なぜ素直にやらない? | // キャッシュを使わないのはトークンローテーション時の競合を避けるため |
テスト名・コミットメッセージ・コードコメントは 日本語 で書く(識別子は英語)。
詳細は .claude/skills/coding-guidelines/SKILL.md を参照。