Design
Context¶
公開リポジトリのテストデータ・サンプルデータに実際の個人情報(実名4名、勉強会名4件)が含まれている。public/data/index.json が中心的なデータソースで、セッションファイル(public/data/sessions/*.json)やテストファイル、E2Eテスト、ドキュメントがこのデータを参照している。
データ構造は groups(勉強会)と members(メンバー)で構成され、それぞれIDで紐づいたセッションデータを持つ。データの構造やスキーマは変更せず、値のみを置き換える。
Goals / Non-Goals¶
Goals:
- すべての実名・実際の勉強会名をダミーデータに置き換える
- ダミーデータは自然で実際に存在しそうな名称を使用する(Issue要件)
- データ間の整合性を維持する(index.json、sessions、テスト、E2E、ドキュメント間)
- 既存のテストがすべてパスする状態を維持する
Non-Goals:
- データ構造やスキーマの変更
- ダミーデータ生成の自動化ツールの作成
- メンバーIDやグループIDの変更(これらは個人を特定できない)
- セッションの日付や時間データの変更
Decisions¶
1. ダミーデータのマッピング方式¶
決定: 一対一の静的マッピングテーブルを定義し、全ファイルで一貫して置換する。
理由: マッピングテーブルにより全ファイル間の整合性を保証でき、漏れなく置換できる。ランダム生成ではなく事前定義することで「実際に存在しそうな名称」という要件を満たせる。
マッピング案:
| 元の名前 | ダミー名 |
|---|---|
| 中村 充志 / Nakamura Atsushi A | Suzuki Taro A (鈴木 太郎) |
| 山浦 哲朗 / Yamaura Tetsuro | Tanaka Koji (田中 浩二) |
| 崔 文 / Sai Bun A | Yamamoto Yuki A (山本 裕貴) |
| 谷戸 大輔 / Yato Daisuke | Watanabe Kenji (渡辺 健二) |
| 元の勉強会名 | ダミー名 |
|---|---|
| もくもく勉強会 | フロントエンド勉強会 |
| React読書会 | TypeScript読書会 |
| アーキテクチャ設計塾 | ソフトウェア設計勉強会 |
| クラウド技術研究会 | インフラ技術研究会 |
代替案: Fakerライブラリで自動生成 →「実際に存在しそうな名称」の制御が難しく、再実行のたびに変わるため不採用。
2. テストデータの置換方針¶
決定: テストファイル内の「テスト太郎」「テスト花子」等の明示的なテスト用ダミー名はそのまま残すか、より自然な名前に統一する。
理由: テストファイルでは「テスト太郎」等はすでにダミーデータとして意図的に使われているが、Issue要件「実際に存在しそうな名称」に沿って、より自然な名前に統一する。
テストデータのマッピング:
| 元の名前 | ダミー名 |
|---|---|
| テスト太郎 | 佐藤 一郎 |
| テスト花子 | 高橋 美咲 |
| taro@example.com | ichiro.sato@example.com |
| hanako@example.com | misaki.takahashi@example.com |
3. 置換の実行順序¶
決定: 以下の順序で置換する:
public/data/index.json(マスターデータ)public/data/sessions/*.json(セッションデータ ─ 構造に変更がないため内容確認のみ)tests/配下のテストファイルe2e/dashboard.spec.jsdocs/architecture.md
理由: マスターデータを先に確定し、それに合わせて参照側を更新することで整合性を保つ。
Risks / Trade-offs¶
- [漏れのリスク] 全ファイルを網羅的に検索しないと置換漏れが発生する → 置換後にgrep等で元の文字列が残っていないか検証する
- [E2Eテストの失敗リスク] E2Eテストが公開データを直接参照しているため、データとテストの不整合が起きうる → マッピングテーブルに基づき正確に置換し、テスト実行で検証する
- [Gitヒストリーに残る] 過去のコミットには元のデータが残る → リポジトリの再構築(filter-branch等)はスコープ外とし、今後のコミットからクリーンにする