Markdown レンダリング
React 要素を Markdown としてレンダリングします。
概要
fumadocs-core/server は、React サーバーコンポーネントを Markdown ドキュメントとしてレンダリングします。
import { renderToMarkdown } from 'fumadocs-core/server';
const text = await renderToMarkdown(
<div>
<h2>Hello World</h2>
<p>
Some <b>rich</b> content.
</p>
</div>,
);これは Remark LLMs がエクスポートするコンポーネントの内部で使用されており、Markdown として配信したいサーバーレンダリングされたコンテンツであれば、どのようなものにも使用できます。
renderToMarkdown() はサーバー専用です。
asMarkdown
各コンポーネントは、それぞれ独自の Markdown 表現を定義します。レンダリング中に asMarkdown() を呼び出すことで、この機能を有効化 (オプトイン) できます。asMarkdown() は、コンポーネントが Markdown にレンダリングされている場合にターゲットを返し、そのときコンポーネントが返す HTML 要素は Markdown に変換されます。
import { asMarkdown, md } from 'fumadocs-core/server';
function Callout({ title, children }) {
if (asMarkdown()) return md.linePrefix('> ')`**${title}**\n${children}`;
return <div className="...">...</div>;
}これを一度も呼び出さないコンポーネントは、次のように props を保持したまま JSX 構文として残ります。
<Tabs items={['a', 'b']}>...</Tabs>これには、サーバー上では実行されないクライアントコンポーネントも含まれます。
ターゲット
ツリーはターゲットに応じてレンダリングされます。ターゲットは renderToMarkdown() の target オプションで指定します。
markdown(デフォルト) : エージェント向けのドキュメントです。search: 検索レコードのテキストです。リンクのテキストは含まれますが、画像やコードブロックは含まれません。また、Markdown 形式を持たないコンポーネントは、テキストの props を持つ HTML タグとして出力されます。
これらのルールは、<a href> のようにコンポーネントが返す要素に適用されます。md テンプレート内にテキストとして書かれたリンクは、検索でもリンク先が残ります。そのため、要素を返すか、ターゲットを確認してください。
asMarkdown() はターゲットを返すため、コンポーネントは検索インデックス向けよりも多くの情報をエージェントに提供できます。
import { asMarkdown, md } from 'fumadocs-core/server';
function Version({ name, released }) {
const target = asMarkdown();
if (target === 'search') return name;
if (target) return md`${name} (released ${released})`;
return <span title={released}>{name}</span>;
}md
Markdown 出力用のタグ付きテンプレートです。埋め込む値には、文字列、React ノード、Promise、またはそれらの配列を指定できます。children を加工する前に文字列化したい場合に使用します。
コンテンツをブロックとして返すバリアントが 2 つあります。
md.linePrefix(prefix): すべての行の先頭にプレフィックスを付けます(例: 引用ブロックの場合は'> ')。md.indent(size): すべての行をインデントします。
renderRoute
ページ要素を Markdown にレンダリングします。そのコンポーネントが asMarkdown() を呼び出していない場合は undefined を返します。
import { renderRoute } from 'fumadocs-core/server';
const text = await renderRoute(<Page params={params} />);ルートの Markdown 版を配信する場合に便利です。オプトインしたページは Markdown を生成し、それ以外のページは undefined を返すため、404 を返したり別のソースにフォールバックしたりできます。
How is this guide?
最終更新日
