chore: initialize repository with project docs and tooling
- Add persistent docs: PRD, functional design, architecture, repository structure, development guidelines, milestones - Add brainstorming notes (docs/ideas/) - Configure tooling: package.json, tsconfig, eslint, prettier, vitest - Add opencode configuration (commands, skills, agents) - Add .gitignore for node_modules, .env, data/, backups/, build outputs
This commit is contained in:
870
docs/milestones.md
Normal file
870
docs/milestones.md
Normal file
@ -0,0 +1,870 @@
|
||||
# マイルストーン・タスク定義書 (Milestones & Tasks)
|
||||
|
||||
> 本書は `docs/product-requirements.md`・`docs/functional-design.md`・`docs/architecture.md`・`docs/repository-structure.md`・`docs/development-guidelines.md` に基づき、プロジェクト全体のマイルストーンと各マイルストーンのタスクを詳細に定義する。機能漏れを防ぐため、末尾に「機能カバレッジマトリクス」を設ける。
|
||||
|
||||
## マイルストーン全体構成
|
||||
|
||||
PRDの開発フェーズ(Phase 1〜5)を依存関係を考慮して15マイルストーンに展開する。
|
||||
|
||||
| MS | 名称 | 対応フェーズ | 主な成果物 | 前提 |
|
||||
|----|------|------------|-----------|------|
|
||||
| M1 | プロジェクト基盤セットアップ | Phase 1 | Next.js環境・設定ファイル・CI | - |
|
||||
| M2 | DB基盤(SQLラッパー・Migration) | Phase 1 | sqlite.ts・migrator.ts・初期スキーマ | M1 |
|
||||
| M3 | 認証・ユーザー管理 | Phase 1 | AuthService・UserRepository・ログイン画面 | M2 |
|
||||
| M4 | プロジェクト管理・メンバー管理 | Phase 1 | ProjectService・プロジェクト画面・レイアウト | M3 |
|
||||
| M5 | 通知・アクティビティログ基盤 | Phase 2 | NotificationService・ActivityLogService | M4 |
|
||||
| M6 | 掲示板 | Phase 2 | BoardService・掲示板画面 | M5 |
|
||||
| M7 | Markdownメモ | Phase 2 | NoteService・メモエディタ・Markdownプレビュー | M5 |
|
||||
| M8 | SSE基盤・チャット | Phase 3 | SseHub・ChatService・チャット画面 | M5 |
|
||||
| M9 | ToDo / Kanban | Phase 3 | TodoService・Kanbanボード | M8 |
|
||||
| M10 | ファイル共有・Lightbox | Phase 4 | FileStorageService・Lightbox | M4 |
|
||||
| M11 | カレンダー・マイルストーン | Phase 4 | ScheduleService・カレンダーUI・進捗計算 | M9 |
|
||||
| M12 | ミーティング管理・スケジュール重複 | Phase 5 | MeetingService・重複判定アルゴリズム | M11 |
|
||||
| M13 | 検索・ダッシュボード完成 | (横断) | 横断検索・個人/プロジェクトダッシュボード | M6-M12 |
|
||||
| M14 | バックアップ・管理者機能 | Phase 5 | BackupService・管理者画面 | M2 |
|
||||
| M15 | 全体テスト完成・品質担保 | (全体) | 全Unit/E2E/統合テスト成功 | M1-M14 |
|
||||
|
||||
### マイルストーン進行ルール
|
||||
|
||||
- 各マイルストーン完了時に `npm run lint`・`npm run typecheck` が成功すること
|
||||
- 各マイルストーンで実装したRepository/Service/画面には **Unit Test または E2E Test を必須で実装**する(`docs/development-guidelines.md` テスト実装の必須条件に準拠)
|
||||
- テスト未実装・未成功のマイルストーンは完了扱いとしない
|
||||
|
||||
---
|
||||
|
||||
## M1: プロジェクト基盤セットアップ
|
||||
|
||||
**目的**: Next.js 15 + TypeScript + Tailwind CSS の開発環境を構築し、全レイヤのディレクトリ構成と品質自動化ツールを整える。
|
||||
|
||||
**前提**: なし
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**基盤・設定**:
|
||||
- [ ] Next.js 15 プロジェクト初期化(App Router・TypeScript)
|
||||
- [ ] Tailwind CSS セットアップ(`app/globals.css`・`tailwind.config`)
|
||||
- [ ] `tsconfig.json` 設定(`@/*` パスエイリアス・strict モード)
|
||||
- [ ] `next.config.mjs` 設定
|
||||
- [ ] `.env.example` 作成(`SQLITE_PATH`・uploadsパス等)
|
||||
- [ ] ディレクトリ構成作成: `app/`・`lib/`・`repositories/`・`services/`・`components/`・`tests/`・`data/`・`backups/`
|
||||
|
||||
**品質自動化ツール**:
|
||||
- [ ] ESLint セットアップ(`eslint.config.js` Flat Config)
|
||||
- [ ] Prettier セットアップ(`.prettierrc`・`.prettierignore`)
|
||||
- [ ] Vitest セットアップ(`vitest.config.ts`)
|
||||
- [ ] Playwright セットアップ(`playwright.config.ts`)
|
||||
- [ ] Husky + lint-staged セットアップ(pre-commit で Lint・フォーマット・型チェック)
|
||||
- [ ] CI 設定(`.github/workflows/ci.yml`): Lint・型チェック・Unit Test・ビルド
|
||||
|
||||
**package.json スクリプト**:
|
||||
- [ ] `lint`・`format`・`typecheck`・`test`・`test:e2e`・`migrate`・`dev`・`build` スクリプト定義
|
||||
|
||||
**依存関係**:
|
||||
- [ ] 本体依存: next・react・react-dom・better-sqlite3・bcrypt・react-markdown・remark-gfm・rehype-sanitize・tailwindcss
|
||||
- [ ] dev依存: typescript・vitest・@playwright/test・eslint・prettier・husky・lint-staged・tsx
|
||||
|
||||
### 完了条件
|
||||
- [ ] `npm run dev` で開発サーバが起動する
|
||||
- [ ] `npm run lint`・`npm run typecheck`・`npm run build` が成功する
|
||||
- [ ] ディレクトリ構成が `repository-structure.md` に準拠している
|
||||
|
||||
---
|
||||
|
||||
## M2: DB基盤(SQLラッパー・Migration)
|
||||
|
||||
**目的**: SQLiteへの共通アクセス基盤とSQLファイルベースのMigration機構を実装する。
|
||||
|
||||
**前提**: M1
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Data層**:
|
||||
- [ ] `lib/db/sqlite.ts`: `SqliteDatabase` クラス実装
|
||||
- `query<T>` / `get<T>` / `execute` / `transaction<T>` / `close`
|
||||
- コンストラクタで `journal_mode=WAL`・`foreign_keys=ON` 設定
|
||||
- `getDb()` シングルトン(dbPath = `process.env.SQLITE_PATH ?? "./data/app.db"`)
|
||||
- [ ] `lib/db/migrator.ts`: `Migrator` クラス実装
|
||||
- `schema_migrations` テーブル作成
|
||||
- ファイル名順実行・実行済み再実行回避・1ファイル1トランザクション・失敗時ロールバック
|
||||
- [ ] `lib/db/migrations/001_initial.sql`: 全16テーブル + インデックス作成
|
||||
- users・projects・project_members・board_threads・board_comments・chat_messages・todo_columns・todo_items・file_assets・project_notes・milestones・calendar_events・meetings・meeting_members・notifications・activity_logs
|
||||
- `idx_project_notes_project_id`・`idx_project_notes_updated_at` インデックス
|
||||
|
||||
**型定義**:
|
||||
- [ ] `lib/types/` に全Entity型定義(User・Project・ProjectMember・BoardThread・BoardComment・ChatMessage・TodoColumn・TodoItem・FileAsset・ProjectNote・Milestone・CalendarEvent・Meeting・MeetingMember・Notification・ActivityLog・SchemaMigration)
|
||||
- 列挙型: `UserRole`・`UserStatus`・`ProjectStatus`・`ProjectMemberRole`・`BoardCategory`・`TodoPriority`・`MilestoneStatus`・`CalendarEventType`・`MeetingMemberStatus`・`NotificationType`
|
||||
|
||||
**Migration実行・状態確認**:
|
||||
- [ ] `lib/db/run-migrations.ts`: Migration実行スクリプト(`npm run migrate`)
|
||||
- [ ] API: `GET /api/admin/migrations`(Migration状態確認・管理者のみ)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/lib/db/sqlite.test.ts`(query/get/execute/transaction・WAL/外部キー設定)
|
||||
- [ ] **Unit Test**: `tests/unit/lib/db/migrator.test.ts`(ファイル名順実行・再実行回避・失敗時ロールバック)
|
||||
|
||||
### 完了条件
|
||||
- [ ] `npm run migrate` で初期スキーマが作成される
|
||||
- [ ] Migrationがファイル名順に実行され、実行済みは再実行されない
|
||||
- [ ] Migration失敗時にロールバックされる
|
||||
- [ ] Unit Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M3: 認証・ユーザー管理
|
||||
|
||||
**目的**: 独自ログイン方式による認証とユーザー管理(登録・ログイン・プロフィール・ロール・有効/無効)を実装する。
|
||||
|
||||
**前提**: M2
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/UserRepository.ts`: `findById`・`findByEmail`・`create`・`update`
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/AuthService.ts`: `register`・`login`・`logout`・`getCurrentUser`・`updateProfile`
|
||||
- [ ] パスワードハッシュ化(bcrypt・平文保存禁止)
|
||||
- [ ] ロール管理(system_admin・project_admin・member・guest)
|
||||
- [ ] アカウント有効/無効(status='inactive' はログイン不可)
|
||||
|
||||
**認証ヘルパ**:
|
||||
- [ ] `lib/auth/session.ts`: セッション読み書き
|
||||
- [ ] `lib/auth/getCurrentUser.ts`: リクエストから現在ユーザー解決
|
||||
|
||||
**バリデータ**:
|
||||
- [ ] `lib/validators/userValidator.ts`: 必須・メール形式・パスワード強度・名前長
|
||||
|
||||
**API**:
|
||||
- [ ] `POST /api/auth/register`(ユーザー登録)
|
||||
- [ ] `POST /api/auth/login`(ログイン・Set-Cookie)
|
||||
- [ ] `POST /api/auth/logout`(ログアウト)
|
||||
- [ ] `GET /api/auth/me`(現在のユーザー)
|
||||
- [ ] `PATCH /api/users/me`(プロフィール編集: 表示名・メール・アイコン画像)
|
||||
- [ ] 全Route Handler に `export const runtime = 'nodejs'` 明示
|
||||
- [ ] 認証ミドルウェア: 未ログイン時は保護画面をログイン画面へリダイレクト(401)
|
||||
|
||||
**画面**:
|
||||
- [ ] `app/login/page.tsx`(ログイン画面)
|
||||
- [ ] `app/profile/page.tsx`(ユーザープロフィール・アイコン画像設定・表示名設定)
|
||||
- [ ] `app/layout.tsx`(ルートレイアウト)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/UserRepository.test.ts`(CRUD・email一意・論理的確認)
|
||||
- [ ] **Unit Test**: `tests/unit/services/AuthService.test.ts`(登録・ログイン・ログアウト・プロフィール更新・無効アカウント拒否)
|
||||
- [ ] **E2E Test**: `tests/e2e/auth.spec.ts`(ログイン・ログアウト・未ログインの保護画面アクセス拒否)
|
||||
|
||||
### 完了条件
|
||||
- [ ] ユーザー登録・ログイン・ログアウトができる
|
||||
- [ ] パスワードがハッシュ化保存される
|
||||
- [ ] プロフィール・アイコン画像が編集できる
|
||||
- [ ] 無効アカウントはログイン不可
|
||||
- [ ] 未ログインで保護画面にアクセスできない
|
||||
- [ ] Unit Test・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M4: プロジェクト管理・メンバー管理
|
||||
|
||||
**目的**: プロジェクトの作成・編集・削除・アーカイブと、メンバー追加・削除・ロール設定を実装する。プロジェクトダッシュボードの骨組みも作る。
|
||||
|
||||
**前提**: M3
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/ProjectRepository.ts`: `findById`・`findByOwner`・`create`・`update`・`delete`
|
||||
- [ ] `repositories/ProjectMemberRepository.ts`: `findByProject`・`findByUser`・`add`・`remove`・`isMember`・`getRole`
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/ProjectService.ts`: `createProject`・`updateProject`・`addMember`・`removeMember`・`archiveProject`・`getDashboard`
|
||||
- [ ] 権限チェック: `isMember`・`getRole`(非参加者は403・プロジェクト管理者権限チェック)
|
||||
- [ ] プロジェクトステータス管理(active・on_hold・completed・archived)
|
||||
- [ ] メンバー追加時に通知(M5のNotificationService連携)
|
||||
|
||||
**バリデータ**:
|
||||
- [ ] `lib/validators/projectValidator.ts`: プロジェクト名1-200文字・説明文
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/projects`(自分の参加プロジェクト一覧)
|
||||
- [ ] `POST /api/projects`(プロジェクト作成)
|
||||
- [ ] `GET /api/projects/:projectId`(プロジェクト詳細/ダッシュボード)
|
||||
- [ ] `PATCH /api/projects/:projectId`(プロジェクト編集: 名前・説明・ステータス)
|
||||
- [ ] `DELETE /api/projects/:projectId`(プロジェクト削除)
|
||||
- [ ] `GET /api/projects/:projectId/members`(メンバー一覧)
|
||||
- [ ] `POST /api/projects/:projectId/members`(メンバー追加)
|
||||
- [ ] `DELETE /api/projects/:projectId/members/:userId`(メンバー削除)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/dashboard/page.tsx`(個人ダッシュボード骨組み: 参加プロジェクト一覧)
|
||||
- [ ] `app/projects/[projectId]/page.tsx`(プロジェクト概要/ダッシュボード骨組み)
|
||||
- [ ] `app/projects/[projectId]/members/page.tsx`(メンバー管理)
|
||||
- [ ] `app/projects/[projectId]/settings/page.tsx`(プロジェクト設定)
|
||||
- [ ] `components/layout/`(Header・Sidebar・ProjectNav)
|
||||
- [ ] `components/project/`(ProjectCard・DashboardWidget)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/ProjectRepository.test.ts`
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/ProjectMemberRepository.test.ts`(CRUD・UNIQUE制約・isMember・getRole)
|
||||
- [ ] **Unit Test**: `tests/unit/services/ProjectService.test.ts`(作成・編集・アーカイブ・メンバー追加/削除・権限チェック・プロジェクト分離)
|
||||
- [ ] **Integration Test**: `tests/integration/project-member-permission.test.ts`(非参加者はプロジェクトデータにアクセス不可)
|
||||
- [ ] **E2E Test**: `tests/e2e/project-management.spec.ts`(作成・編集・メンバー追加/削除・アーカイブ)
|
||||
|
||||
### 完了条件
|
||||
- [ ] プロジェクト作成・編集・削除・アーカイブができる
|
||||
- [ ] メンバー追加・削除・ロール設定ができる
|
||||
- [ ] 非参加者はプロジェクト情報にアクセスできない(403)
|
||||
- [ ] Unit・Integration・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M5: 通知・アクティビティログ基盤
|
||||
|
||||
**目的**: 通知生成とアクティビティログ記録の基盤Serviceを実装し、後続機能(掲示板・チャット・ToDo等)から利用可能にする。
|
||||
|
||||
**前提**: M4
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/NotificationRepository.ts`: 通知作成・未読一覧(ページネーション)・既読化
|
||||
- [ ] `repositories/ActivityLogRepository.ts`: ログ作成・プロジェクト別一覧(ページネーション)
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/NotificationService.ts`: `notifyOnEvent`・`resolveTargets`
|
||||
- 対象イベント: mention・todo_assigned・todo_due_soon・meeting_invited・board_commented・project_added・file_shared・note_updated
|
||||
- 対象ユーザー解決ロジック(メンション先・担当者・ミーティング参加者・掲示板投稿者・プロジェクトメンバー等)
|
||||
- [ ] `services/ActivityLogService.ts`: `logActivity`
|
||||
- 記録対象: todo_created・todo_updated・todo_completed・file_uploaded・board_posted・comment_added・note_created・note_updated・meeting_created・member_added・milestone_updated
|
||||
- [ ] 管理者操作もアクティビティログに記録
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/notifications`(未読通知一覧)
|
||||
- [ ] `POST /api/notifications/:id/read`(既読化)
|
||||
- [ ] `GET /api/projects/:projectId/activity`(アクティビティログ一覧)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/notifications/page.tsx`(通知一覧画面)※共通画面
|
||||
- [ ] `components/notifications/NotificationList.tsx`・`NotificationBadge.tsx`(ヘッダの未読バッジ)
|
||||
- [ ] `app/projects/[projectId]/activity/page.tsx`(プロジェクト別アクティビティログ画面)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/NotificationRepository.test.ts`
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/ActivityLogRepository.test.ts`
|
||||
- [ ] **Unit Test**: `tests/unit/services/NotificationService.test.ts`(正しいユーザーへ通知作成・resolveTargets)
|
||||
- [ ] **Unit Test**: `tests/unit/services/ActivityLogService.test.ts`(ログ記録・プロジェクト分離)
|
||||
|
||||
### 完了条件
|
||||
- [ ] 各イベント種別で通知が正しいユーザーに作成される
|
||||
- [ ] 変更操作がアクティビティログに記録される
|
||||
- [ ] 通知の既読化ができる
|
||||
- [ ] Unit Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M6: 掲示板
|
||||
|
||||
**目的**: プロジェクト単位の非リアルタイム情報共有(スレッド・コメント・カテゴリ・ピン留め・重要マーク・既読・検索)を実装する。
|
||||
|
||||
**前提**: M5
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/BoardRepository.ts`: スレッドCRUD・コメントCRUD・検索・ページネーション(`deleted_at IS NULL` 必須)
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/BoardService.ts`: スレッド作成/編集/削除・コメント作成/編集/削除
|
||||
- [ ] 権限チェック(プロジェクト参加者のみ)
|
||||
- [ ] カテゴリ分類(notice・spec・minutes・question・decision・trouble・memo)
|
||||
- [ ] ピン留め・重要マーク
|
||||
- [ ] 既読管理
|
||||
- [ ] コメント追加時に通知(`board_commented` → 投稿者)・アクティビティログ記録(`board_posted`・`comment_added`)
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/projects/:projectId/board/threads`(一覧・ページネーション・検索)
|
||||
- [ ] `POST /api/projects/:projectId/board/threads`(作成)
|
||||
- [ ] `GET /api/projects/:projectId/board/threads/:threadId`(詳細)
|
||||
- [ ] `PATCH /api/projects/:projectId/board/threads/:threadId`(編集)
|
||||
- [ ] `DELETE /api/projects/:projectId/board/threads/:threadId`(削除)
|
||||
- [ ] `POST /api/projects/:projectId/board/threads/:threadId/comments`(コメント作成)
|
||||
- [ ] `PATCH /api/projects/:projectId/board/comments/:commentId`(コメント編集)
|
||||
- [ ] `DELETE /api/projects/:projectId/board/comments/:commentId`(コメント削除)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/projects/[projectId]/board/page.tsx`(掲示板一覧)
|
||||
- [ ] スレッド詳細・作成/編集フォーム
|
||||
- [ ] `components/board/`(ThreadList・ThreadForm・CommentList)
|
||||
- [ ] Markdown本文表示(react-markdown + rehype-sanitize)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/BoardRepository.test.ts`(CRUD・論理削除非取得・プロジェクト分離・検索)
|
||||
- [ ] **Unit Test**: `tests/unit/services/BoardService.test.ts`(権限チェック・カテゴリ・ピン留め・通知・アクティビティログ)
|
||||
- [ ] **E2E Test**: `tests/e2e/board.spec.ts`(スレッド作成・編集・コメント・検索)
|
||||
|
||||
### 完了条件
|
||||
- [ ] スレッド・コメントのCRUDができる
|
||||
- [ ] カテゴリ・ピン留め・重要マーク・既読・検索ができる
|
||||
- [ ] 論理削除済みデータが通常取得に含まれない
|
||||
- [ ] Unit・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M7: Markdownメモ
|
||||
|
||||
**目的**: プロジェクトごとのMarkdownメモ(作成・編集・プレビュー・タグ・ピン留め・検索・添付・関連付け)を実装する。
|
||||
|
||||
**前提**: M5
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/ProjectNoteRepository.ts`: メモCRUD・検索・ピン留め(`deleted_at IS NULL`・インデックス活用)
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/NoteService.ts`: メモ作成/編集/削除
|
||||
- [ ] 権限チェック
|
||||
- [ ] タイトル・タグ・ピン留め
|
||||
- [ ] 作成者・最終更新者・更新日時管理
|
||||
- [ ] ファイル添付・関連ToDo・関連ミーティング設定
|
||||
- [ ] 更新時に通知(`note_updated`)・アクティビティログ(`note_created`・`note_updated`)
|
||||
|
||||
**Markdownレンダリング(セキュリティ)**:
|
||||
- [ ] react-markdown + remark-gfm + rehype-sanitize でプレビュー
|
||||
- [ ] HTML直接入力無効化・危険URLスキーム(`javascript:`等)除外
|
||||
- [ ] 対応記法: 見出し・箇条書き・番号リスト・チェックリスト・コードブロック・テーブル・リンク・画像・引用
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/projects/:projectId/notes`(一覧・検索・ページネーション)
|
||||
- [ ] `POST /api/projects/:projectId/notes`(作成)
|
||||
- [ ] `GET /api/projects/:projectId/notes/:noteId`(詳細)
|
||||
- [ ] `PATCH /api/projects/:projectId/notes/:noteId`(編集)
|
||||
- [ ] `DELETE /api/projects/:projectId/notes/:noteId`(削除)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/projects/[projectId]/notes/page.tsx`(メモ一覧)
|
||||
- [ ] メモエディタ・プレビュー画面
|
||||
- [ ] `components/notes/`(NoteEditor・MarkdownPreview)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/ProjectNoteRepository.test.ts`(CRUD・検索・ピン留め・論理削除・プロジェクト分離)
|
||||
- [ ] **Unit Test**: `tests/unit/services/NoteService.test.ts`(権限・タグ・ピン留め・関連付け・通知・アクティビティログ)
|
||||
- [ ] **E2E Test**: `tests/e2e/markdown-notes.spec.ts`(作成・編集・プレビュー・ピン留め・検索・削除)
|
||||
|
||||
### 完了条件
|
||||
- [ ] MarkdownメモのCRUD・プレビューができる
|
||||
- [ ] タグ・ピン留め・検索ができる
|
||||
- [ ] MarkdownがサニタイズされHTML直接入力が無効化される
|
||||
- [ ] Unit・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M8: SSE基盤・チャット
|
||||
|
||||
**目的**: SSE配信基盤(SseHub)とプロジェクト別リアルタイムチャット(送信・編集・削除・メンション・リアクション・既読/未読・検索)を実装する。
|
||||
|
||||
**前提**: M5
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**SSE基盤**:
|
||||
- [ ] `lib/sse/hub.ts`: `SseHub` クラス(`addClient`・`removeClient`・`broadcast`)
|
||||
- プロジェクト単位のクライアント集合管理
|
||||
- 当該プロジェクトのみ配信(他プロジェクトへ漏れさせない)
|
||||
- [ ] SSEエンドポイント: `GET /api/projects/:projectId/chat/stream`
|
||||
- [ ] クライアント側の自動再接続対応
|
||||
- [ ] SSEイベント種別: `chat.message.created`・`chat.message.updated`・`chat.message.deleted`・`todo.updated`・`file.uploaded`・`meeting.created`・`note.updated`・`notification.created`
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/ChatRepository.ts`: メッセージCRUD・ページネーション・検索(`deleted_at IS NULL`)
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/ChatService.ts`: `sendMessage`・`editMessage`・`deleteMessage`・`getHistory`
|
||||
- [ ] 権限チェック(プロジェクト参加者のみ)
|
||||
- [ ] メンション検出 → 通知(`mention`)
|
||||
- [ ] SSE配信(`chat.message.created/updated/deleted`)
|
||||
- [ ] リアクション・既読/未読・添付ファイル
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/projects/:projectId/chat/messages`(履歴・ページネーション・検索)
|
||||
- [ ] `POST /api/projects/:projectId/chat/messages`(送信)
|
||||
- [ ] `PATCH /api/projects/:projectId/chat/messages/:messageId`(編集)
|
||||
- [ ] `DELETE /api/projects/:projectId/chat/messages/:messageId`(削除)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/projects/[projectId]/chat/page.tsx`(チャット画面)
|
||||
- [ ] `components/chat/`(ChatWindow・MessageInput・MessageList)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/lib/sse/hub.test.ts`(クライアント管理・プロジェクト別配信・配信スコープ)
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/ChatRepository.test.ts`(CRUD・検索・論理削除・プロジェクト分離)
|
||||
- [ ] **Unit Test**: `tests/unit/services/ChatService.test.ts`(送信・編集・削除・メンション通知・SSE配信呼出・権限)
|
||||
- [ ] **Integration Test**: `tests/integration/chat-sse-broadcast.test.ts`(送信→SSE配信)
|
||||
- [ ] **E2E Test**: `tests/e2e/chat-sse.spec.ts`(送信・別コンテキストでSSEリアルタイム受信・編集・削除)
|
||||
|
||||
### 完了条件
|
||||
- [ ] メッセージ送信・編集・削除ができる
|
||||
- [ ] SSEで別クライアントにリアルタイム配信される
|
||||
- [ ] 接続切断時に自動再接続される
|
||||
- [ ] メンション・リアクション・既読/未読・検索ができる
|
||||
- [ ] Unit・Integration・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M9: ToDo / Kanban
|
||||
|
||||
**目的**: プロジェクトごとのタスクをKanban形式で管理する(カラム・タスク・ドラッグ&ドロップ・担当者・期限・優先度・ラベル・チェックリスト・完了・マイルストーン紐づけ・カレンダー表示)。
|
||||
|
||||
**前提**: M8
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/TodoRepository.ts`: カラムCRUD・タスクCRUD・並び替え(orderIndex再計算)・ページネーション(`deleted_at IS NULL`)
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/TodoService.ts`: カラム作成/編集/削除/並び替え・タスク作成/編集/削除/移動
|
||||
- [ ] 権限チェック
|
||||
- [ ] 担当者・期限・優先度(low/normal/high)・ラベル設定
|
||||
- [ ] チェックリスト・コメント・添付ファイル
|
||||
- [ ] 完了状態管理(`completedAt`)
|
||||
- [ ] マイルストーン紐づけ
|
||||
- [ ] 担当者割り当て時に通知(`todo_assigned`)・アクティビティログ(`todo_created`・`todo_updated`・`todo_completed`)
|
||||
- [ ] SSE配信(`todo.updated`)
|
||||
- [ ] 標準カラム初期生成: Backlog・To Do・In Progress・Review・Done
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/projects/:projectId/todos/columns`(カラム一覧)
|
||||
- [ ] `POST /api/projects/:projectId/todos/columns`(カラム作成)
|
||||
- [ ] `PATCH /api/projects/:projectId/todos/columns/:columnId`(カラム編集/並び替え)
|
||||
- [ ] `DELETE /api/projects/:projectId/todos/columns/:columnId`(カラム削除)
|
||||
- [ ] `GET /api/projects/:projectId/todos/items`(タスク一覧)
|
||||
- [ ] `POST /api/projects/:projectId/todos/items`(タスク作成)
|
||||
- [ ] `PATCH /api/projects/:projectId/todos/items/:itemId`(タスク編集/移動)
|
||||
- [ ] `DELETE /api/projects/:projectId/todos/items/:itemId`(タスク削除)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/projects/[projectId]/todos/page.tsx`(Kanbanボード)
|
||||
- [ ] `components/todo/`(KanbanBoard・KanbanColumn・TodoCard)ドラッグ&ドロップ対応
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/TodoRepository.test.ts`(CRUD・並び替え・論理削除・プロジェクト分離)
|
||||
- [ ] **Unit Test**: `tests/unit/services/TodoService.test.ts`(作成・編集・移動・完了・担当者通知・アクティビティログ・権限)
|
||||
- [ ] **E2E Test**: `tests/e2e/todo-kanban.spec.ts`(カラム作成・タスク作成・編集・別カラム移動・担当者/期限設定・完了)
|
||||
|
||||
### 完了条件
|
||||
- [ ] Kanbanボードが表示される(標準カラム5つ)
|
||||
- [ ] カラム・タスクのCRUD・ドラッグ&ドロップ移動ができる
|
||||
- [ ] 担当者・期限・優先度・ラベル・チェックリスト・コメントが設定できる
|
||||
- [ ] 完了タスクがDoneカラムに表示される
|
||||
- [ ] Unit・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M10: ファイル共有・Lightbox
|
||||
|
||||
**目的**: プロジェクト内ファイルのアップロード・一覧・フォルダ管理・Lightbox閲覧・PDFプレビュー・紐づけを実装する。
|
||||
|
||||
**前提**: M4
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/FileRepository.ts`: ファイルメタCRUD・フォルダ管理(`deleted_at IS NULL`)
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/FileStorageService.ts`: `upload`・`getDownloadStream`・`delete`
|
||||
- ローカルFS保存: `data/uploads/<projectId>/<uuid>.<ext>`
|
||||
- MIMEタイプチェック・ファイル名サニタイズ・保存名一意化
|
||||
- ファイルアクセス権限チェック(プロジェクト参加者のみ)
|
||||
- アクティビティログ(`file_uploaded`)・通知(`file_shared`)・SSE配信(`file.uploaded`)
|
||||
|
||||
**ファイル紐づけ**:
|
||||
- [ ] ファイルとToDo・掲示板投稿・ミーティング・Markdownメモの紐づけ
|
||||
- [ ] ファイルコメント
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/projects/:projectId/files`(一覧・ページネーション)
|
||||
- [ ] `POST /api/projects/:projectId/files`(アップロード・multipart)
|
||||
- [ ] `GET /api/files/:fileId/download`(ダウンロード・権限チェック)
|
||||
- [ ] `DELETE /api/files/:fileId`(削除)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/projects/[projectId]/files/page.tsx`(ファイル一覧)
|
||||
- [ ] `components/files/`(FileList・Uploader・Lightbox)
|
||||
- 画像Lightbox表示・PDFプレビュー
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/FileRepository.test.ts`
|
||||
- [ ] **Unit Test**: `tests/unit/services/FileStorageService.test.ts`(アップロード・MIMEチェック・保存名一意化・権限・削除・アクティビティログ)
|
||||
- [ ] **E2E Test**: `tests/e2e/file-sharing.spec.ts`(アップロード・一覧・Lightbox閲覧・PDFプレビュー・削除)
|
||||
|
||||
### 完了条件
|
||||
- [ ] ファイルアップロード・一覧・ダウンロード・削除ができる
|
||||
- [ ] 画像をLightboxで閲覧できる・PDFをプレビューできる
|
||||
- [ ] MIMEチェック・権限チェックが機能する
|
||||
- [ ] ファイル紐づけ・コメントができる
|
||||
- [ ] Unit・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M11: カレンダー・マイルストーン
|
||||
|
||||
**目的**: カレンダー(月/週/日/リスト表示・各種イベント表示・フィルター)とマイルストーン管理(CRUD・進捗率自動計算)を実装する。
|
||||
|
||||
**前提**: M9
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/CalendarRepository.ts`: イベントCRUD・期間検索(`deleted_at IS NULL`)
|
||||
- [ ] `repositories/MilestoneRepository.ts`: マイルストーンCRUD・関連ToDo取得(`deleted_at IS NULL`)
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/ScheduleService.ts`: `getCalendarEvents`(期間・フィルター)
|
||||
- 表示対象: マイルストーン・デッドライン・ToDo開始日・ToDo期限・ミーティング・任意イベント
|
||||
- メンバー別フィルター・種別フィルター
|
||||
- [ ] マイルストーン管理Service: 作成/編集/削除・期限・説明文・関連ToDo紐づけ
|
||||
- [ ] **進捗率自動計算アルゴリズム**: 関連ToDoの完了率から0-100を算出
|
||||
- [ ] 完了状態管理・カレンダー表示
|
||||
- [ ] アクティビティログ(`milestone_updated`)
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/projects/:projectId/calendar/events`(イベント一覧・期間・フィルタ)
|
||||
- [ ] `POST /api/projects/:projectId/calendar/events`(イベント作成)
|
||||
- [ ] `PATCH /api/projects/:projectId/calendar/events/:eventId`(編集)
|
||||
- [ ] `DELETE /api/projects/:projectId/calendar/events/:eventId`(削除)
|
||||
- [ ] `GET /api/projects/:projectId/milestones`(マイルストーン一覧)
|
||||
- [ ] `POST /api/projects/:projectId/milestones`(作成)
|
||||
- [ ] `PATCH /api/projects/:projectId/milestones/:id`(編集)
|
||||
- [ ] `GET /api/projects/:projectId/milestones/:id/progress`(進捗率取得)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/projects/[projectId]/calendar/page.tsx`(カレンダー: 月/週/日/リスト表示)
|
||||
- [ ] `app/projects/[projectId]/milestones/page.tsx`(マイルストーン一覧・進捗バー)
|
||||
- [ ] `components/calendar/`(CalendarView・EventBadge)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/CalendarRepository.test.ts`
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/MilestoneRepository.test.ts`
|
||||
- [ ] **Unit Test**: `tests/unit/services/ScheduleService.test.ts`(期間検索・フィルタ・種別別取得)
|
||||
- [ ] **Unit Test**: 進捗率計算アルゴリズム(`calcMilestoneProgress`・ToDo0件時0%・完了率計算)
|
||||
- [ ] **E2E Test**: `tests/e2e/calendar.spec.ts`(ToDo期限・マイルストーン・ミーティング表示・イベント作成/編集)
|
||||
|
||||
### 完了条件
|
||||
- [ ] 月/週/日/リスト表示ができる
|
||||
- [ ] マイルストーン・デッドライン・ToDo期限・ミーティングが表示される
|
||||
- [ ] イベントCRUD・フィルターができる
|
||||
- [ ] マイルストーン進捗率が自動計算される
|
||||
- [ ] Unit・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M12: ミーティング管理・スケジュール重複チェック
|
||||
|
||||
**目的**: ミーティングCRUD・参加メンバー設定・アジェンダ/議事録・関連付け・スケジュール重複判定を実装する。
|
||||
|
||||
**前提**: M11
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Repository**:
|
||||
- [ ] `repositories/MeetingRepository.ts`: ミーティングCRUD・meeting_members管理(`deleted_at IS NULL`)
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/MeetingService.ts`: `createMeeting`・`updateMeeting`・`deleteMeeting`・`checkScheduleConflicts`・`updateMinutes`
|
||||
- [ ] 権限チェック
|
||||
- [ ] タイトル・説明・開始/終了日時・参加メンバー・場所・ミーティングURL設定
|
||||
- [ ] アジェンダ・議事録(Markdown)
|
||||
- [ ] 関連ToDo・関連ファイル・関連掲示板投稿・関連Markdownメモ設定
|
||||
- [ ] カレンダー表示連携
|
||||
- [ ] 参加者招待通知(`meeting_invited`)・アクティビティログ(`meeting_created`)・SSE配信(`meeting.created`)
|
||||
|
||||
**スケジュール重複判定アルゴリズム**:
|
||||
- [ ] `checkScheduleConflicts`: 選択メンバーの予定重複を検出
|
||||
- 判定対象1: 他のミーティング(meeting_members経由・時間重複)
|
||||
- 判定対象2: カレンダーイベント(時間重複)
|
||||
- 判定対象3: 期限の近い重要タスク(priority='high'・dueDate ±3日以内)
|
||||
- 時間重複判定: `NOT (existing.end <= new.start OR existing.start >= new.end)`
|
||||
- 重複があれば警告返却(作成自体はブロックしない)
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/projects/:projectId/meetings`(一覧)
|
||||
- [ ] `POST /api/projects/:projectId/meetings`(作成・conflicts返却)
|
||||
- [ ] `PATCH /api/projects/:projectId/meetings/:id`(編集)
|
||||
- [ ] `POST /api/projects/:projectId/meetings/check`(予定重複チェックのみ)
|
||||
|
||||
**画面・コンポーネント**:
|
||||
- [ ] `app/projects/[projectId]/meetings/page.tsx`(ミーティング一覧)
|
||||
- [ ] ミーティング作成フォーム・アジェンダ/議事録編集
|
||||
- [ ] `components/meetings/`(MeetingForm・ConflictWarning)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/repositories/MeetingRepository.test.ts`(CRUD・meeting_members・UNIQUE制約・論理削除・プロジェクト分離)
|
||||
- [ ] **Unit Test**: `tests/unit/services/MeetingService.test.ts`(作成・編集・議事録更新・参加者通知・アクティビティログ・権限)
|
||||
- [ ] **Unit Test**: スケジュール重複判定アルゴリズム(他ミーティング重複・カレンダーイベント重複・重要タスク検出・時間重複ロジック・excludeMeetingId)
|
||||
- [ ] **E2E Test**: `tests/e2e/meetings.spec.ts`(作成・参加メンバー設定・予定重複警告・アジェンダ/議事録・関連付け)
|
||||
|
||||
### 完了条件
|
||||
- [ ] ミーティングCRUD・参加メンバー設定ができる
|
||||
- [ ] アジェンダ・議事録が入力できる
|
||||
- [ ] 関連付け(ToDo/ファイル/掲示板/メモ)ができる
|
||||
- [ ] 参加メンバーの予定重複が画面上で警告される
|
||||
- [ ] Unit・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M13: 検索・ダッシュボード完成
|
||||
|
||||
**目的**: プロジェクト内横断検索と、個人/プロジェクトダッシュボードの全項目表示を完成させる。
|
||||
|
||||
**前提**: M6-M12(各データソース完成後)
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**横断検索**:
|
||||
- [ ] 検索対象: 掲示板・チャット・ToDo・ファイル名・カレンダーイベント・ミーティング・議事録・マイルストーン・Markdownメモ
|
||||
- [ ] 検索条件: キーワード・投稿者・担当者・日付・種別・プロジェクト・タグ
|
||||
- [ ] API: `GET /api/projects/:projectId/search`
|
||||
- [ ] 画面: 検索結果一覧
|
||||
|
||||
**個人ダッシュボード完成**:
|
||||
- [ ] 自分の参加プロジェクト
|
||||
- [ ] 自分の未完了ToDo
|
||||
- [ ] 今日の予定
|
||||
- [ ] 近日中のミーティング
|
||||
- [ ] 未読通知
|
||||
- [ ] 期限切れタスク
|
||||
- [ ] 最近のアクティビティ
|
||||
- [ ] `app/dashboard/page.tsx` 完成版
|
||||
|
||||
**プロジェクトダッシュボード完成**:
|
||||
- [ ] プロジェクト概要
|
||||
- [ ] 進行中ToDo
|
||||
- [ ] 期限が近いToDo(7日以内)
|
||||
- [ ] 最新チャット(直近5件)
|
||||
- [ ] 最新掲示板(ピン留め優先・直近5件)
|
||||
- [ ] 最新Markdownメモ(ピン留め優先・直近5件)
|
||||
- [ ] 最近のファイル(直近5件)
|
||||
- [ ] 次回ミーティング(直近1件)
|
||||
- [ ] マイルストーン進捗(進捗バー付き)
|
||||
- [ ] 最近のアクティビティ(直近10件)
|
||||
- [ ] `app/projects/[projectId]/page.tsx` 完成版
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: 検索ロジック(各リソース横断検索・フィルタ絞り込み)
|
||||
- [ ] **Unit Test**: ダッシュボード集計ロジック(未完了ToDo・期限近いToDo・今日の予定等)
|
||||
- [ ] **E2E Test**: ダッシュボード表示確認(個人・プロジェクト各項目の表示)
|
||||
|
||||
### 完了条件
|
||||
- [ ] 横断検索で全リソースが検索できる
|
||||
- [ ] 検索フィルターが機能する
|
||||
- [ ] 個人ダッシュボードの全項目が表示される
|
||||
- [ ] プロジェクトダッシュボードの全項目が表示される
|
||||
- [ ] Unit・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M14: バックアップ・管理者機能
|
||||
|
||||
**目的**: 管理者によるバックアップ作成(DB+uploads ZIP化)・一覧・ダウンロードとMigration状態確認画面を実装する。
|
||||
|
||||
**前提**: M2
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Service**:
|
||||
- [ ] `services/BackupService.ts`: `createBackup`・`listBackups`・`downloadBackup`
|
||||
- SQLite DBファイル + uploadsディレクトリをZIP化
|
||||
- 保存先: `backups/backup-<timestamp>.zip`
|
||||
- 管理者権限チェック(`role='system_admin'` のみ)
|
||||
- 管理者操作をアクティビティログに記録
|
||||
|
||||
**API**:
|
||||
- [ ] `GET /api/admin/backups`(バックアップ一覧・管理者のみ)
|
||||
- [ ] `POST /api/admin/backups`(バックアップ作成・管理者のみ)
|
||||
- [ ] `GET /api/admin/backups/:filename`(ダウンロード・管理者のみ)
|
||||
- [ ] `GET /api/admin/migrations`(Migration状態確認・管理者のみ)※M2でAPI実装済なら画面連携
|
||||
|
||||
**画面**:
|
||||
- [ ] `app/admin/backups/page.tsx`(管理者バックアップ画面: 作成・一覧・ダウンロード)
|
||||
- [ ] Migration状態確認画面(管理者)
|
||||
|
||||
### テスト
|
||||
- [ ] **Unit Test**: `tests/unit/services/BackupService.test.ts`(バックアップ作成・ZIP化・一覧・ダウンロード・権限チェック)
|
||||
- [ ] **E2E Test**: `tests/e2e/backup.spec.ts`(作成・一覧表示・ダウンロード)
|
||||
|
||||
### 完了条件
|
||||
- [ ] 管理者がバックアップを作成できる
|
||||
- [ ] バックアップ一覧が表示される
|
||||
- [ ] バックアップファイルをダウンロードできる
|
||||
- [ ] 非管理者はアクセスできない(403)
|
||||
- [ ] Migration状態が確認できる
|
||||
- [ ] Unit・E2E Test が成功する
|
||||
|
||||
---
|
||||
|
||||
## M15: 全体テスト完成・品質担保
|
||||
|
||||
**目的**: 全マイルストールのテストを統合し、カバレッジ目標と成功条件/受け入れ要件を全項目クリアする。
|
||||
|
||||
**前提**: M1-M14
|
||||
|
||||
### 実装タスク
|
||||
|
||||
**Unit Test 完成**:
|
||||
- [ ] SQLラッパー・Migration・全13Repository・全12Service のUnit Test 完成
|
||||
- [ ] 権限チェック・バリデーション・スケジュール重複判定・通知作成ロジック・アクティビティログ作成ロジック・マイルストーン進捗計算 のUnit Test 完成
|
||||
- [ ] Repository/Service層カバレッジ 80%以上
|
||||
- [ ] `npm test` 全件成功
|
||||
|
||||
**統合テスト完成**:
|
||||
- [ ] `tests/integration/auth-flow.test.ts`(登録→ログイン→保護画面アクセス)
|
||||
- [ ] `tests/integration/project-member-permission.test.ts`(プロジェクト作成→メンバー追加→権限分離)
|
||||
- [ ] `tests/integration/chat-sse-broadcast.test.ts`(チャット送信→SSE配信)
|
||||
|
||||
**E2E Test 完成**:
|
||||
- [ ] 全12シナリオ完成: auth・project-management・board・chat-sse・todo-kanban・file-sharing・markdown-notes・calendar・meetings・notifications・activity-log・backup
|
||||
- [ ] 主要フローカバレッジ 100%
|
||||
- [ ] `npm run test:e2e` 全件成功
|
||||
|
||||
**品質ゲート**:
|
||||
- [ ] `npm run lint` エラーなし
|
||||
- [ ] `npm run typecheck` 成功
|
||||
- [ ] `npm run build` 成功
|
||||
|
||||
**受け入れ要件確認**:
|
||||
- [ ] PRD「成功条件/受け入れ要件」の全項目を確認(ユーザーログイン〜バックアップ作成・Unit Test・E2E Test 全成功まで)
|
||||
|
||||
### 完了条件
|
||||
- [ ] `npm test` でUnit Testが全件成功する
|
||||
- [ ] `npm run test:e2e` でPlaywright E2E Testが全件成功する
|
||||
- [ ] 統合テストが全件成功する
|
||||
- [ ] Lint・型チェック・ビルドが成功する
|
||||
- [ ] PRDの受け入れ要件を全項目クリアする
|
||||
|
||||
---
|
||||
|
||||
## 機能カバレッジマトリクス
|
||||
|
||||
PRDの機能要件(16機能)+DB基盤+テストがどのマイルストーンで実装されるかを示す。機能漏れがないことを保証する。
|
||||
|
||||
| 機能 | PRD優先度 | 実装MS | 完了確認MS | 備考 |
|
||||
|------|----------|--------|-----------|------|
|
||||
| DB基盤(SQLラッパー・Migration・Repository基盤) | P0 | M2 | M2 | 全16テーブル+schema_migrations |
|
||||
| ユーザー管理(登録・ログイン・プロフィール・ロール・有効/無効) | P0 | M3 | M3 | bcrypt・独自ログイン |
|
||||
| プロジェクト管理(作成・編集・削除・アーカイブ・ステータス) | P0 | M4 | M4 | |
|
||||
| プロジェクトメンバー管理(追加・削除・ロール) | P0 | M4 | M4 | |
|
||||
| 通知(アプリ内・未読一覧・既読化・8イベント) | P0 | M5 | M5 | 基盤Service・各機能から連携 |
|
||||
| アクティビティログ(11操作記録・時系列表示) | P1 | M5 | M5 | 基盤Service・各機能から連携 |
|
||||
| 掲示板(スレッド・コメント・カテゴリ・ピン留め・重要・既読・検索) | P0 | M6 | M6 | |
|
||||
| Markdownメモ(CRUD・プレビュー・タグ・ピン留め・検索・添付・関連付け) | P0 | M7 | M7 | サニタイズ必須 |
|
||||
| SSE基盤(SseHub・プロジェクト別配信・自動再接続・8イベント) | P0 | M8 | M8 | |
|
||||
| チャット(送信・編集・削除・メンション・リアクション・既読/未読・検索) | P0 | M8 | M8 | SSEリアルタイム |
|
||||
| ToDo / Kanban(カラム・タスク・D&D・担当・期限・優先度・ラベル・チェックリスト・完了・マイルストーン紐づけ) | P0 | M9 | M9 | |
|
||||
| ファイル共有(アップロード・一覧・フォルダ・Lightbox・PDF・コメント・紐づけ・MIMEチェック) | P0 | M10 | M10 | ローカルFS保存 |
|
||||
| カレンダー(月/週/日/リスト・イベントCRUD・フィルタ) | P0 | M11 | M11 | |
|
||||
| マイルストーン管理(CRUD・期限・関連ToDo・進捗率自動計算・完了) | P1 | M11 | M11 | |
|
||||
| ミーティング管理(CRUD・メンバー・アジェンダ/議事録・関連付け・カレンダー連携) | P0 | M12 | M12 | |
|
||||
| スケジュール重複チェック(他ミーティング・カレンダーイベント・重要タスク) | P0 | M12 | M12 | 警告表示(ブロックしない) |
|
||||
| 検索(横断検索・7フィルタ条件) | P1 | M13 | M13 | 9リソース横断 |
|
||||
| 個人ダッシュボード(7項目) | P0 | M4(骨組み) | M13 | 全項目完成はM13 |
|
||||
| プロジェクトダッシュボード(9項目) | P0 | M4(骨組み) | M13 | 全項目完成はM13 |
|
||||
| バックアップ(DB+uploads ZIP・一覧・ダウンロード・Migration状態確認) | P1 | M14 | M14 | 管理者のみ |
|
||||
|
||||
### Repository カバレッジ(13クラス)
|
||||
|
||||
| Repository | 実装MS | Unit Test MS |
|
||||
|-----------|--------|-------------|
|
||||
| UserRepository | M3 | M3 |
|
||||
| ProjectRepository | M4 | M4 |
|
||||
| ProjectMemberRepository | M4 | M4 |
|
||||
| NotificationRepository | M5 | M5 |
|
||||
| ActivityLogRepository | M5 | M5 |
|
||||
| BoardRepository | M6 | M6 |
|
||||
| ProjectNoteRepository | M7 | M7 |
|
||||
| ChatRepository | M8 | M8 |
|
||||
| TodoRepository | M9 | M9 |
|
||||
| FileRepository | M10 | M10 |
|
||||
| CalendarRepository | M11 | M11 |
|
||||
| MilestoneRepository | M11 | M11 |
|
||||
| MeetingRepository | M12 | M12 |
|
||||
|
||||
### Service カバレッジ(12クラス)
|
||||
|
||||
| Service | 実装MS | Unit Test MS |
|
||||
|---------|--------|-------------|
|
||||
| AuthService | M3 | M3 |
|
||||
| ProjectService | M4 | M4 |
|
||||
| NotificationService | M5 | M5 |
|
||||
| ActivityLogService | M5 | M5 |
|
||||
| BoardService | M6 | M6 |
|
||||
| NoteService | M7 | M7 |
|
||||
| ChatService | M8 | M8 |
|
||||
| TodoService | M9 | M9 |
|
||||
| FileStorageService | M10 | M10 |
|
||||
| ScheduleService | M11 | M11 |
|
||||
| (マイルストーン進捗計算) | M11 | M11 |
|
||||
| MeetingService | M12 | M12 |
|
||||
| (スケジュール重複判定) | M12 | M12 |
|
||||
| BackupService | M14 | M14 |
|
||||
|
||||
### E2E Test カバレッジ(12シナリオ)
|
||||
|
||||
| E2Eシナリオ | 実装MS |
|
||||
|------------|--------|
|
||||
| auth.spec.ts | M3 |
|
||||
| project-management.spec.ts | M4 |
|
||||
| board.spec.ts | M6 |
|
||||
| markdown-notes.spec.ts | M7 |
|
||||
| chat-sse.spec.ts | M8 |
|
||||
| todo-kanban.spec.ts | M9 |
|
||||
| file-sharing.spec.ts | M10 |
|
||||
| calendar.spec.ts | M11 |
|
||||
| meetings.spec.ts | M12 |
|
||||
| notifications.spec.ts | M5(通知一覧)/ 各MS(イベント発生時) |
|
||||
| activity-log.spec.ts | M5(一覧)/ 各MS(記録時) |
|
||||
| backup.spec.ts | M14 |
|
||||
|
||||
### 統合テスト カバレッジ(3シナリオ)
|
||||
|
||||
| 統合テスト | 実装MS |
|
||||
|----------|--------|
|
||||
| auth-flow.test.ts | M3 |
|
||||
| project-member-permission.test.ts | M4 |
|
||||
| chat-sse-broadcast.test.ts | M8 |
|
||||
|
||||
---
|
||||
|
||||
## フェーズ対応表
|
||||
|
||||
PRDの開発順序(Phase 1〜5)とマイルストーンの対応。
|
||||
|
||||
| フェーズ | 内容 | 対象マイルストーン |
|
||||
|---------|------|------------------|
|
||||
| Phase 1: 基盤 | Next.js・Tailwind・SQLite・SQLラッパー・Migration・Repository基盤・認証・ユーザー管理・プロジェクト管理・メンバー管理 | M1・M2・M3・M4 |
|
||||
| Phase 2: プロジェクト内基本機能 | 通知・アクティビティログ・プロジェクトダッシュボード(骨組み)・掲示板・Markdownメモ | M5・M6・M7 |
|
||||
| Phase 3: リアルタイム・タスク管理 | SSE基盤・チャット・メンション・既読/未読・ToDo/Kanban | M8・M9 |
|
||||
| Phase 4: ファイル・カレンダー | ファイル共有・Lightbox・カレンダー・マイルストーン・デッドライン表示 | M10・M11 |
|
||||
| Phase 5: ミーティング・バックアップ | ミーティング作成・メンバー設定・スケジュール重複チェック・議事録・ToDo連携・メモ連携・バックアップ | M12・M14 |
|
||||
| (横断) | 検索・ダッシュボード完成 | M13 |
|
||||
| (全体) | 全体テスト完成・品質担保 | M15 |
|
||||
|
||||
---
|
||||
|
||||
## テスト要件サマリー
|
||||
|
||||
`docs/development-guidelines.md` の「テスト実装の必須条件」に準拠し、各マイルストーンでテスト実装を必須とする。
|
||||
|
||||
### Unit Test(Vitest)【必須】
|
||||
- **対象**: SQLラッパー・Migration・全13Repository・全12Service・権限チェック・バリデーション・スケジュール重複判定・通知作成ロジック・アクティビティログ作成ロジック・マイルストーン進捗計算
|
||||
- **合格基準**: `npm test` 全件成功・Repository/Service層カバレッジ80%以上・正常系/異常系網羅
|
||||
- **最終確認**: M15
|
||||
|
||||
### 統合テスト(Vitest)【必須】
|
||||
- **対象**: 認証フロー・プロジェクトメンバー権限・チャットSSE配信
|
||||
- **最終確認**: M15
|
||||
|
||||
### E2E Test(Playwright)【必須】
|
||||
- **対象**: 認証・プロジェクト管理・掲示板・チャット(SSE)・ToDo(Kanban)・ファイル共有(Lightbox)・Markdownメモ・カレンダー・ミーティング(予定重複警告)・通知・アクティビティログ・バックアップ(全12シナリオ)
|
||||
- **合格基準**: `npm run test:e2e` 全件成功・主要フロー100%
|
||||
- **最終確認**: M15
|
||||
Reference in New Issue
Block a user