Design
Context¶
現状: dev-fixtures/data/ には17件のセッションJSON(index.json + sessions/*.json)が存在するが、これらに対応する元のTeams出席レポートCSVファイルが存在しない。
課題: アップロードフローのE2Eテスト、デモ、ドキュメント用途でCSVテストデータが必要。
制約:
- Teams出席レポート形式(UTF-16LE / タブ区切り / 3セクション構成)に準拠
- CsvTransformer での変換結果が dev-fixtures の JSON と一致する必要がある
- ID生成ロジック:
SHA-256(input).substring(0, 8)— 一方向関数のため逆算不可 - 既存のテスト(
pnpm test)はすべてパスする必要がある
Goals / Non-Goals¶
Goals:
- 17件のTeams出席レポート形式CSVファイルを
dev-fixtures/csv/に作成 - CSVから生成されるID(groupId, memberId, sessionId)に合わせて
dev-fixtures/data/のJSONを更新 - CSV → JSON 変換結果の一貫性を保証
- E2Eテストとデモで使用可能なテストデータの提供
Non-Goals:
- 本番環境のデータフォーマット変更
- CsvTransformer のロジック変更
- 実際のメールアドレスの使用(ダミーで十分)
Decisions¶
1. CSV ファイルの配置場所¶
決定: dev-fixtures/csv/ ディレクトリを新規作成
理由:
dev-fixtures/data/と並列に配置することで、入力(CSV)と出力(JSON)の関係が明確- テストデータであることが一目瞭然
- Vite の
public/には含めない(開発専用)
2. メールアドレスの生成方法¶
決定: ダミーメールアドレスを使用(example.com ドメイン)
パターン:
suzuki.taro.a@example.com→ memberId:c6606539(既存と一致するように調整)- 各メンバーに固有のメールアドレスを割り当て
- メールアドレスから SHA-256 ハッシュを計算し、先頭8桁が既存の memberId と一致するまで調整
理由:
- 実際のメールアドレスは不要(テストデータとして十分)
- 既存の memberId を維持することで、既存のテストへの影響を最小化
3. JSON の更新方針¶
決定: CSVをCsvTransformerに通して生成されるIDに合わせて、既存のJSONを更新する
手順:
- 各メンバーの既存 memberId に対応するメールアドレスを逆算(ブルートフォース)
- 各グループの既存 groupId に対応するグループ名を逆算(ブルートフォース)
- 対応するCSVファイルを作成
- CsvTransformer で変換して生成されるJSONを検証
- 既存のJSONを更新
代替案:
- ❌ 既存のJSONをそのままにして、CSVから生成されるIDを無視 → 一貫性がない
- ✅ 既存のIDに合わせてCSVを調整 → 一貫性を保証
4. CSV フォーマット¶
決定: Teams出席レポート形式(UTF-16LE / タブ区切り)に準拠
構造:
1. 要約
会議のタイトル {グループ名}
開始時刻 {YYYY/M/D HH:MM:SS}
2. 参加者
名前 メール アドレス 会議の長さ
{参加者名} {メールアドレス} {X 時間 Y 分 Z 秒}
3. 会議中のアクティビティ
(空)
理由:
- CsvTransformer が期待する実際のフォーマットに一致
- E2Eテストで実際のアップロードフローを再現可能
5. ファイル命名規則¶
決定: {グループ名}-{YYYY-MM-DD}.csv
例:
フロントエンド勉強会-2026-01-15.csvTypeScript読書会-2026-01-20.csv
理由:
- セッションJSONのファイル名(
{sessionId}.json)と対応 - 日付順でソート可能
Risks / Trade-offs¶
[Risk] 既存の memberId / groupId の逆算が困難 → Mitigation: SHA-256 の先頭8桁が一致するまでブルートフォースでメールアドレス・グループ名を探索。計算量は多いが、一度だけの作業なので許容可能。
[Risk] 既存のテストが依存している ID が変わる可能性 → Mitigation: 既存の ID に合わせて CSV を調整することで、ID の変更を避ける。テストの更新は最小限に抑える。
[Trade-off] 実際のメールアドレスではなくダミーを使用 → テストデータとして十分。本番環境のデータフォーマットは変更しないため、問題なし。
[Trade-off] 逆算に時間がかかる可能性 → 一度だけの作業なので許容可能。スクリプトを作成して自動化する。