Note: このIssueは 2026-04-04 にStage 7レビュー結果を反映して更新されました。
詳細: dev-reports/issue/618/issue-review/
概要
レポート生成機能にテンプレートシステムを追加する。Review画面にTemplateタブを新設し、最大5件のテンプレート(件名+指示文)を管理可能にする。レポート生成時は「指示なし / テンプレートから選択 / カスタム入力」の3モードを切り替えて利用できるようにする。
背景・課題
現在のレポート生成機能(Issue #607, #612)はユーザー指示を毎回手入力するため、レポートの品質・フォーマットがばらつく。日報・週報・進捗報告など定型パターンを保存して再利用できる仕組みがなく、同じような指示を毎回書く手間が発生している。
提案する解決策
1. テンプレートデータ管理
SQLite DBに report_templates テーブルを追加し、CRUD APIで管理する。
CREATE TABLE report_templates (
id TEXT PRIMARY KEY, -- crypto.randomUUID() でUUID v4形式を生成
name TEXT NOT NULL, -- 件名(テンプレート名)最大100文字
content TEXT NOT NULL, -- 指示文(テンプレート本文)最大1000文字
sort_order INTEGER NOT NULL DEFAULT 0, -- created_at順ソートで使用。将来的にドラッグ&ドロップ並び替えUIを追加する際に活用予定
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
- テンプレートは最大5件まで(
MAX_TEMPLATES = 5)
- フィールドは「件名」と「指示文(本文)」の2フィールド
- IDは
crypto.randomUUID() でUUID v4形式を生成
- sort_orderはPhase 1では
created_at による自動ソートとし、並び替えUIは将来拡張とする
/api/templates は既存の middleware.ts 認証の対象であり、認証必須とする
バリデーション仕様:
name: 必須、空文字不可、最大100文字(MAX_TEMPLATE_NAME_LENGTH = 100)
content: 必須、空文字不可、最大1000文字(MAX_TEMPLATE_CONTENT_LENGTH = 1000、既存の MAX_USER_INSTRUCTION_LENGTH と同値)
- バリデーション定数は
src/config/review-config.ts に追加
2. テンプレート管理UI
Review画面にTemplateタブを追加(Review / Report / Template の3タブ構成)。
- テンプレート一覧表示
- 新規作成・編集・削除
- 5件上限に達した場合はエラー表示
3. レポート生成時の3モード切替
ReportタブのUIにラジオボタンで3モードを提供:
○ 指示なし … 従来通り、AIにおまかせ
● テンプレート選択 … ドロップダウンからテンプレートを選択
○ カスタム入力 … 従来の自由入力フィールド
テンプレート選択時は、選択したテンプレートの指示文をクライアント側で userInstruction としてレポート生成APIに渡す(POST /api/daily-summary のAPI変更は不要)。
3モード切替のstate遷移仕様:
- テンプレート選択モードでは、選択したテンプレートの
content が userInstruction として使用される
- モード切替時に
userInstruction をリセットする(テンプレート選択 → カスタム入力 → テンプレート選択でも再選択可能)
- テンプレート選択モードでは
userInstruction は読み取り専用(編集不可)
主要な変更点
- DB:
report_templates テーブル追加(マイグレーション v25)
- DB:
migrations/index.ts へのマイグレーション登録、runner.ts のバージョン更新
- API:
/api/templates CRUD エンドポイント新設(既存 middleware.ts 認証が適用される)
- UI: Review画面にTemplateタブ追加
- UI: ReportタブにGeneration Mode切替UI追加
- 既存の
POST /api/daily-summary は変更不要(userInstruction パラメータをそのまま活用。テンプレートのcontentはクライアント側でuserInstructionとして送信する)
実装タスク
受入条件
影響範囲
新規ファイル
| ファイル |
内容 |
src/lib/db/migrations/v25-report-templates.ts |
report_templates テーブルマイグレーション |
src/lib/db/template-db.ts |
テンプレートCRUD操作 |
src/app/api/templates/route.ts |
テンプレート一覧取得・作成API |
src/app/api/templates/[id]/route.ts |
テンプレート更新・削除API |
src/components/review/TemplateTab.tsx |
テンプレート管理UI |
tests/unit/lib/template-db.test.ts |
テンプレートDBユニットテスト |
tests/unit/api/templates.test.ts |
テンプレートAPIユニットテスト |
tests/unit/components/review/ReportTab.test.tsx |
ReportTab の3モード切替UIテスト |
変更ファイル
| ファイル |
変更内容 |
src/lib/db/migrations/index.ts |
v25マイグレーションのimportと配列追加 |
src/lib/db/migrations/runner.ts |
CURRENT_SCHEMA_VERSION を25に更新、validateSchema() の requiredTables に report_templates 追加 |
src/app/review/page.tsx |
Templateタブ追加(3タブ構成) |
src/components/review/ReportTab.tsx |
3モード切替UI追加 |
src/config/review-config.ts |
テンプレート定数追加(MAX_TEMPLATES, MAX_TEMPLATE_NAME_LENGTH, MAX_TEMPLATE_CONTENT_LENGTH) |
tests/integration/auth-middleware.test.ts |
/api/templates の認証保護確認を追加 |
tests/unit/components/review/ReviewPage-stalled.test.tsx |
Review / Report / Template の3タブ構成に合わせて更新 |
tests/unit/lib/db-migrations.test.ts |
CURRENT_SCHEMA_VERSION アサーション(3箇所)を24から25に更新 |
関連コンポーネント
src/lib/db/migrations/index.ts — マイグレーション配列登録
src/lib/db/migrations/runner.ts — CURRENT_SCHEMA_VERSION管理
src/lib/summary-prompt-builder.ts — userInstruction経由で既存連携
Note: Header.tsx / GlobalMobileNav.tsx のナビラベル("Review/Report")は変更不要。Templateタブは Review画面内の3タブ構成であり、グローバルナビゲーションへの影響はない。
レビュー履歴
Stage 1 (2026-04-04)
- S1-001 (Must Fix): マイグレーション登録手順(migrations/index.ts, runner.ts)を実装タスクに追加
- S1-002 (Should Fix): テンプレートID生成方式をcrypto.randomUUID()と明記
- S1-003 (Should Fix): sort_orderはcreated_at順ソートで将来拡張とする旨を明記
- S1-004 (Should Fix): バリデーション仕様を追記(MAX_TEMPLATE_NAME_LENGTH = 100, MAX_TEMPLATE_CONTENT_LENGTH = 1000)
- S1-005 (Should Fix): 関連コンポーネントからdb-instance.tsを削除し、migrations/index.tsとrunner.tsを追加
- S1-006 (Should Fix): テストファイルパスを明記(template-db.test.ts, templates.test.ts)
- S1-007 (Nice to Have): マイグレーションファイル名をv25-report-templates.tsと確定
- S1-009 (Nice to Have): daily-summary APIの変更は不要と明記
Stage 3 (2026-04-04)
- S3-001 (Must Fix): 既存テスト db-migrations.test.ts の CURRENT_SCHEMA_VERSION アサーション更新を実装タスクに追加
- S3-002 (Must Fix): validateSchema() の requiredTables に report_templates 追加を実装タスク・変更ファイルに追加
- S3-005 (Should Fix): 関連コンポーネントから useLayoutConfig.ts を削除(変更不要のため)
- S3-006 (Should Fix): 3モード切替のstate遷移仕様を追記(読み取り専用・リセット動作)、受入条件に反映
- S3-007 (Nice to Have): Header.tsx/GlobalMobileNav.tsxのナビラベルは変更不要である旨をNoteとして記載
Stage 5 (2026-04-04)
- S5-001 (Should Fix):
/api/templates が既存 middleware 認証の対象であることを追記
- S5-002 (Should Fix): 320px幅相当での3タブ表示・操作を受入条件に明記
Stage 7 (2026-04-04)
- S7-001 (Should Fix):
/api/templates の認証要件を担保する tests/integration/auth-middleware.test.ts の更新を追加
- S7-002 (Should Fix): Review画面3タブ化とReportTab 3モード化に対するフロントエンドテスト更新・追加を実装タスクへ追加
概要
レポート生成機能にテンプレートシステムを追加する。Review画面にTemplateタブを新設し、最大5件のテンプレート(件名+指示文)を管理可能にする。レポート生成時は「指示なし / テンプレートから選択 / カスタム入力」の3モードを切り替えて利用できるようにする。
背景・課題
現在のレポート生成機能(Issue #607, #612)はユーザー指示を毎回手入力するため、レポートの品質・フォーマットがばらつく。日報・週報・進捗報告など定型パターンを保存して再利用できる仕組みがなく、同じような指示を毎回書く手間が発生している。
提案する解決策
1. テンプレートデータ管理
SQLite DBに
report_templatesテーブルを追加し、CRUD APIで管理する。MAX_TEMPLATES = 5)crypto.randomUUID()でUUID v4形式を生成created_atによる自動ソートとし、並び替えUIは将来拡張とする/api/templatesは既存のmiddleware.ts認証の対象であり、認証必須とするバリデーション仕様:
name: 必須、空文字不可、最大100文字(MAX_TEMPLATE_NAME_LENGTH = 100)content: 必須、空文字不可、最大1000文字(MAX_TEMPLATE_CONTENT_LENGTH = 1000、既存のMAX_USER_INSTRUCTION_LENGTHと同値)src/config/review-config.tsに追加2. テンプレート管理UI
Review画面にTemplateタブを追加(Review / Report / Template の3タブ構成)。
3. レポート生成時の3モード切替
ReportタブのUIにラジオボタンで3モードを提供:
テンプレート選択時は、選択したテンプレートの指示文をクライアント側で
userInstructionとしてレポート生成APIに渡す(POST /api/daily-summaryのAPI変更は不要)。3モード切替のstate遷移仕様:
contentがuserInstructionとして使用されるuserInstructionをリセットする(テンプレート選択 → カスタム入力 → テンプレート選択でも再選択可能)userInstructionは読み取り専用(編集不可)主要な変更点
report_templatesテーブル追加(マイグレーション v25)migrations/index.tsへのマイグレーション登録、runner.tsのバージョン更新/api/templatesCRUD エンドポイント新設(既存middleware.ts認証が適用される)POST /api/daily-summaryは変更不要(userInstructionパラメータをそのまま活用。テンプレートのcontentはクライアント側でuserInstructionとして送信する)実装タスク
src/lib/db/migrations/v25-report-templates.tsマイグレーションファイル作成src/lib/db/migrations/index.tsにv25マイグレーションのimportと配列追加src/lib/db/migrations/runner.tsの CURRENT_SCHEMA_VERSION を25に更新src/lib/db/migrations/runner.tsの validateSchema() の requiredTables 配列に report_templates を追加src/lib/db/template-db.tsCRUD実装(getAll, create, update, delete, getById)src/app/api/templates/route.tsGET/POST エンドポイントsrc/app/api/templates/[id]/route.tsPUT/DELETE エンドポイントsrc/components/review/TemplateTab.tsxテンプレート管理画面src/components/review/ReportTab.tsxに3モード切替UI追加src/app/review/page.tsxにTemplateタブ追加(3タブ構成)src/config/review-config.tsにテンプレート関連定数追加(MAX_TEMPLATES = 5, MAX_TEMPLATE_NAME_LENGTH = 100, MAX_TEMPLATE_CONTENT_LENGTH = 1000)tests/unit/lib/template-db.test.tstemplate-db のユニットテスト追加tests/unit/api/templates.test.tstemplates API のユニットテスト追加tests/integration/auth-middleware.test.tsに/api/templatesの未認証アクセス拒否・AUTH_EXCLUDED_PATHS 非対象確認を追加tests/unit/components/review/ReviewPage-stalled.test.tsxを3タブ構成に合わせて更新tests/unit/components/review/ReportTab.test.tsxなどで3モード切替・userInstruction リセット・読み取り専用制御を検証tests/unit/lib/db-migrations.test.tsの CURRENT_SCHEMA_VERSION アサーション(3箇所)を25に更新受入条件
/api/templatesが認証必須であり、未認証アクセスを拒否すること影響範囲
新規ファイル
src/lib/db/migrations/v25-report-templates.tssrc/lib/db/template-db.tssrc/app/api/templates/route.tssrc/app/api/templates/[id]/route.tssrc/components/review/TemplateTab.tsxtests/unit/lib/template-db.test.tstests/unit/api/templates.test.tstests/unit/components/review/ReportTab.test.tsx変更ファイル
src/lib/db/migrations/index.tssrc/lib/db/migrations/runner.tssrc/app/review/page.tsxsrc/components/review/ReportTab.tsxsrc/config/review-config.tstests/integration/auth-middleware.test.ts/api/templatesの認証保護確認を追加tests/unit/components/review/ReviewPage-stalled.test.tsxtests/unit/lib/db-migrations.test.ts関連コンポーネント
src/lib/db/migrations/index.ts— マイグレーション配列登録src/lib/db/migrations/runner.ts— CURRENT_SCHEMA_VERSION管理src/lib/summary-prompt-builder.ts— userInstruction経由で既存連携レビュー履歴
Stage 1 (2026-04-04)
Stage 3 (2026-04-04)
Stage 5 (2026-04-04)
/api/templatesが既存 middleware 認証の対象であることを追記Stage 7 (2026-04-04)
/api/templatesの認証要件を担保するtests/integration/auth-middleware.test.tsの更新を追加