Astro の Content Collections は、フロントマターのゆれを早い段階で潰せる強力な仕組みです。 この記事では、運用しているうちに「最初からこうしておけばよかった」と感じた小さな Tips をまとめます。

結論

  • カテゴリは z.enum([...]) で固定し、string では持たない
  • 日付は z.coerce.date() で受ける (フロントマターは文字列で書きやすい)
  • slug はスキーマに入れない。Astro がファイルパスから推論する
  • tagsz.array(z.string()).default([]) で空配列のデフォルトを用意する

前提

  • Astro 5 系の astro:content を使用
  • TypeScript strict モードで運用

ハマりがちな点

slug を schema に書くとビルドで怒られる

slug は予約フィールドのため、スキーマに含めると型エラーになります。 ファイル名から生成されたものをそのまま信頼するのが安全です。

draft 除外は一覧と詳細の両方で行う

draft: true の記事は、一覧ページのフィルタと getStaticPaths の paths 両方で除外する必要があります。 片方を忘れると、URL 直叩きでアクセスできてしまいます。

まとめ

  • スキーマは早めに固める方が、後の運用が圧倒的に楽になる
  • enum を使えるところは可能な限り enum にする
  • このサイトの構成判断は Build にもまとめています