2021年1月、ryus.dev に Markdown 記事をブラウザから編集できる CMS を足してみた。結論から言うと、半年もせず捨てた。

やったこと

  • pages/cms/index.tsx — 記事一覧・編集 UI
  • pages/api/cms/articles/ — Markdown ファイルの CRUD API
  • modules/articles.ts — ファイル読み書きの共通処理
// pages/api/cms/articles/index.ts のイメージ
export default async function handler(req, res) {
  if (req.method === 'GET') {
    const articles = await listArticles();
    return res.json(articles);
  }
  if (req.method === 'POST') {
    await saveArticle(req.body.filename, req.body.content);
    return res.status(201).json({ ok: true });
  }
}

ローカル開発では動いた。Markdown を直接編集するより、フォームから触れるのは楽だった。

捨てた理由

2021年11月の Next.js 12 アップグレード時に CMS 関連コードをまとめて削除した。理由は3つ。

  1. 認証が雑だった — 本番公開するには OAuth か Basic 認証の整備が必要で、個人ブログにはオーバーキル
  2. Git で十分 — 結局 Markdown を git push する方が履歴も残る
  3. Pages Router の API Routes 維持コスト — App Router 移行を見据えると、CMS 専用 API は負債になりやすい

学び

個人ブログの CMS は「作れる」より「運用できるか」が勝負。Git + GitHub の PR フローに戻したのは正解だったと今も思う。