---
title: "ツアー・ライブ日程登録 運用手順"
---

## 概要

新しいツアーの公演日程を `scripts/console/register-tour-lives.ts` を使って Neon（`tours`・`lives`・`venues` テーブル）へ登録する手順。関連: #1305

対象テーブルの定義は `docs/design/live/live-data-design.mdx` を参照。

---

## 役割分担

| # | ステップ | 担当 | 内容 |
| --- | --- | --- | --- |
| 1 | CSV準備 | ユーザー | 下記フォーマットで `data/inputs/lives.csv` を用意し共有する |
| 2 | 未登録会場チェック | Claude | `venues` テーブルと突き合わせ、未登録の会場名を洗い出す |
| 3 | 補助データ作成 | Claude | 未登録会場についてWeb検索で都道府県・緯度経度を調査し `data/inputs/new-venues.csv` を作成する |
| 4 | スクリプト実行 | Claude | `register-tour-lives.ts` を実行し、Neonへ登録する |
| 5 | 結果確認 | ユーザー / Claude | 登録件数・エラーの有無を確認する |

ユーザーが用意するのは手順1のCSVのみでよい。会場の都道府県・座標調査（手順2・3）はClaude側で毎回対応する。

---

## 手順1: 入力CSVフォーマット（`data/inputs/lives.csv`）

- 1行目: `tourId,title`（ツアーID・ツアータイトル）
- 2行目以降: `date,time,venueName`（開催日・開場時間・会場名）の繰り返し

```csv
2026C,モーニング娘。'26 コンサートツアー秋「超 Heartful 11」
2026-09-05,13:30,和光市民文化センター
2026-09-05,17:30,和光市民文化センター
2026-09-06,13:00,和光市民文化センター
2026-09-12,13:30,レクザムホール
```

- `tourId` は年 + 識別子（例: `2026C`）。既存の `tourId` を指定した場合はタイトルを更新するのみで、既存公演は変更しない
- 日付は `YYYY-MM-DD`、時刻は `HH:MM`（24時間表記）
- `data/inputs/lives.csv` は一時データであり、コミット対象外（実行のたびに用意する）

---

## 手順2〜3: 未登録会場のチェックと補助データ作成

`register-tour-lives.ts` は会場名を `venues` テーブルと**完全一致**で照合する。一致しない会場名があると、都道府県が決まらず `venue_id`（都道府県2桁+連番3桁）を採番できないため、スクリプトはエラーで停止し未登録の会場名を列挙する。

このため、実行前にClaudeが以下を行う:

1. `data/inputs/lives.csv` 中の各会場名を `venues` テーブル（またはシード元の `data/samples/venues.csv`）と照合する
2. 一致しない会場名があれば、Web検索で「(会場名) 住所 緯度経度」を調べ、住所から都道府県のJIS 2桁コードを判定する
3. 調査結果を `data/inputs/new-venues.csv` にまとめる（同じく一時データ・コミット対象外）

```csv
name,prefecture,latitude,longitude
和光市民文化センター,11,35.781454,139.606979
水戸市民会館,08,36.379155,140.464872
```

- `prefecture` はJIS 2桁コード（都道府県コード変換テーブル `prefecture_codes` の値と対応。例: 東京都=`13`、埼玉県=`11`）
- `venue_id` はスクリプト側が都道府県ごとの既存連番から自動採番するため、本ファイルには含めない
- 未登録会場がない場合、本ファイルは不要（用意しなくてよい）

---

## 手順4: スクリプト実行

```bash
# .env.local に DATABASE_URL（Neon接続文字列）を設定しておくこと
bun run scripts/console/register-tour-lives.ts
```

### スクリプトの動作

- `tours`: `tourId` で upsert（既存なら `title` を更新、無ければ新規作成）
- `venues`: 会場名で検索し、一致すれば既存 `venueId` を使用。無ければ `data/inputs/new-venues.csv` から都道府県別の連番を採番して新規作成
- `lives`: 同一 `tourId` 内で `(date, time, venueId)` が既存と一致する公演はスキップする（**冪等**）。一致しなければ `tourId + 3桁連番` で `live_id` を採番して新規作成

冪等な設計のため、同じCSVを誤って複数回実行しても重複登録されない。また、後日追加公演が発表された場合も、既存分を含む更新後のCSVで再実行すれば差分（追加公演）のみ登録される。

`data/samples/*.csv`（初回一括シード用データ）への書き戻しは行わない。`prisma/seed.ts`（フル再シード）は初期構築・災害復旧用の別系統であり、本スクリプトによる追加分は対象外となる。

---

## 手順5: 結果確認

実行ログに以下が出力される:

- 新規作成したツアー（あれば）
- 新規作成した会場（件数・名称）
- 新規作成した公演（件数）
- 既存のためスキップした公演（件数）

エラーで停止した場合は「未登録の会場名」が列挙されるため、手順2〜3に戻って `data/inputs/new-venues.csv` を追加・修正してから再実行する。

---

## 関連ファイル

| ファイル | 役割 |
| --- | --- |
| `scripts/console/register-tour-lives.ts` | 登録スクリプト本体 |
| `data/inputs/lives.csv` | 入力（ツアー・公演日程、一時データ） |
| `data/inputs/new-venues.csv` | 入力（新規会場の都道府県・座標、一時データ、必要な場合のみ） |
| `docs/design/live/live-data-design.mdx` | `tours`・`lives`・`venues` テーブル設計書 |
