---
title: "データ設計書（全体概要）"
---

最終更新: 2026-07-21

## 1. 概要

MorningStatusApp が管理するデータファイル・エンティティの全体像をまとめた設計書。
各エンティティの詳細設計は個別設計書を参照すること。

ER 図（エンティティ間の関係図）→ [ER 図](/design/common/er-diagram)

---

## 2. データファイル一覧

### プライマリデータ（Vercel Blob + `data/` 凍結コピー）

| ファイル名 | 概要 | 更新方法 |
| --- | --- | --- |
| `members.json` | 全メンバーのプロフィール・近況・SNS情報。Amebaブログの近況（`Member.latestStatus`/`Member.statusHistory`）も専用ファイルを持たずここに格納する（詳細 → [Amebaブログ機能 データ設計書](/design/sns/ameba-data-design)） | 編集 API（PUT `/api/members`）または手動更新 |
| `releases.json` | 全リリース情報・収録曲トラックリスト | `sync-discography` スクリプト（自動）または手動 |
| `playlists.json` | メンバーが選曲したプレイリスト情報 | 手動編集後に Vercel Blob へアップロード |
| `units.json` | ユニット情報（名称・所属メンバー・活動期間） | 手動編集後に Vercel Blob へアップロード |
| `radar-chart-timeline-config.json` | レーダーチャート時系列表示のキーフレーム終端日（`keyframeEndDate`）設定（詳細 → [メンバー関係性マップ レーダーチャート画面設計書](/design/member/member-map-radar-chart-design) §10-6） | 設定UI（PUT `/api/radar-chart-timeline-config`、デスクトップモード限定）または手動更新 |

### 派生データ（Vercel Blob のみ・自動生成）

| ファイル名 | 概要 | 生成タイミング |
| --- | --- | --- |
| `member-playlist-index.json` | `memberId` キーで選曲楽曲を集約したインデックス | `playlists.json` 更新時（#331 スクリプト） |
| `track-playlist-index.json` | `trackId` キーでプレイリスト掲載情報を集約したインデックス | `playlists.json` 更新時（#331 スクリプト） |
| `comparison-index.json` | 対比ペア一覧（`ComparisonPair[]`） | `build-comparison-index.ts` 実行時 |
| `track-comparison-map.json` | `trackId` → `{ pairId, baseTitle }` マップ | `build-comparison-index.ts` 実行時 |

### Instagram投稿データ（Vercel Blob のみ・自動生成）

詳細設計 → [Instagram投稿機能 データ設計書](/design/sns/instagram-data-design)

| ファイルパス | 概要 | 生成タイミング |
| --- | --- | --- |
| `instagram/{memberId}/posts.json` | メンバー単位の全投稿メタデータ（`InstagramPost[]`） | `collect-instagram-posts` ワークフロー実行時 |
| `instagram/{memberId}/{postId}.jpg` | キャプチャ済み投稿画像 | `collect-instagram-posts` ワークフロー実行時 |
| `instagram/sync-status.json` | 同期実行状態（`InstagramSyncStatus`）。同期状況画面向け | `collect-instagram-posts` ワークフロー実行時 |
| `instagram/daily-new-posts.json` | 当日新規取得投稿一覧（`DailyNewPost[]`）。トップ画面向け | `collect-instagram-posts` ワークフロー実行時 |

### Amebaブログ同期状態（Vercel Blob のみ・自動生成）

詳細設計 → [Amebaブログ機能 データ設計書](/design/sns/ameba-data-design)

| ファイルパス | 概要 | 生成タイミング |
| --- | --- | --- |
| `ameba/sync-status.json` | Topページ新着投稿セクションの新着ウィンドウ判定に使う同期ステータス（`AmebaSyncStatus`） | `sync-members` ワークフロー実行時 |

### 歌詞リンクデータ（Track.links に追記・Vercel Blob 更新）

詳細設計 → [歌詞サイトリンク機能 データ設計書](/design/discography/genius-data-design)

> 独立したファイルは持たず、`releases.json` の `Track.links[]` に `{ type: 'genius', url }` として追記する。

---

## 3. エンティティ一覧

| エンティティ | 格納場所 | 追加バージョン | 詳細設計書 |
| --- | --- | --- | --- |
| メンバー（`Member`） | Vercel Blob（`members.json`） / `data/work/members.json`（作業用一時コピー） | v0.1.0〜 | [メンバー データ設計書](/design/common/member-data-design) |
| リリース（`Release`） | Neon（Vercel Postgres）`release` テーブル | v0.2.0〜 | [リリース データ設計書](/design/common/release-data-design) |
| メンバー・リリース紐付け（`MemberReleaseLink`） | 実行時算出（永続ファイルなし） | v0.2.0〜 | [リリース データ設計書](/design/common/release-data-design) §5 |
| 収録曲（`Track`） | Neon（Vercel Postgres）`track` テーブル | v0.5.0 | [トラックリスト データ設計書](/design/discography/tracklist-data-design) |
| 外部リンク（`ExternalLink`） | `Track.links[]` / `Release.links[]` 内の値型 | v0.5.0 | [トラックリスト データ設計書](/design/discography/tracklist-data-design) |
| プレイリスト（`Playlist`） | `data/inputs/playlists.json`（Vercel Blob 凍結入力） | v0.6.0 | [プレイリスト機能 データ設計書](/design/playlist/playlist-data-design) |
| プレイリスト楽曲（`PlaylistEntry`） | `data/inputs/playlists.json` 内 `entries[]` | v0.6.0 | [プレイリスト機能 データ設計書](/design/playlist/playlist-data-design) |
| 対比ペア（`ComparisonPair`） | `comparison-index.json` 内 `pairs[]` | v1.1.0 | [曲対比機能 データ設計書](/design/discography/comparison-data-design) |
| 対比曲（`ComparisonTrack`） | `comparison-index.json` 内 `pairs[].tracks[]` | v1.1.0 | [曲対比機能 データ設計書](/design/discography/comparison-data-design) |
| ユニット（`Unit`） | Vercel Blob（`UNITS_BLOB_URL`） | v1.5.0 | [ユニット一覧機能 データ設計書](/design/unit/unit-data-design) |
| 会場（`Venue`） | Neon（Vercel Postgres） | v3.0.0 | [ライブ・フェス機能 テーブル設計書](/design/live/live-data-design) |
| ツアー（`Tour`） | Neon（Vercel Postgres） | v3.0.0 | [ライブ・フェス機能 テーブル設計書](/design/live/live-data-design) |
| 公演（`Live`） | Neon（Vercel Postgres） | v3.0.0 | [ライブ・フェス機能 テーブル設計書](/design/live/live-data-design) |
| メンバー・公演紐付け（`MemberLive`） | Neon（Vercel Postgres） | v3.0.0 | [ライブ・フェス機能 テーブル設計書](/design/live/live-data-design) |
| 都道府県コード変換テーブル（`PrefectureCode`） | Neon（Vercel Postgres） | v3.0.0 | [ライブ・フェス機能 テーブル設計書](/design/live/live-data-design) |
| 出身地照合用メンバー（`Member`、DB） | Neon（Vercel Postgres）※出身地照合用 | v3.0.0 | [ライブ・フェス機能 テーブル設計書](/design/live/live-data-design) |
| セットリスト（`Setlist`） | Neon（Vercel Postgres）※将来拡張 | — | [ライブ・フェス機能 テーブル設計書](/design/live/live-data-design) |
| フェス（`Festival`） | Neon（Vercel Postgres） | v3.9.0 | [ライブ・フェス機能 テーブル設計書](/design/live/live-data-design) |
| リリース（DB、`Release`） | Neon（Vercel Postgres）※ Blob releases.json の移行先 | v4.1.0 | [リリース データ設計書](/design/common/release-data-design) §4 |
| 収録曲（DB、`Track`） | Neon（Vercel Postgres）※ releases.json 内 tracks[] の移行先 | v4.1.0 | [トラックリスト データ設計書](/design/discography/tracklist-data-design) |
| 収録曲外部リンク（DB、`TrackLink`） | Neon（Vercel Postgres）※ Track.links[] の正規化テーブル | v4.1.0 | [トラックリスト データ設計書](/design/discography/tracklist-data-design) |
| Instagram投稿（`InstagramPost`） | `instagram/{memberId}/posts.json` 内の値型 | v3.5.0 | [Instagram投稿機能 データ設計書](/design/sns/instagram-data-design) |
| Instagram同期状態（`InstagramSyncStatus`） | `instagram/sync-status.json` | v3.5.0 | [Instagram投稿機能 データ設計書](/design/sns/instagram-data-design) |
| 当日新着投稿（`DailyNewPost`） | `instagram/daily-new-posts.json` 内の値型 | v3.5.0 | [Instagram投稿機能 データ設計書](/design/sns/instagram-data-design) |
| TikTok投稿（`TikTokPost`） | Neon（Vercel Postgres）※ v4.2.3までVercel Blob | v4.2.0 | [TikTok投稿機能 データ設計書](/design/sns/tiktok-data-design) |
| TikTok同期状態（`TikTokSyncStatus`） | Neon（Vercel Postgres）※ v4.2.3までVercel Blob | v4.2.0 | [TikTok投稿機能 データ設計書](/design/sns/tiktok-data-design) |
| ラジオ番組（`RadioShow`） | Neon（Vercel Postgres） | v4.3.0 | [ラジオオンエア収集 設計書](/design/radio/radio-onair-data-design) |
| ラジオ放送回（`RadioEpisode`） | Neon（Vercel Postgres） | v4.3.0 | [ラジオオンエア収集 設計書](/design/radio/radio-onair-data-design) |
| ラジオ出演メンバー（`RadioMember`） | Neon（Vercel Postgres） | v4.3.0 | [ラジオオンエア収集 設計書](/design/radio/radio-onair-data-design) |
| ラジオオンエア楽曲（`RadioOnairSong`） | Neon（Vercel Postgres） | v4.3.0 | [ラジオオンエア収集 設計書](/design/radio/radio-onair-data-design) |
| 統合イベント（`Event`） | Neon（Vercel Postgres）※ Releases/Members/Lives/Radio/手動登録イベントの統合派生データ | v5.0.0 | [events テーブル定義書](/design/common/events-table) |
| YouTube投稿（`YoutubePost`） | Neon（Vercel Postgres） | v6.5.0 | [YouTube投稿一覧機能 データ設計書](/design/sns/youtube-data-design) |
| メンバー関係性エッジ（`MemberRelationship`） | Neon（Vercel Postgres） | v8.0.0 | [メンバー関係性マップ データ設計書](/design/member/member-map-data-design) |
| メンバー関係性マップ座標（`MemberMapLayout`） | Neon（Vercel Postgres） | v8.2.0 | [メンバー関係性マップ データ設計書](/design/member/member-map-data-design) |
| Ameba同期状態（`AmebaSyncStatus`） | `ameba/sync-status.json` | v9.8.0 | [Amebaブログ機能 データ設計書](/design/sns/ameba-data-design) |

---

## 改訂履歴

| 版 | 更新日 | 変更内容 |
| --- | --- | --- |
| 1.10 | 2026-08-06 | プライマリデータに `radar-chart-timeline-config.json`（レーダーチャート時系列表示の終端日設定）を追加。更新方法にAPIエンドポイントパス（`/api/radar-chart-timeline-config`）を明記（#34） |
| 1.9 | 2026-07-21 | メンバー・リリース データ設計書を新規作成し、エンティティ一覧の詳細設計書列（メンバー・リリース・メンバー・リリース紐付け・リリース(DB)）にリンクを追加（#1379） |
| 1.8 | 2026-07-20 | Amebaブログ同期状態セクション・エンティティ（`AmebaSyncStatus`、`ameba/sync-status.json`）を追加（#1387） |
| 1.7 | 2026-07-19 | ラジオ・年表・YouTube・メンバー関係性マップのエンティティを追加。TikTokのデータファイル一覧セクションを削除しエンティティ一覧の格納場所をNeonに是正（実装は#888で移行済み）。Amebaブログデータの格納先を`members.json`の概要に追記。エンティティ一覧の一部行に残っていた物理テーブル名（`venues`等）をPrismaモデル名に是正し、`er-diagram.mdx`にのみ存在していたフェス・リリース(DB)・収録曲(DB)・収録曲外部リンク(DB)の4行を追加（#1374） |
| 1.6 | 2026-05-15 | TikTok投稿データセクション・エンティティを追加（#887） |
| 1.5 | 2026-04-29 | 歌詞リンクデータセクションを追加（#745） |
| 1.4 | 2026-04-26 | Instagram投稿データセクション・エンティティを追加（#715） |
| 1.3 | 2026-04-11 | エンティティ一覧にライブ機能 Neon テーブルを追加（#528） |
| 1.2 | 2026-03-30 | データファイル・エンティティ一覧にユニット一覧機能（#531）の項目を追加（#532） |
| 1.1 | 2026-03-28 | 派生データ・エンティティ一覧に曲対比機能（#474）の項目を追加（#489） |
| 1.0 | 2026-03-21 | 初版作成 |
