キャッシュバージョン(Cache Version)
永続コンテンツキャッシュのスキーマバージョンで、キャッシュスキーマ間の互換性と移行を制御します。
スキーマバージョン
CONTENT_CACHE_SCHEMA_VERSION(現在は5)は、キャッシュの構造が変わったときに上がります。
CONTENT_CACHE_COMPATIBILITY_VERSION(現在は3)は、振る舞いや取り決めが変わったときに変わります。
スキーマバージョンが一致しないエントリはミスとして扱われ、再処理されます。
移行
スキーマバージョンが一致しないときは.riebeckite/cacheを削除し、コールド処理を強制します。
ビルドログは、互換性のないスキーマバージョンを持つキャッシュエントリがあるとschema-missを報告します。
スキーマバージョンの定数
キャッシュのバージョン管理は、packages/core/src/content/content_persistent_cache.tsで定義された2つの定数で制御します。
- CONTENT_CACHE_SCHEMA_VERSION(現在は5):キャッシュの構造が変わったときに上がります。スキーマバージョンが一致しないエントリはミスとして扱われ、再処理されます。
- CONTENT_CACHE_COMPATIBILITY_VERSION(現在は3):振る舞いや取り決めが変わったときに変わります。
キャッシュ検索時の互換性チェック
キャッシュ検索では、createPersistentContentCache(packages/core/src/content/content_persistent_cache.ts)のlookupメソッドがentry.schemaVersion !== CONTENT_CACHE_SCHEMA_VERSIONを確認します。バージョンが異なれば、エントリはschema-missとして扱われ、最初から再処理されます。これにより、キャッシュスキーマの構造変更は必ず次のビルドで反映されます。
キャッシュエントリの構造
永続コンテンツキャッシュのエントリ(packages/core/src/content/content_persistent_cache.tsのPersistentContentCacheEntry型)の構造は次のとおりです。
{
"schemaVersion": 5,
"key": "<computed cache key>",
"dependencies": [
{ "kind": "content", "id": "slug-name", "fingerprint": "sha256 hash" },
{ "kind": "file", "id": "path/to/file", "fingerprint": "sha256 hash" },
{ "kind": "link", "id": "link-target-slug", "fingerprint": "sha256 hash" }
],
"value": {
"frontmatter": { "title": "Example", "date": "2024" },
"html": "<p>processed HTML</p>"
}
}
エントリはschemaVersion(現在は5)、key(slug、source、frontmatter、パイプラインのフィンガープリントからcomputeContentCacheKeyで計算)、dependencies(CachedContentDependencyレコードの配列)、value(frontmatterとHTML)を含みます。検索中にentry.key !== keyであれば、エントリはkey-missとして扱われます。