ユニット一覧機能 データ設計書
最終更新: 2026-04-10
関連 Issue: #532(初版作成)/ #535・#536(ユニット一覧・詳細ページ追加)/ #537(メンバー詳細への所属ユニットセクション追加)/ #538(リリース詳細へのユニット情報追加)/ #555(parentIdフィールド追加)/ #559(releaseIds列追加)/ #562(トラックとの紐づけ追加)/ #618(サンプルデータ修正)
units.json にユニットデータを管理するためのデータ設計。
ユニット一覧・詳細ページ(#535・#536)、メンバー詳細への所属ユニットセクション追加(#537)、
リリース詳細へのユニット情報追加(#538)の前提基盤となる。
export interface Unit {
/** ユニットの識別子(kebab-case。例: morning-musume-25) */
id: string;
/** ユニット名 */
name: string;
/** 所属メンバーの ID 一覧(members.json の id フィールドと一致) */
memberIds: string[];
/** 関連リリースの ID 一覧(releases.json の id フィールド。省略可) */
releaseIds?: string[];
/** 活動開始年(YYYY 形式) */
activeFrom: string;
/** 活動終了年(YYYY 形式。現役の場合は省略) */
activeTo?: string;
/** 上位ユニットの ID(kebab-case。各期ユニットに設定する。上位ユニット・単独ユニットは省略) */
parentId?: string;
}
- Vercel Blob(
UNITS_BLOB_URL)で管理。ローカルにフリーズドコピーは持たない
id・name・memberIds・mbid 等は手動入力で維持する(releaseIds のみ sync-discography が自動集約して書き戻す)
- 初期データ: 15件収録(タンポポ・プッチモニ・ミニモニ。・さくら組・おとめ組・エコモニ。・W・誕生10年記念隊・ドリームモーニング娘。)
[
{
"id": "tanpopo",
"name": "タンポポ",
"memberIds": [],
"activeFrom": "1998",
"activeTo": "2004"
},
{
"id": "tanpopo-1",
"name": "タンポポ(第1期)",
"memberIds": ["member-id-1", "member-id-2"],
"releaseIds": ["release-id-1"],
"activeFrom": "1998",
"activeTo": "2001",
"parentId": "tanpopo"
}
]
Track 型に以下のフィールドが追加され、sync-discography 実行時に自動設定される。
artist とユニット名の完全一致を試みる
- 完全一致なしの場合、括弧前のベース名(例: “タンポポ(第1期)” → “タンポポ”)でグループ化し、リリース年が
activeFrom〜activeTo に含まれる期を選択
- 境界年で複数期が重なる場合は
activeFrom が最大の期(最新期)を採用
- 既存の
unitId は上書きしない(手動設定を保護)