コンテンツにスキップ
Documents for MorningStatusApp
Esc
移動開く⌘Jプレビュー
このページの内容

曲対比機能 画面設計書

最終更新: 2026-03-29

1. 概要

曲対比機能(#474)で追加・変更される画面の設計。 新規 2 画面(対比一覧・対比詳細)と、既存 2 画面(トップ・曲詳細)へのセクション追加を定義する。


2. 画面一覧

画面名 URL パターン レンダリング方式 対応 Issue
対比一覧 /comparisons SSR(動的) #474
対比詳細 /comparisons/[id] SSR(動的) #474

既存画面への追加は §5・§6 を参照。


3. 対比一覧画面(/comparisons

概要

全対比ペアをカード形式で一覧表示する画面。 comparison-index.json を Vercel Blob から取得して表示する。

表示コンテンツ

要素 内容
ナビゲーション 「メンバー一覧に戻る」リンク(/ へ)
ページタイトル 「対比一覧」
ペア数 登録ペア件数(例: 12組
ペアカード一覧 comparison-index.json に格納された順のカード一覧(明示的なソート処理はなく、生成スクリプト側の並び順に依存)

リスト表示項目

項目 内容
ベースタイトル ComparisonPair.baseTitle(対比詳細画面へのリンク)
曲数 tracks.length

※ v1.3.0 改善(#494): カード形式からシンプルなリスト形式に変更。収録曲の箇条書きは廃止。

データなし表示

pairs が空配列の場合は「対比データがまだありません。」を表示する。


4. 対比詳細画面(/comparisons/[id]

概要

1 組の対比ペアに含まれる曲を並べて表示する画面。 ペアの各曲の YouTube 動画を横並びに表示し、オリジナルとリメイクを視覚的に比較できる。

表示コンテンツ

要素 内容
ナビゲーション 「前の画面に戻る」リンク(BackLink コンポーネント。フォールバック: /comparisons
ページタイトル "{baseTitle} 対比"
曲カードグリッド 各曲を並列表示するグリッド(§4.1 参照)

4.1 曲カード(1 曲分)

項目 内容
曲タイトル ComparisonTrack.title
YouTube 動画 YouTubePlayer コンポーネント(youtubeVideoId がある場合)
動画なし表示 youtubeVideoId が null の場合は「動画なし」プレースホルダー
代表リリース releaseTitlereleaseId リンク付き、/releases/[id] へ)
曲詳細リンク trackId リンク(/songs/[id] へ)

4.2 グループ表示(#494 改善)

シングル(releaseFormat === "single")とその他を区別して表示する。

条件 表示
シングルとその他が両方存在する 「シングル」セクションと「その他」セクションに分けて表示
どちらか一方のみ セクション見出しなしでグリッド表示

4.3 グリッドレイアウト

状況 レイアウト
デスクトップ(2 曲) 2 列横並び
デスクトップ(3 曲以上) repeat(auto-fill, minmax(360px, 1fr)) でラップ
モバイル 1 列縦積み

404 ハンドリング

指定 id に対応するペアが comparison-index.json に存在しない場合は notFound() を呼ぶ。


5. トップページ(/)変更

変更箇所

Topページ(app/page.tsx)のナビゲーションリンク群に「対比」リンクを追加する。

Topページのナビゲーションはその後の機能追加で大幅に増えており(メンバー・ユニット・関係性マップ・リリース・プレイリスト・ライブ・フェス・ラジオ・対比、デスクトップモード時は楽曲リンク修正・同期状況も追加)、詳細は screen-design.mdx の「Topページ(/)」セクションを参照。

項目 内容
アンカー文字列 対比(実装時に 対比一覧 から短縮)
リンク先 /comparisons
スタイル 他のナビゲーションリンクと同等

6. 曲詳細画面(/songs/[id])変更

変更箇所

「収録リリース一覧」セクションの下・「関連メンバー」セクションの上に「対比候補」セクションを追加する。

表示条件

track-comparison-map.json にこの曲の trackId が存在する場合のみ表示する。

表示コンテンツ

項目 内容
セクション見出し 対比候補(既存セクション見出しと同スタイル)
リンク "{baseTitle} 対比"/comparisons/[pairId] へ)

データ取得

track-comparison-map.jsonTRACK_COMPARISON_MAP_BLOB_URL)を getTrackComparisonMapFromBlob() で取得する。 環境変数未設定・取得失敗時はセクション非表示(フェイルセーフ)。

このページは役に立ちましたか?