ユニット一覧機能 データ設計書
最終更新: 2026-04-10(#618)
1. 概要
units.json にユニットデータを管理するためのデータ設計。
ユニット一覧・詳細ページ(#535・#536)、メンバー詳細への所属ユニットセクション追加(#537)、
リリース詳細へのユニット情報追加(#538)の前提基盤となる。
2. 背景・目的
| 目的 | 詳細 |
|---|---|
| ユニットデータの管理 | ユニット名・所属メンバー・活動期間を一元管理する |
| メンバーとの紐付け | memberIds により members.json の既存データと連携する |
| リリースとの紐付け | releaseIds により releases.json の既存データと連携する(任意) |
3. 型定義
Unit インターフェース(types/unit.ts)
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;
}
4. データファイル
units.json(Vercel Blob)
- Vercel Blob(
UNITS_BLOB_URL)で管理。ローカルにフリーズドコピーは持たない id・name・memberIds・mbid等は手動入力で維持する(releaseIdsのみsync-discographyが自動集約して書き戻す)- 初期データ: 15件収録(タンポポ・プッチモニ・ミニモニ。・さくら組・おとめ組・エコモニ。・W・誕生10年記念隊・ドリームモーニング娘。)
ユニット種別と運用ルール
| 種別 | 説明 | parentId |
memberIds |
releaseIds |
|---|---|---|---|---|
| 上位ユニット | 複数期をまとめる親。一覧・詳細ページに表示される | なし(省略) | [](空配列) |
省略可。全期横断のリリースがある場合のみ設定する |
| 各期ユニット | 上位ユニットの配下。一覧には表示されない | 上位ユニットの id |
実際の所属メンバー ID | 当該期のリリース ID |
| 単独ユニット | 期別区分のないユニット | なし(省略) | 実際の所属メンバー ID | 実際のリリース ID |
サンプルデータ
[
{
"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"
}
]
5. フィールド詳細
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
id |
string |
✅ | ユニットの識別子(kebab-case) |
name |
string |
✅ | ユニット名 |
memberIds |
string[] |
✅ | 所属メンバーの ID 一覧(members.json の id と一致) |
releaseIds |
string[] |
— | 関連リリースの ID 一覧(releases.json の id と一致) |
activeFrom |
string |
✅ | 活動開始年(YYYY 形式) |
activeTo |
string |
— | 活動終了年(YYYY 形式)。現役ユニットは省略 |
parentId |
string |
— | 上位ユニットの ID(units.json の id と一致)。各期ユニットのみ設定する |
6. トラックとの紐づけ(#562)
Track 型に以下のフィールドが追加され、sync-discography 実行時に自動設定される。
| フィールド(Track) | 型 | 説明 |
|---|---|---|
artist |
string(省略可) |
MusicBrainz artist-credit から取得したアーティスト名 |
unitId |
string(省略可) |
units.json の id と一致するユニット ID。artist がユニット名と一致した場合に付与 |
照合ロジック
artistとユニット名の完全一致を試みる- 完全一致なしの場合、括弧前のベース名(例: “タンポポ(第1期)” → “タンポポ”)でグループ化し、リリース年が
activeFrom〜activeToに含まれる期を選択 - 境界年で複数期が重なる場合は
activeFromが最大の期(最新期)を採用 - 既存の
unitIdは上書きしない(手動設定を保護)
改訂履歴
| 版 | 更新日 | 変更内容 |
|---|---|---|
| 1.4 | 2026-04-10 | §4 サンプルデータのタンポポ ID を tanpopo / tanpopo-1 形式に修正(#618) |
| 1.3 | 2026-04-05 | §6 トラックとの紐づけ追加(#562) |
| 1.2 | 2026-04-03 | 運用ルール表に releaseIds 列を追加(#559) |
| 1.1 | 2026-04-03 | parentId フィールド追加・上位ユニット運用ルール追加(#555) |
| 1.0 | 2026-03-30 | 初版作成(#532) |