このサイトの記事管理を microCMS から Payload CMS に移行しました。見た目はほとんど変わっていませんが、裏側はひととおり作り直しています。
構成
公開サイトと CMS は別々のプロジェクトとして動いています。公開サイトは記事を GraphQL で読み取り、記事を公開すると CMS から通知が飛んでキャッシュだけが更新される、という形です。
- 公開サイト: Next.js(App Router / ISR)
- CMS: Payload CMS(cms.poyosi.com)
- データベース: Neon Postgres
- 画像: Vercel Blob
記事のデータベースは普段眠っていて構わない設計にしました。ページはキャッシュから配信され、公開したときだけ必要な場所が更新されます。
増えたもの
- タグ(記事の下のタグから一覧に飛べます)
- 公開日ごとのアーカイブ
- RSS フィード
- 下書きプレビュー
- コードのシンタックスハイライト
ハイライトはこんな見え方になります。
const posts = await getPostsPage(1)
for (const post of posts.items) {
console.log(post.publishedAt, post.title)
}
URL について
記事の URL は /posts/{数字} の形になりました。タイトルを変えても URL は変わりません。旧 /blog 以下は /posts へリダイレクトしています。
移行にあたって以前の記事は引き継いでいないので、ここが最初の1本です。