2026.07.08(水) / 12:55

第1.5フェーズ:他CSVを実配置して、未整理データ一覧と正規化の精度を確認する

ID
39421
Published
2026-07-08 12:55
Modified
2026-07-08 13:18
Author
khiro
Categories
デフォルト

理由はシンプルで、まだ paiza.csv しか実在していない状態なので、Google Sheets連携を作る前に、

Euphoria / GitHub / Progate / エックスサーバー / クラウドワークス / 職務経歴

を実データとして読み込ませたときに、正規化レイヤーがちゃんと耐えられるか確認した方が安全です。

次のCodex依頼文

My Portfolioのタイムライン型ポートフォリオについて、第1.5フェーズの実装・検証をお願いします。

前回の実装では、CSV正規化レイヤー、TimelineItem / TimelineDataset、paiza.csv の公開タイムライン表示、Progate.csv の読み込み土台、詳細ページ、年別タイムライン、/dev/timeline-drafts の未整理データ確認ページまで実装済みです。

現在リポジトリ内に実在するCSVは app/data/paiza.csv のみでした。

今回は、他CSVを app/data に配置した前提で、実データを使った正規化・未整理一覧・公開制御の確認と改善をお願いします。

今回の目的

今回の目的は、Google Sheets連携へ進む前に、現状のCSV群を実際に読み込ませて、データ正規化レイヤーが壊れないか確認することです。

いきなりUIを大きく作り直すのではなく、以下を優先してください。

  • CSVごとの読み込み安定性
  • TimelineItem への正規化精度
  • date がないデータの未整理扱い
  • isPublished / needsReview による公開制御
  • 公開してはいけない情報の除外
  • /dev/timeline-drafts での確認しやすさ

対象CSV

app/data に以下のCSVを配置した前提で確認してください。

  • Euphoria.csv
  • GitHub.csv
  • paiza.csv
  • Progate.csv
  • エックスサーバー.csv
  • クラウドワークス.csv
  • 職務経歴.csv

ファイル名に日本語が含まれるため、文字化けやパスの扱いに注意してください。

実装・確認してほしいこと

1. 全CSVの存在確認と読み込み

app/data 内のCSVを確認し、存在するものだけ読み込んでください。

存在しないCSVがあっても、アプリ全体が落ちないようにしてください。

存在しない場合は空配列として扱い、開発者向けログまたは /dev/timeline-drafts 上で分かるようにしてください。

公開ページにはエラー表示を出さないでください。

2. 各CSVの正規化処理の実データ確認

既存の normalize 関数を使い、各CSVが TimelineItem に変換できるか確認してください。

必要に応じて、以下の正規化関数を修正してください。

  • normalizeEuphoriaRows()
  • normalizeGitHubRows()
  • normalizePaizaRows()
  • normalizeProgateRows()
  • normalizeXserverRows()
  • normalizeCrowdWorksRows()
  • normalizeCareerRows()

3. 未整理データ一覧の改善

/dev/timeline-drafts で、未整理データを確認しやすくしてください。

表示項目は以下を含めてください。

  • sourceType
  • sourceFile
  • category
  • title
  • sourceUrl
  • date の有無
  • year の有無
  • isPublished
  • needsReview
  • 公開候補かどうか
  • 未整理理由
  • metadata の概要

特に、なぜ公開タイムラインに出ていないのかが分かるようにしてください。

例:

  • date が未設定
  • needsReview が true
  • isPublished が false
  • sourceUrl のみで title が未確定
  • 公開候補だが詳細未整理

4. 公開タイムラインの制御確認

公開タイムラインには、以下の条件を満たすものだけ表示してください。

  • date が存在する
  • isPublished が true
  • needsReview が false

date がないデータを無理に公開タイムラインへ出さないでください。

特に以下は、初期状態では未整理・確認用に回してください。

  • Euphoria.csv
  • GitHub.csv
  • エックスサーバー.csv
  • クラウドワークス.csv
  • 職務経歴.csv

paiza.csv は引き続き公開タイムライン対象で構いません。

Progate.csv は学習投資の記録として読み込みますが、初期状態では isPublished false / needsReview true としてください。

5. セキュリティ確認

エックスサーバー.csv の「アクセス制限のログイン情報」は、絶対に公開UIに表示しないでください。

/dev/timeline-drafts にも表示しないでください。

metadata に含める必要がある場合でも、UI表示用の metadata からは除外してください。

確認項目として、以下を必ず見てください。

  • 公開トップに表示されていないこと
  • 詳細ページに表示されていないこと
  • /dev/timeline-drafts に表示されていないこと
  • HTMLソースにも出力されていないこと

6. 文字化け・CSV形式のゆらぎ対応

日本語CSV、空行、ヘッダー行のずれ、列名の揺れにできるだけ耐えられるようにしてください。

特に以下を確認してください。

  • Progate.csv の先頭空行と途中ヘッダー
  • GitHub.csv のヘッダー不整合
  • 日本語ファイル名
  • 日本語列名
  • 空欄セル
  • URLのみの行

7. 件数サマリーの追加

可能であれば、/dev/timeline-drafts にデータ件数サマリーを追加してください。

例:

  • sourceType ごとの件数
  • publishedItems 件数
  • timelineItems 件数
  • draftItems 件数
  • rawItems 件数
  • date あり件数
  • date なし件数
  • needsReview 件数

これは今後、Google Sheets連携へ進む前の検証に使います。

今回はやらなくていいこと

以下は今回やらなくて構いません。

  • Google Sheets APIの本接続
  • WordPress APIの本接続
  • 本格的なログイン機能
  • デザインの大幅変更
  • 公開タイムライン対象を無理に増やすこと
  • date がないデータの日付推定

完了条件

以下を満たしたら完了です。

  • app/data に配置された複数CSVを読み込める
  • 存在しないCSVがあっても落ちない
  • 各CSVが TimelineItem に正規化される
  • date がないデータは公開タイムラインに出ない
  • isPublished false または needsReview true のデータは公開タイムラインに出ない
  • /dev/timeline-drafts で未整理データを確認できる
  • 未整理理由が分かる
  • sourceType ごとの件数サマリーが確認できる
  • エックスサーバーのアクセス制限ログイン情報がどの画面にも表示されない
  • paiza.csv の公開タイムライン表示は壊れていない
  • 詳細ページとタイムライン現在地表示は壊れていない
  • PC / スマホのレイアウトが壊れていない

実装後にまとめてほしいこと

実装後は、以下を簡潔にまとめてください。

  • 変更したファイル
  • 追加したファイル
  • CSVごとの読み込み結果
  • sourceType ごとの件数
  • 公開タイムラインに出したデータ
  • 未整理扱いにしたデータ
  • 未整理理由の分類
  • セキュリティ上除外した項目
  • 確認したURL
  • 実行したコマンド
  • 既知の課題
  • 次の拡張案

codexに依頼

すべてを完璧に理解できたわけではないがスピード重視でいこう

それが確かな未来を生む

完了

管理画面とフロントを明確に分けたい

いいです。かなり堅くなってきました。
ここまで来たら、次は 第1.6フェーズ:実CSV配置 + /dev/timeline-drafts 保護 がよさそうです。

Google Sheets連携に進む前に、まず実CSVを app/data に置いて、本物の行揺れ・文字コード・未整理理由・機密除外 を確認するのが安全です。

次のCodex依頼文はこれでいけます。