ソロアーティスト データ設計書
最終更新: 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) |