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

ソロアーティスト データ設計書

最終更新: 2026-09-30 関連 Issue: MorningStatusApp#1673(ソロ活動およびユニット活動の調査)/ morning-status-blume#167(初版作成)

1. 概要

メンバー個人の名義で活動するソロアーティストを管理するデータ設計。ソロアーティスト(SoloArtist)は solos.json で管理する。

ソロアーティスト一覧画面・ソロアーティスト詳細画面・メンバー詳細画面のソロ活動セクションの前提基盤となる(画面設計 → ソロアーティスト 画面設計書)。


2. 背景・目的

目的 詳細
ソロ名義活動の管理 MorningStatusApp#1673 のMusicBrainz調査で見つかった、メンバー本人の実名義によるソロ作品(19名・170件超)を一元管理する
メンバーとの紐付け memberId により members.json の既存データと連携する
リリースとの紐付け releaseIds により Release(Neon)の既存データと連携する

ソロ活動を扱うために solos.json を新設する。

対象範囲

  • 対象: メンバー本人の実名義での発表のみ
  • 対象外: MusicBrainz上で別名義のユニットとして登録されている活動(例: 「後浦なつみ」名義)。これらはユニットとして units.json に登録する(MorningStatusApp#1681)

3. 型定義

ソロアーティスト(SoloArtist)(types/solos.ts)

型はZodスキーマ(SoloArtistSchema)から z.infer で導出する。

export const SoloArtistSchema = z.object({
  /** 対象メンバーの ID(members.json の id と一致。1メンバーにつき1エントリ)。ソロアーティスト詳細画面の URL の識別子を兼ねる */
  memberId: z.string(),
  /** ソロアーティストとしての名義(メンバー名と異なる場合のみ設定。省略時はメンバー名を表示する。例: 久住小春は「月島きらり starring 久住小春(モーニング娘。)」) */
  name: z.string().optional(),
  /** 関連リリースの ID 一覧(Release の id。sync-discography が自動集約して書き戻す) */
  releaseIds: z.array(z.string()).optional(),
  /** 活動開始年(YYYY 形式) */
  activeFrom: z.string(),
  /** 活動終了年(YYYY 形式。現役の場合は省略) */
  activeTo: z.string().optional(),
  /** MusicBrainz artist MBID の一覧(リリースごとにクレジットされる MBID が異なる場合があるため複数指定できる) */
  mbids: z.array(z.string()).optional(),
});

export type SoloArtist = z.infer<typeof SoloArtistSchema>;

4. データファイル

solos.json(Vercel Blob)

  • Vercel Blob で管理し、ローカルにフリーズドコピーは持たない
  • solos.json は実装時に新規作成する(初期登録は §7)
  • 作成後、releaseIds は sync-discography が自動集約して書き戻す(§6)
  • 1メンバーにつき1エントリ(memberId は一意)

Blobの検出方式: 専用の環境変数(URL固定)は用いず、@vercel/blob の list({ prefix: 'solos.json' }) でBlobを都度検出する。取得URLにはetagをクエリパラメータとして付与し、fetch は cache: 'no-store' で呼ぶ。sync-discography の書き戻しで solos.json が更新された直後に、CDNエッジキャッシュ経由で更新前のデータが返ることを避けるためで、画面側の取得処理にも必要になる。

サンプルデータ

[
  {
    "memberId": "member-id-1",
    "releaseIds": ["release-id-1", "release-id-2"],
    "activeFrom": "2001",
    "mbids": ["00000000-0000-0000-0000-000000000000"]
  },
  {
    "memberId": "member-id-2",
    "name": "月島きらり starring 久住小春(モーニング娘。)",
    "activeFrom": "2006",
    "activeTo": "2011",
    "mbids": [
      "8a193d6b-05f1-4487-bc16-bc958d300d0b",
      "e118ba73-c310-4934-a323-dc20fb1d693a"
    ]
  }
]

5. フィールド詳細

フィールド 型 必須 説明
memberId string ✅ 対象メンバーの ID(members.json の id と一致)。ファイル内で一意
name string — ソロアーティストとしての名義。メンバー名と異なる場合のみ設定する(例: 久住小春は「月島きらり starring 久住小春(モーニング娘。)」)
releaseIds string[] — 関連リリースの ID 一覧(Release の id と一致)。sync-discography が自動集約する
activeFrom string ✅ 活動開始年(YYYY 形式)
activeTo string — 活動終了年(YYYY 形式)。現役の場合は省略
mbids string[] — MusicBrainz artist MBID の一覧。設定すると sync-discography のリリース取得対象になり、releaseIds の自動集約が働く。未設定のエントリは releaseIds を手動管理する

整合性ルール

ルール 内容
メンバーの実在 memberId は members.json に存在する id であること
一意性 同一 memberId のエントリは1件のみ
年の形式 activeFrom・activeTo は YYYY 形式で、activeTo は activeFrom 以降であること

6. リリースとの紐付け(sync-discography の拡張)

新規の同期スクリプトは作らず、既存の sync-discography(→ バッチ設計書 W2)を拡張してソロアーティストを同じ処理に含める。

6-1. リリース取得対象のMBID

ユニットの mbid に加えて、solos.json の mbids も取得対象に含める(重複排除は合算後の一覧に対して行う)。solos.json が存在する場合に対象とする。

6-2. releaseIds の自動集約(assignReleaseIdsToSoloArtists)

全トラックの Track.artistMbid が、同一のソロアーティストの mbids のいずれかに含まれるリリースを、当該ソロアーティストの releaseIds に自動追加する。既存の releaseIds は保持し重複は除去する。

  • 他アーティストとの共演曲・コンピレーション等でトラックの artistMbid が混在するリリースは対象外
  • releaseIds の自動集約後、solos.json をVercel Blobに書き戻す

6-3. Track 型は変更しない

ソロアーティスト用のトラック紐付けフィールド(例: Track.soloMemberId)は追加しない。ソロアーティストとリリースの紐付けは SoloArtist.releaseIds で、ソロアーティストとトラックの紐付けは表示時の Track.artistMbid が SoloArtist.mbids に含まれるかの判定で表現し、Track・Release のスキーマ(Neon)は変更しない。


7. 初期登録対象

MorningStatusApp#1673 の調査で、members.json の全メンバー51名のうち19名にソロ名義の作品(170件超)が見つかっている。調査結果(メンバー・作品数・活動期間・MBID)は同Issueのコメントを参照する。

久住小春は、MusicBrainzの久住小春(8a193d6b-…、11件)の作品が「月島きらり starring 久住小春(モーニング娘。)」名義で、月島きらり(e118ba73-…、Character、10件)にも同名義の作品が登録されている。リリースごとにクレジットされるMBIDが異なる可能性があるため、両方を mbids に登録する。

登録時の留意点:

  • メンバー本人の実名義での発表のみを対象とする。別名義のユニットとして登録されている活動はソロアーティストと誤認しない(§2)
  • activeFrom・activeTo は、調査時にMusicBrainzのリリースグループ日付から機械的に算出した推定値。登録前に個別確認が必要

8. データ取得層の設計方針

Server Componentでの直接取得とし、Route Handler(BFF)+ TanStack Queryは適用しない。判定の理由は統合フィードアイテム データ設計書 §6-9 を参照。


9. 関連設計書

設計書 本書との関係
ソロアーティスト 画面設計書 本データを表示する画面の設計
バッチ設計書 sync-discography の処理フロー
データ設計書(全体概要) エンティティ一覧・データファイル一覧への登録

改訂履歴

版 更新日 変更内容
1.0 2026-09-30 【対応する実装: 実装時に追記】初版作成(MorningStatusApp#1673, morning-status-blume#167)

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