Takumi
Takumi を統合して、フレームワークに依存しない高速なメタデータ画像生成を実現します。
インストール
npm install takumi-jsメタデータ画像
ページの画像 URL を返す関数を追加し、ドキュメントページのメタデータからその画像を参照します。
import { createGetUrl } from 'fumadocs-core/source';
const getImageUrl = createGetUrl('/og/docs');
export function getPageImageUrl(page: { slugs: string[]; locale?: string }) {
const segments = [...page.slugs, 'image.webp'];
return { segments, url: getImageUrl(segments, page.locale) };
}import { getPageImageUrl } from '@/lib/shared';
// ページコンポーネント内の任意の場所で
return (
<DocsPage toc={page.data.toc}>
<meta property="og:image" content={getPageImageUrl(page).url} />
{/* ... */}
</DocsPage>
);/docs/my-page の画像は /og/docs/my-page/image.webp に配置されます。WebP 画像は PNG 画像よりもファイルサイズが小さいためです。PNG を生成したい場合は、代わりに image.png と format: 'png' を使用してください。
次に、画像を生成するルートを作成します。
import { source } from '@/lib/source';
import { generateOGImage } from 'fumadocs-ui/og/takumi';
import { ApiContext } from 'waku/router';
export async function GET(_: Request, { params }: ApiContext<'/og/docs/[...slugs]/image.webp'>) {
const page = source.getPage(params.slugs);
if (!page) return new Response(undefined, { status: 404 });
return generateOGImage({
title: page.data.title,
description: page.data.description,
site: 'My App',
format: 'webp',
});
}
export async function getConfig() {
const pages = source
.generateParams()
.map((item) => (item.lang ? [item.lang, ...item.slug] : item.slug));
return {
render: 'static' as const,
staticPaths: pages,
} as const;
}Takumi には全ウェイト (100-900) に対応した Geist フォントと Geist Mono フォントが同梱されているため、フォントの設定は不要です。
高度な使い方については、Takumi のドキュメントを参照してください。
その他のテンプレート
利用できるテンプレートについては、Takumi Templates を参照してください。
How is this guide?
最終更新日
