logo hsb.horse

Architecture Decision Record

ブログContent Collection設計

ブログ記事をMarkdown/MDXで管理するためのスキーマと運用ルールを定義する。

採用 #blog #content #architecture

ブログContent Collection設計

Decision

  • ブログ記事は /blog 配下の Markdown/MDX ファイルで管理する。
  • Frontmatter は以下のスキーマとする。
    • title(必須・string)
    • description(任意・string)
    • publishedAt(必須・date)
    • updatedAt(任意・date)
    • draft(任意・boolean、デフォルト false
    • tags(任意・string[])
    • image(任意・string)
    • noindex(任意・boolean、デフォルト false
    • lang(任意・string、デフォルト ja
    • slug(任意・string、未指定時はファイル名由来)
    • prev(任意・true | false | string、明示的に前後リンクを制御)
    • next(任意・true | false | string、明示的に前後リンクを制御)
  • URL は i18n 方針に従い、langslug の組み合わせで決定する。言語違いの記事は同一の slug を使用する。
  • 一覧の並び順は publishedAt を基準とし、更新表示には updatedAt を使用する。
  • draft は公開一覧/フィード/ビルド対象から除外するためのフラグとする。
  • noindex は検索エンジンのインデックス除外を意図するメタデータとする。

Context

ブログを長期的に運用するためには、記事の一覧・詳細・SEOメタデータを安定して生成できる統一スキーマが必要だった。i18n 方針(日本語をデフォルトとし、追加言語はサブディレクトリ)にも整合する必要がある。

Options

  • Markdown/MDX + Content Collection
  • 外部CMS(Headless CMS)
  • JSON/TS での手動管理

Rationale

  • Markdown/MDX は執筆・レビューのコストが低い。
  • Content Collection のスキーマ定義により、ビルド時に整合性を担保できる。
  • i18n 方針に合わせて langslug を明示し、URLの一貫性を保てる。

Consequences

  • すべてのブログ記事は上記スキーマに従う必要がある。
  • draftnoindex の運用ルールを共有し、公開判断の基準を明確にする。
  • lang の追加時は同一 slug で翻訳版を作成する運用が前提になる。