Astro の Content Collections は、フロントマターのゆれを早い段階で潰せる強力な仕組みです。 この記事では、運用しているうちに「最初からこうしておけばよかった」と感じた小さな Tips をまとめます。
結論
- カテゴリは
z.enum([...])で固定し、stringでは持たない - 日付は
z.coerce.date()で受ける (フロントマターは文字列で書きやすい) slugはスキーマに入れない。Astro がファイルパスから推論するtagsはz.array(z.string()).default([])で空配列のデフォルトを用意する
前提
- Astro 5 系の
astro:contentを使用 - TypeScript strict モードで運用
ハマりがちな点
slug を schema に書くとビルドで怒られる
slug は予約フィールドのため、スキーマに含めると型エラーになります。
ファイル名から生成されたものをそのまま信頼するのが安全です。
draft 除外は一覧と詳細の両方で行う
draft: true の記事は、一覧ページのフィルタと getStaticPaths の paths 両方で除外する必要があります。
片方を忘れると、URL 直叩きでアクセスできてしまいます。
まとめ
- スキーマは早めに固める方が、後の運用が圧倒的に楽になる
enumを使えるところは可能な限りenumにする- このサイトの構成判断は Build にもまとめています