SQLiteを「索引」として使う
このCMSでは、記事の正本は content/ 配下の Markdown ファイルで、SQLite には一覧表示と絞り込みのための索引だけを持たせています。
正本はファイル、DBは従
| 役割 | 持ち場 |
|---|---|
| 記事本文・メタデータの正本 | content/*.md(フロントマター付き) |
| 一覧・絞り込み・集計 | SQLite(entries テーブル1枚) |
DBは content/ を走査すればいつでも全再構築できるようにしてあります。つまり消えても困りません。
この分担の何がよいか
- エディタでもAIエージェントでも直接編集できる。 .md を直接書き換えても、再索引すれば整合します。DBが正だと、DBを経由しない編集がすべて「不整合」になります。
- バックアップが単純。 ファイルをコピーすれば全部です。
- 移行が楽。 別のサーバーへはファイルを持っていくだけ。SQLiteファイルは持っていっても、作り直してもよい。
実装の注意
- 再構築は「全消し→全挿入」の単純方式。記事数百本なら一瞬で終わるので、差分更新の複雑さを持ち込む理由がありません。
- 書き込みはすべて PDO のプリペアドステートメントで行います。索引とはいえ、フロントマター由来の文字列(=入力)を扱うことに変わりはないからです。
「凝った仕組みより、壊れても作り直せる仕組み」。小さな道具ほど、この方針が効いてきます。