SQLiteを「索引」として使う

このCMSでは、記事の正本は content/ 配下の Markdown ファイルで、SQLite には一覧表示と絞り込みのための索引だけを持たせています。

正本はファイル、DBは従

役割持ち場
記事本文・メタデータの正本content/*.md(フロントマター付き)
一覧・絞り込み・集計SQLite(entries テーブル1枚)

DBは content/ を走査すればいつでも全再構築できるようにしてあります。つまり消えても困りません。

この分担の何がよいか

  1. エディタでもAIエージェントでも直接編集できる。 .md を直接書き換えても、再索引すれば整合します。DBが正だと、DBを経由しない編集がすべて「不整合」になります。
  2. バックアップが単純。 ファイルをコピーすれば全部です。
  3. 移行が楽。 別のサーバーへはファイルを持っていくだけ。SQLiteファイルは持っていっても、作り直してもよい。

実装の注意

  • 再構築は「全消し→全挿入」の単純方式。記事数百本なら一瞬で終わるので、差分更新の複雑さを持ち込む理由がありません。
  • 書き込みはすべて PDO のプリペアドステートメントで行います。索引とはいえ、フロントマター由来の文字列(=入力)を扱うことに変わりはないからです。

「凝った仕組みより、壊れても作り直せる仕組み」。小さな道具ほど、この方針が効いてきます。