Files
opengroupware/docs/milestones.md
Ken Yasue 80e195b3dc 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
2026-06-24 23:31:06 +02:00

46 KiB
Raw Blame History

マイルストーン・タスク定義書 (Milestones & Tasks)

本書は docs/product-requirements.mddocs/functional-design.mddocs/architecture.mddocs/repository-structure.mddocs/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 lintnpm 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.csstailwind.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 スクリプト:

  • lintformattypechecktesttest:e2emigratedevbuild スクリプト定義

依存関係:

  • 本体依存: 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 lintnpm run typechecknpm 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=WALforeign_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_ididx_project_notes_updated_at インデックス

型定義:

  • lib/types/ に全Entity型定義User・Project・ProjectMember・BoardThread・BoardComment・ChatMessage・TodoColumn・TodoItem・FileAsset・ProjectNote・Milestone・CalendarEvent・Meeting・MeetingMember・Notification・ActivityLog・SchemaMigration
    • 列挙型: UserRoleUserStatusProjectStatusProjectMemberRoleBoardCategoryTodoPriorityMilestoneStatusCalendarEventTypeMeetingMemberStatusNotificationType

Migration実行・状態確認:

  • lib/db/run-migrations.ts: Migration実行スクリプトnpm run migrate
  • API: GET /api/admin/migrationsMigration状態確認・管理者のみ

テスト

  • Unit Test: tests/unit/lib/db/sqlite.test.tsquery/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: findByIdfindByEmailcreateupdate

Service:

  • services/AuthService.ts: registerloginlogoutgetCurrentUserupdateProfile
  • パスワードハッシュ化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.tsCRUD・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: findByIdfindByOwnercreateupdatedelete
  • repositories/ProjectMemberRepository.ts: findByProjectfindByUseraddremoveisMembergetRole

Service:

  • services/ProjectService.ts: createProjectupdateProjectaddMemberremoveMemberarchiveProjectgetDashboard
  • 権限チェック: isMembergetRole非参加者は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.tsCRUD・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: notifyOnEventresolveTargets
    • 対象イベント: 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.tsxNotificationBadge.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_postedcomment_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.tsCRUD・論理削除非取得・プロジェクト分離・検索
  • 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_creatednote_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.tsCRUD・検索・ピン留め・論理削除・プロジェクト分離
  • 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 クラス(addClientremoveClientbroadcast
    • プロジェクト単位のクライアント集合管理
    • 当該プロジェクトのみ配信(他プロジェクトへ漏れさせない)
  • SSEエンドポイント: GET /api/projects/:projectId/chat/stream
  • クライアント側の自動再接続対応
  • SSEイベント種別: chat.message.createdchat.message.updatedchat.message.deletedtodo.updatedfile.uploadedmeeting.creatednote.updatednotification.created

Repository:

  • repositories/ChatRepository.ts: メッセージCRUD・ページネーション・検索deleted_at IS NULL

Service:

  • services/ChatService.ts: sendMessageeditMessagedeleteMessagegetHistory
  • 権限チェック(プロジェクト参加者のみ)
  • メンション検出 → 通知(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.tsCRUD・検索・論理削除・プロジェクト分離
  • 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_createdtodo_updatedtodo_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.tsxKanbanボード
  • components/todo/KanbanBoard・KanbanColumn・TodoCardドラッグ&ドロップ対応

テスト

  • Unit Test: tests/unit/repositories/TodoRepository.test.tsCRUD・並び替え・論理削除・プロジェクト分離
  • 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: uploadgetDownloadStreamdelete
    • ローカル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.tsToDo期限・マイルストーン・ミーティング表示・イベント作成/編集)

完了条件

  • 月/週/日/リスト表示ができる
  • マイルストーン・デッドライン・ToDo期限・ミーティングが表示される
  • イベントCRUD・フィルターができる
  • マイルストーン進捗率が自動計算される
  • Unit・E2E Test が成功する

M12: ミーティング管理・スケジュール重複チェック

目的: ミーティングCRUD・参加メンバー設定・アジェンダ/議事録・関連付け・スケジュール重複判定を実装する。

前提: M11

実装タスク

Repository:

  • repositories/MeetingRepository.ts: ミーティングCRUD・meeting_members管理deleted_at IS NULL

Service:

  • services/MeetingService.ts: createMeetingupdateMeetingdeleteMeetingcheckScheduleConflictsupdateMinutes
  • 権限チェック
  • タイトル・説明・開始/終了日時・参加メンバー・場所・ミーティング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.tsCRUD・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
  • 期限が近いToDo7日以内
  • 最新チャット直近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: createBackuplistBackupsdownloadBackup
    • 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/migrationsMigration状態確認・管理者のみ※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 TestVitest【必須】

  • 対象: SQLラッパー・Migration・全13Repository・全12Service・権限チェック・バリデーション・スケジュール重複判定・通知作成ロジック・アクティビティログ作成ロジック・マイルストーン進捗計算
  • 合格基準: npm test 全件成功・Repository/Service層カバレッジ80%以上・正常系/異常系網羅
  • 最終確認: M15

統合テストVitest【必須】

  • 対象: 認証フロー・プロジェクトメンバー権限・チャットSSE配信
  • 最終確認: M15

E2E TestPlaywright【必須】

  • 対象: 認証・プロジェクト管理・掲示板・チャット(SSE)・ToDo(Kanban)・ファイル共有(Lightbox)・Markdownメモ・カレンダー・ミーティング(予定重複警告)・通知・アクティビティログ・バックアップ全12シナリオ
  • 合格基準: npm run test:e2e 全件成功・主要フロー100%
  • 最終確認: M15