# CSV定義書

更新日: 2026-10-12。スキーマ版: 2。対象: list.csv。1行が1人のコスプレイヤーを表します。現在628名（2026-10-16時点）。

## ファイルと更新

list.csv が管理元です。data.js・data.json・list.md はCSVから生成する表示用ファイルです。index.html は data.js を読み込み、インターネット接続がなくても一覧部分を表示できます。プロフィール画像と外部SNSへのアクセスには接続が必要です。CSV変更後は同じフォルダーの 更新.ps1 を実行してから一覧を再読み込みしてください。日々の自動実行でも同じ更新処理を使用します。生成ファイルを手で直しても次回生成時に置き換わります。

文字コードはUTF-8 BOM付き、行末CRLF、区切りは半角カンマ。先頭行は見出し。全フィールドをダブルクォートで囲み、内部のダブルクォートは2個重ねます。Excelで保存する場合もUTF-8のCSVを選び、列名とIDを保持してください。日付はYYYY-MM-DD。CSV列内の日付はSNS JSONや補足JSONに保存します。

## 列定義

|列番号|列名|型|定義・入力ルール|
|---:|---|---|---|
|1|ID|number|必須。正の整数、一覧内で一意。変更・再利用しない。|
|2|国・地域|text|日本・韓国・中国・台湾。本人の公開活動拠点に基づく分類。|
|3|名前|text|必須。本人の公開活動名。|
|4|ローマ字|text|検索・名前順の表示用。未確認は空欄。|
|5|SNS（JSON）|array|本人SNSの配列。各要素にplatform、handle、url。人数はfollowers、人数出典はfollowers_source、時点はas_of。|
|6|主なSNS|text|カードの人数に対応する媒体名。|
|7|主なSNSフォロワー|number|人数の整数。未確認は空欄。人数下限はない。丸め表示は概数の整数で保存。|
|8|主なSNS表示名|text|カードに表示する媒体ラベル。|
|9|Xフォロワー|number|Xの人数。未確認・Xなしは空欄。SNS列にも取得日と出典を記録する。|
|10|作風|text|一般・セクシー寄り・未確認。水着やバニー等の繰り返し投稿を確認してセクシー寄りにする。|
|11|タグ（JSON）|array|撮影会・VTuber系・要確認などの文字列配列。|
|12|作品（JSON）|array|本人投稿等で確認した作品名の文字列配列。|
|13|得意キャラ（JSON）|array|本人投稿等で確認したキャラクター名の文字列配列。|
|14|一言メモ|text|活動内容や撮影会の過去実績など。未確認事項を断定しない。|
|15|年齢根拠|text|公開された生年月日などの根拠。年齢不詳は掲載可、既知の未成年は除外。|
|16|年齢確認状態|text|確認・未確認など、根拠に対応した状態。既存表記は保存。|
|17|有料サイト（JSON）|array|Fantia・FANBOX・Patreon・OnlyFansなどの文字列配列。リンクがあるだけでは除外しない。|
|18|出典URL（JSON）|array|確認に使用した公開ページURLの文字列配列。|
|19|プロフィール画像URL|text|本人プロフィール画像URL。未確認は空欄。|
|20|別名（JSON）|array|旧活動名・旧ハンドル等。重複照合に使う。|
|21|要確認状態|text|要確認なら🟡マーク表示。通常は空欄。|
|22|要確認理由（JSON）|array|未確認事項または通常条件との例外理由を文字列配列で保存。要確認なら必須。|
|23|補足（JSON）|object|国地域根拠・作風根拠・作風確認日・追加日など上記以外の既存情報を保存。形式は定義書参照。|

## JSONセル

配列はJSON形式です。値なしは [] とします。タグなどを「・」区切りや「/」区切りに変えないでください。例: ["撮影会","要確認"]。SNSの例: [{"platform":"X","handle":"@example","url":"https://x.com/example","followers":1234,"followers_source":"https://x.com/example","as_of":"2026-10-12"}]。これは記法例で実在の登録者ではありません。followers が未確認なら項目を省くか null にし、0とは区別します。SNSの取得日・出典はそれぞれの要素に付けます。

補足JSONは {"fields":{...},"present":[...]} です。fields に country_basis、style_basis、style_reviewed_at、added_at、discovery_sources、eligibility_basis など、個別列にない公開根拠・履歴を保存します。既存行のpresentは移行前に存在した属性名で、欠けていた値と空欄の区別を保持するための情報です。既存値を変える際は保持してください。presentは通常編集不要です。以前は空だった列に新しい値を入力した場合は、その値も取り込みます。新規行は {"fields":{"added_at":"2026-10-12"}} のようにpresentを省略できます。原則としてCSVの既存行を丸ごと消して作り直さないでください。

## 入力と確認

ID・名前・国・SNSは必須。IDは既存最大値+1を使い、並べ替えてもIDは変更しません。名前だけで同一人物と断定せず、別名・旧ハンドル・本人SNSを照合します。SNS URLは本人と確認したhttps/httpのURLのみ。主なSNS、主なSNS表示名、主なSNSフォロワーはカード表示に使い、対応するSNS JSONの人数と整合させます。主なSNS・Xの人数未確認は空欄。人数は掲載可否に使いません。

🟡要確認なら要確認状態を「要確認」、要確認理由JSONを空ではない配列、タグJSONにも「要確認」を入れます。作風未確認は「未確認」。年齢不詳は「年齢確認状態」を「未確認」にします。公開された成人の根拠がない場合、成人と断定しません。既知の未成年は追加しません。

## 更新コマンド・保全

更新.ps1 は既存のNode.jsまたはCodex同梱Node.jsで sync-data.mjs を実行します。検証だけなら node sync-data.mjs --check。生成前にID重複・必須項目・JSON・SNSの形式を確認し、不正なら更新を止めます。生成済みファイルは backups/sync-日時/ に保存します。CSVを直接編集する前も必ずコピーを保存してください。CSVを元に data.js を生成し、そこから一覧が表示されます。ブラウザーはCSVを直接fetchしません。

## 移行

旧19列CSVは、区切り記号の混在とJSON側のみの保留理由・別名を解消するため23列に更新しました。今回の611名についてCSV→JSONの往復一致を確認しています。過去の情報・メモにある「1万人」の記載は当時の掲載根拠の履歴であり、今後の追加条件ではありません。最新の条件は 掲載条件.md を参照してください。

