Build

タスク管理

タスク一覧、検索・フィルタ・ソート、詳細復帰まで含む、プロジェクト内タスクを確認するための小さな管理画面。

tasksadmin-uiquery-paramsplaywright

この Build で見せるもの

プロジェクト内のタスクを確認するための小さな管理画面です。固定データで動作し、5 フィルタ次元と 4 ソート、詳細復帰まで実装した完成例です。

機能概要
キーワード検索タイトル・説明・担当者・ラベルを横断してフリーテキスト検索
ステータスフィルタ未着手 / 進行中 / ブロック中 / 完了
優先度フィルタ高 / 中 / 低
担当者フィルタ担当者名で絞り込む
ラベルフィルタラベルで絞り込む
ソート更新が新しい順 / 作成が新しい順 / 期限が近い順 / 優先度が高い順
アクティブチップ絞り込み中の条件をチップ表示、個別に解除できる
EmptyState0 件時に条件の種類に応じた解除ボタンを表示
詳細復帰詳細から元の絞り込み一覧へ from パラメータで戻れる
open redirect 対策/tasks プレフィックス以外の from は弾く

ファイル構成

ファイル役割
src/app/tasks/page.tsx一覧ページ(サーバーコンポーネント)
src/app/tasks/[id]/page.tsx詳細ページ(from パラメータ対応)
src/components/tasks/TaskCard.tsxタスクカード(returnHref prop 対応)
src/components/tasks/TaskFilterPanel.tsxサイドバーフィルタ(クライアント)
src/lib/tasks/data.tsデータ定義・型・取得関数
src/lib/tasks/filters.tsフィルタ・ソート純粋関数
src/lib/tasks/query.tsURL クエリのパース・ビルド・open redirect 検証
tests/tasks-flow.spec.tsPlaywright E2E テスト

設計のポイント

フィルタ状態は URL クエリで管理しています。ブラウザの戻る・シェア・リロードで同じ絞り込み状態を再現できます。

filterTaskssortTasks は UI から完全に分離した純粋関数です。5 つのフィルタ次元(q / status / priority / assignee / label)と 4 つのソートを一関数で処理しつつ、入力・出力が明確で E2E テストが書きやすい構造になっています。

parseTaskReturnHref はサーバー側で from パラメータを検証します。/tasks または /tasks?... 以外は /tasks にフォールバックするため、open redirect になりません。

転用のしかた

他のドメイン(商品一覧・ユーザー一覧・申請管理)へ転用するときは data.ts の型とデータを差し替えるだけです。filters.tsquery.ts の構造・page.tsx のレイアウトはほぼそのまま使えます。フィルタ次元が増えた場合は parseTaskListQueryfilterTasks に条件を追記するだけで対応できます。

実装の詳細な手順は関連 Playbook 「タスク管理画面を作る」 で段階的に説明しています。

関連 Playbook

デモを見る →