zudo-doc
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

フロントマタープレビュー

作成 2026年4月19日更新 2026年7月16日Takeshi Takatsudo
タグ:#content

カスタムフロントマターフィールドをページタイトルの下にメタデータテーブルとして表示するよう設定します。

フロントマター

キー
authorzudo-doc
statusstable
discountON SALE
difficultybeginner

フロントマタープレビューブロックは、カスタムフロントマターフィールドをページタイトルの下にコンパクトなキー/値テーブルとしてレンダリングします。著者情報、ステータス、バージョンなどのドキュメントメタデータを本文中に埋め込まずに表示するのに便利です。新しいscaffoldでは自動的には有効になりません。frontmatterPreviewのデフォルトはfalseであり、バインドされていないbuildFrontmatterPreviewEntriesスロットのデフォルトは() => []です。

このショーケースページがその機能のデモです。上部に表示されているauthorstatusフィールドは、このページ自身のフロントマターで宣言され、ショーケースの bindings がエントリービルダーを提供しています。

プレビューデータ binding が必要です

buildFrontmatterPreviewEntries のデフォルトは no-op です。chromeBindingsModule をそのスロットをバインドするモジュールへ向けてください。新しいルートスタブはそのモジュールをすでに消費するため編集しません。詳しくは Custom Componentsホストクロームバインディングを参照してください。

設定を有効にし、bindingsモジュールにビルダーを作成します。ビルダーのfrontmatterPreviewへ渡す値は、 zudoDoc()の設定と一致させてください。

src/chrome-bindings.ts
import { defineChromeBindings } from "@takazudo/zudo-doc/chrome-bindings";
import { createBuildFrontmatterPreviewEntries } from "@takazudo/zudo-doc/frontmatter-preview-data";
import { defaultFrontmatterPreviewIgnoreKeys } from "@takazudo/zudo-doc/frontmatter-preview-defaults";
import { frontmatterRenderers } from "./frontmatter-preview-renderers";

export const chromeBindings = defineChromeBindings({
  buildFrontmatterPreviewEntries: createBuildFrontmatterPreviewEntries({
    frontmatterPreview: {},
    defaultIgnoreKeys: defaultFrontmatterPreviewIgnoreKeys,
  }),
  frontmatterRenderers,
});
zfb.config.ts
export default defineConfig(
  zudoDoc({
    frontmatterPreview: {},
    chromeBindingsModule: "./src/chrome-bindings.ts",
  }),
);

ブロックが表示される条件

有効化してバインドした後、フィルタリングを経て少なくとも1つのフロントマターキーが残った場合のみブロックが表示されます。フレームワーク管理のキー(titledescriptionsidebar_positiontags など)はデフォルトで除外されます。すべてのキーが無視リストに含まれている場合は何も表示されません。

zfb.config.tszudoDoc({...}) の呼び出し)で frontmatterPreview: false を設定すると、すべてのページでこの機能を無効にできます。

デフォルト無視リスト

以下のキーはデフォルトで無視されます。これらはコンテンツスキームで定義されたすべてのフィールドに対応しており、再表示しても冗長になるだけです。

キー理由
titleページの h1 としてレンダリング
descriptionタイトルの下にサブタイトルとして表示
sidebar_positionナビゲーション内部メタデータ
sidebar_labelナビゲーション内部メタデータ
categoryナビゲーション内部メタデータ
tagsタグバッジとして別途レンダリング
search_excludeビルド時フラグ
pagination_nextビルド時フラグ
pagination_prevビルド時フラグ
draftビルド時フラグ
unlistedビルド時フラグ
hide_sidebarレイアウトフラグ
hide_tocレイアウトフラグ
standaloneレイアウトフラグ
slugURL オーバーライド
generatedビルド時フラグ

ビルダーをバインドすると、このリストにないキーは自動的に表示されます。

無視リストのカスタマイズ

zudoDoc({...})zfb.config.ts に設定)の frontmatterPreview フィールドには、互いに排他的な2つの設定があります。

extraIgnoreKeys — デフォルトを拡張する

デフォルト設定を破棄せずにキーを無視リストに追加します。プロジェクト全体で非表示にしたいカスタムフロントマターフィールドがある場合に使用します。

frontmatterPreview: {
  extraIgnoreKeys: ["reviewed_by", "internal_id"],
},

ignoreKeys — デフォルトを置き換える

組み込みの無視リストを完全に置き換えます。非表示にするキーを完全に制御したい場合に使用します。ignoreKeys が存在する場合、extraIgnoreKeys は無視されます。

frontmatterPreview: {
  ignoreKeys: ["title", "description", "sidebar_position"],
},

Warning

ignoreKeys を使用する際に標準スキーマキーを含めないと、draftunlisted などのフレームワーク内部フィールドがテーブルに表示される可能性があります。ほとんどの場合、extraIgnoreKeys を使用する方が安全です。

機能を無効にする

frontmatterPreview: false を設定すると、すべてのページからブロックを一括削除できます。

frontmatterPreview: false,

使用例

次のフロントマターは authorstatus が表示されるプレビューテーブルを生成します。titledescriptionsidebar_position はフィルタリングされます。

---
title: My Release Notes
description: What changed in v2.
sidebar_position: 5
author: Jane Doe
status: released
---

レンダリングされたテーブル:

キー
authorJane Doe
statusreleased

完全な設定リファレンスについては、設定 — frontmatterPreview を参照してください。

カスタムレンダラー

デフォルトでは、フロントマターの値はプレーンテキストとしてレンダリングされます。値をスタイル付きコンポーネント(カラーピル、リンク、アイコンなど)に置き換えるには、独自のレンダラーマップを作成し、上記のfrontmatterRenderersスロットからバインドします。このリポジトリのsrc/config/frontmatter-preview-renderers.tsxsrc/chrome-bindings.tsxを通すショーケース配線の例です。新しいscaffoldにはどちらのファイルもありません。

コンポーネントの型

各レンダラーは @takazudo/zudo-doc/metainfoFrontmatterCellRendererProps を受け取る Preact コンポーネントです:

プロップ説明
valueNonNullable<unknown>フロントマターの値(null/undefined は渡されません)
entryKeystringフロントマターのキー名
dataRecord<string, unknown>現在のページのフロントマター全体
localeLocale | undefinedアクティブなロケール

レンダラーの登録

独自のレンダラーマップにキーを追加します。各値はFrontmatterCellRendererPropsを受け取り、JSXまたはnullを返すコンポーネント関数です:

discount: ({ value }) => {
  if (value !== true) return null;
  return (
    <span className="inline-block px-hsp-sm py-vsp-2xs text-caption rounded-full bg-danger text-fg">
      ON SALE
    </span>
  );
},

このページのフロントマターには discount: truestatus: "stable"difficulty: "beginner" が含まれており、ページ上部のメタデータテーブルにカラーピルとして表示されています。

無視リストの優先順位

無視リストに登録されているキーのレンダラーは効果がありません。無視リストはレンダラーの検索より に適用されます。キーが抑制されている場合、行はレンダリングされず、レンダラーも呼び出されません。

フレームワーク管理のキー(draft など)をカスタムレンダラーで表示するには、まず zfb.config.ts に設定した frontmatterPreview の無視リストからそのキーを削除してください:

frontmatterPreview: {
  // Must explicitly list all keys to keep hidden — ignoreKeys replaces the defaults
  ignoreKeys: ["title", "description", "sidebar_position", "tags"],
},

Warning

ignoreKeys はデフォルトの無視リスト全体を置き換えます。tagsslugunlisted などの標準スキーマキーを省略すると、それらがプレビューテーブルに表示されます。ほとんどの場合、デフォルトを拡張する extraIgnoreKeys の使用を推奨します。

ショーケースのレンダラーマップはscaffoldされず、自動で消費されるものでもありません。独自のマップをfrontmatterRenderersからバインドしてください。このスロットを省略すると、すべての値はプレーンテキストのフォールバックのままです。

Revision History

Takeshi Takatsudo作成: 2026-04-20T04:52:04+09:00更新: 2026-07-16T10:13:38+09:00

AI Assistant

Ask a question about the documentation.

Preview theme

Loading theme previews…