マニフェスト
マニフェストは、ビルド時に確定したコンテンツの一覧です。各エントリには、たとえば次の情報が含まれます。
- 論理パス
- メタデータ
- 公開先
- プラグインによる処理結果
- 増分ビルドに必要な情報
Diagram source
flowchart LR
Manager["ContentManager"]
Manifest["マニフェスト"]
Manager --> Manifest
Manifest --> Page["ページ生成"]
Manifest --> Runtime["実行環境からのクエリ"]
Manifest --> Build["増分ビルド"]
Manifest --> Inspect["コンテンツの検査"]
マニフェストは、コンテンツシステムが解決した結果を他の仕組みへ渡す境界です。各利用側が Markdown を読み直して同じ情報を再計算するのではなく、解決済みのマニフェストを利用します。
コンテンツグラフ
コンテンツグラフは、コンテンツ同士の関係を表します。たとえば、次の WikiLink があれば、記事 A から記事 B への関係が成り立ちます。
[[Article B]]
Diagram source
graph LR
A["記事 A"] --> B["記事 B"]
この情報からバックリンクも扱えます。
Diagram source
graph LR
A["記事 A"] --> B["記事 B"]
C["記事 C"] --> B
B -. "backlinks" .-> A
B -. "backlinks" .-> C
コンテンツグラフは、単なるグラフ表示用のデータではありません。たとえば、次の機能の基盤として利用できます。
プラグインは、次のフックを使ってグラフへ情報を追加できます。
extendContentGraph
コンテンツクエリ
ビルド後のコンテンツを検索・整理するために、クエリ API が用意されています。代表的な API は次のとおりです。
queryContentEntries
queryContentPage
groupContentEntries
これらはファイルを検索する API ではありません。
Diagram source
flowchart LR
Files["Markdown ファイル"]
Build["ビルド / ContentManager"]
Index["解決済みコンテンツインデックス"]
Query["コンテンツクエリ"]
Result["結果"]
Files --> Build
Build --> Index
Query --> Index
Index --> Result
クエリは、ビルド時にすでに解決されたインデックスに対して実行します。実行環境やプラグインが Markdown を直接読み直し、独自に状態を再構築することは避けてください。
コンテンツコレクション
buildContentCollections は、複数のコンテンツを一覧として扱うための仕組みです。たとえば、次のような処理に利用できます。
すべての記事
↓
日付順に並べる
↓
タグごとに分類する
↓
ページ単位に分割する
pageSize を指定すると、ページネーションも扱えます。
Diagram source
flowchart LR
Entries["公開済みエントリ"]
Sort["並べ替え"]
Group["グループ化"]
Paginate["ページ分割"]
Pages["コレクションページ"]
Entries --> Sort
Sort --> Group
Group --> Paginate
Paginate --> Pages
プラグインやサイトアプリケーションは、この仕組みを使って記事一覧やタグ一覧などを作成できます。
アセット
画像や添付ファイルは、Markdown 本文とは別のエントリとして扱います。たとえば、次のような構成があるとします。
content/
├─ article.md
└─ images/
└─ example.png
この場合、Riebeckite はアセットの論理パスを保ちながら、サイト上で利用できる URL へ対応付けます。
Diagram source
flowchart LR
Asset["コンテンツアセット<br/>images/example.png"]
Resolver["アセットの解決"]
Public["公開アセット URL"]
Asset --> Resolver
Resolver --> Public
実際の URL 形式は、プラグインや設定によって変わる場合があります。
コンテンツルートの外にある任意のファイルを公開 URL に変換しないことが重要です。コンテンツシステムの公開境界を通して、公開対象を安全に決定します。