コンテンツ(Content)
Markdownの解析とプラグインの処理を経たコンテンツ項目です。frontmatter、描画済みのHTML、解決済みの公開先を持つため、Riebeckiteは生のファイルではなく処理済みの項目を扱います。
ファイルではなく処理済みの項目
Riebeckiteはファイルを読み取り、解析し、プラグインのパイプラインに通してから、サイト上の公開先を解決します。それ以降に扱うのはすべてコンテンツです。エントリ、その公開先、関係が含まれます。
コンテンツを問い合わせるコードは、ファイルシステムではなくマニフェストを読みます。
コンテンツ項目の流れ
- コンテンツソースがファイルを見つけて読み取ります。
- コンテンツマネージャーが解析し、パイプラインを実行します。
- 公開先の解決がパーマリンクを割り当てます。
- 項目はコンテンツエントリとしてマニフェストに記録されます。
コンテンツ処理のモジュール
Riebeckiteのコンテンツパイプラインは、それぞれ役割を絞った複数のモジュールで構成されています。
-
content_manager.ts(packages/core/src/content/content_manager.ts)— ビルドフロー全体を調整します。コンテンツソースの走査、コンテンツインデックスの構築、公開先の解決、Pipelineによるプラグインパイプラインの実行、マニフェストとコンテンツグラフの構築、増分ビルド状態のコミットを行います。プラグインの実行環境、コンテンツインデックスのビルダー、ビルドコーディネーターの間を調整します。 -
content_collection.ts(packages/core/src/content/content_collection.ts)—ContentCollectionDefinition、ContentCollection、およびマニフェストのエントリをタクソノミー・日付・フォルダーベースの一覧にまとめるbuildContentCollections関数を定義します。ページネーション、並べ替え、フィルターに対応します。 -
content_graph.ts(packages/core/src/content/content_graph.ts)— コンテンツグラフをContentGraph型として表し、ノード、被リンク・発リンク、隣接ノードを問い合わせるメソッドを持ちます。マニフェストのoutgoingLinksとincomingLinksから、runGraphHookの実行中に構築されます。 -
content_index_builder.ts(packages/core/src/content/content_index_builder.ts)— slugの異形(大文字小文字を無視した形やエイリアスの対応を含む)を正規のslugへ対応付けるコンテンツ解決インデックスを構築します。resolveContentIndexで候補を1つの解決にまとめ、曖昧なものは診断用に記録します。
コンテンツマニフェストのエントリ
マニフェストの各コンテンツエントリはContentManifestEntry(packages/core/src/types/content_manifest.ts)で型付けされています。主なフィールドは次のとおりです。
slug— 内部的な検索キーpermalink— 解決済みの正規の公開URLpublicLocation— slug、permalink、任意のリダイレクト、メタデータを組み合わせたものcontentId— frontmatterに著者が書く安定した識別子で、slug/permalinkとは独立frontmatter—PostFrontmatter。id、title、description、date、published、tagsなどのメタデータを含むhtml— 処理済みのMarkdown HTML本文aliases— ノートの代替の検索キーtagsとlinks— 処理中に収集したタクソノミーとWikiLink/MMDリンク
エントリ構造の例:
{
slug: "notes/hello",
permalink: "/docs/notes/hello/",
contentId: "abc123",
frontmatter: {
id: "abc123",
title: "Hello World",
tags: ["intro"],
},
html: "<p>Hello world</p>",
tags: ["intro"],
links: [],
backlinks: [],
assets: [],
}