フロントマターのYAMLは「全部」対応しなくていい
Markdown記事の先頭に書くメタデータ(フロントマター)はYAML形式が事実上の標準です。ただ、自作CMSでYAMLに完全対応する必要はありません。むしろサブセットに絞るほうが安全でした。
対応したのはこれだけ
title: "記事タイトル" # 文字列(引用符あり/なし)
tags: [php, markdown] # インライン配列
categories: # ブロックリスト
- 技術/PHP
status: published # 真偽値・nullも可
ネストしたマップ、アンカー/エイリアス、複数行文字列などは非対応です。使わないからです。
「暗黙の型変換」をあえてしない
YAML準拠のパーサは date: 2026-07-09 を日付型に、version: 1.10 を数値 1.1 に変えてしまうことがあります。この「気を利かせた変換」が事故のもとなので、自作パーサはすべて文字列で返す仕様にしました。日付として解釈するかどうかは、受け取る側が明示的に決めます。
罠は仕様に書いておく
サブセットでもYAMLの流儀に従う部分は残ります。たとえば引用符なしの値では # 以降がコメント扱いになるので、title: PHP #1の話 は「PHP」に切り詰められます。
対応しない機能を決めることと、残した機能の罠を文書化すること。自作の実用性はこの2つで決まります。
管理画面から保存するときは文字列値を常に引用符付きで書き出すようにして、この罠を構造的に踏まないようにしています。