APIリファレンス
onedocsパッケージからのすべてのエクスポートを網羅したリファレンスです。
エントリーポイント
| インポート | 説明 |
|---|---|
onedocs |
メインエントリー - レイアウト、コンポーネント、mdxComponents、defineConfig、ソースヘルパー |
onedocs/components |
Fumadocs UIコンポーネントと、InstallBlock、CodeBlock、Button、Logo |
onedocs/config |
設定ヘルパー |
onedocs/source |
コンテンツソースユーティリティ |
onedocs/metadata |
メタデータ生成 |
onedocs/og |
OpenGraph画像生成 |
onedocs/llms |
LLMs.txt生成 |
onedocs/seo |
サイトマップとrobots.txt |
onedocs/css/preset.css |
Tailwind CSSプリセット |
レイアウト
DocsLayout
ドキュメントページのメインレイアウトラッパーです。サイドバーのナビゲーション、検索、テーマ切り替えを提供します。
import { DocsLayout } from "onedocs";
export default function Layout({ children }: { children: React.ReactNode }) {
return (
<DocsLayout config={config} pageTree={source.pageTree}>
{children}
</DocsLayout>
);
}
Props:
config- 使用するOnedocsConfigオブジェクトpageTree- ソースのページツリー(e.g、source.pageTreeなど)children- ページコンテンツ
DocsPage
個々のドキュメントページ用のラッパーです。FumadocsのUIDocsPageをラップし、コンテンツをDocsBodyに配置します。
import { DocsPage, mdxComponents } from "onedocs";
import { notFound } from "next/navigation";
export default async function Page(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();
const MDX = page.data.body;
return (
<DocsPage toc={page.data.toc}>
<MDX components={mdxComponents} />
</DocsPage>
);
}
Props:
toc- ページデータの目次children- MDXコンテンツ- FumadocsのUI
DocsPageの他の任意のprop(fullなど)
DocsBody
ドキュメントコンテンツ用の内部ボディラッパーです。内部でDocsPageが使用します。
import { DocsBody } from "onedocs";
<DocsBody>
<MDX components={mdxComponents} />
</DocsBody>
HomePage
ヒーロー、機能、フッターを含むランディングページ全体のコンポーネントです。
import { HomePage, CTASection } from "onedocs";
export default function Home() {
return (
<HomePage config={config} packageName="my-package">
<CTASection
title="Ready to get started?"
cta={{ label: "Read the Docs", href: "/docs" }}
/>
</HomePage>
);
}
Props:
config- 使用するOnedocsConfigオブジェクトpackageName- インストールブロックに表示するパッケージ名(任意)children- 機能とフッターの間に表示するコンテンツ(任意)
設定で制御できる内容については、ホームページとフッターを参照してください。
HomeLayout
ホームページの基本レイアウトです(内部でHomePageが使用)。
import { HomeLayout } from "onedocs";
<HomeLayout config={config}>
{/* Custom homepage content */}
</HomeLayout>
createBaseOptions
設定からFumadocsのUIレイアウトオプション(ナビバーのタイトルまたはロゴ、nav.links、GitHubリンク)を構築します。DocsLayoutとHomeLayoutはこれを使用します。FumadocsのUIレイアウトを直接レンダリングする場合は、自分で呼び出してください。
import { DocsLayout } from "fumadocs-ui/layouts/docs";
import { createBaseOptions } from "onedocs";
<DocsLayout {...createBaseOptions(config)} tree={source.pageTree}>
{children}
</DocsLayout>
コンポーネント
InstallBlock
npm、yarn、pnpm、bun(npm i、yarn add、pnpm add、bun add)のインストールコマンドを表示するパッケージマネージャーのタブです。非同期サーバーコンポーネントです。
import { InstallBlock } from "onedocs";
<InstallBlock packageName="onedocs" />
Props:
packageName- インストールするnpmパッケージ名title- タブ上部の見出し(任意)description- タブ上部のテキスト(任意)children- タブ下部のコンテンツ(任意)
Button
プライマリボタンのスタイルを適用した角丸リンクです。スタイルは1種類です。
import { Button } from "onedocs";
<Button href="/docs">Get Started</Button>
Props:
href- リンク先children- ボタンのテキストclassName- 追加クラス(任意)
Logo
ライト用とダーク用の画像を表示し、現在のテーマに合う方を表示します。DocsLayoutとHomePageは、ライト用とダーク用のバリエーションを備えたlogoに使用します。
import { Logo } from "onedocs";
<Logo light="/logo-light.svg" dark="/logo-dark.svg" alt="My Project" className="h-6" />
Props:
light- ライトモード用の画像パスdark- ダークモード用の画像パスalt- 代替テキスト(デフォルト:"Logo")className- 両方の画像に適用するクラス(任意)
CTASection
ホームページの行動喚起セクションです。
import { CTASection } from "onedocs";
<CTASection
title="Ready to get started?"
description="Optional description text"
cta={{ label: "Get Started", href: "/docs" }}
/>
Props:
title- セクションの見出しdescription- 見出し下のテキスト(任意)cta-labelとhrefを含むボタン設定children- ボタン下のコンテンツ(任意)
FontHead
Inter Variableフォントを先読みし、その@font-faceを宣言してページのフォントに設定します。ルートレイアウトの<head>に追加します。
import { FontHead } from "onedocs";
<html>
<head>
<FontHead />
</head>
<body>{children}</body>
</html>
Onedocsにはフォントが含まれていません。デフォルトではFontHeadが/fonts/InterVariable.woff2を読み込むため、ファイルをpublic/fonts/に配置するか、fontPathを指定した別のURLを渡してください:
<FontHead fontPath="/assets/Inter.woff2" />
GitHubIcon
GitHubアイコンのコンポーネントです(内部でナビゲーションに使用)。
import { GitHubIcon } from "onedocs";
<GitHubIcon className="size-5" />
CodeBlock
Fumadocsを通じてShikiでサーバー側の構文ハイライトを行うコードブロックです。非同期サーバーコンポーネントです。
import { CodeBlock } from "onedocs";
<CodeBlock lang="tsx" code="const x = 1;" />
設定
defineConfig
型安全な設定ヘルパーです。
import { defineConfig } from "onedocs/config";
export default defineConfig({
title: "My Docs",
// ... other options
});
OnedocsConfig
設定用のTypeScript型です。
import type { OnedocsConfig } from "onedocs/config";
const config: OnedocsConfig = {
title: "My Docs",
};
すべてのオプションについては設定を参照してください。
ソースユーティリティ
loader
コンテンツソースを作成するfumadocs-core/sourceloaderの再エクスポートです。
import { loader } from "onedocs/source";
export const source = loader({
baseUrl: "/docs",
source: docs.toFumadocsSource(),
});
createSource
コンテンツソースを作成するヘルパーです(loaderのラッパー)。ベースのURLはデフォルトで/docsになります。
import { createSource } from "onedocs/source";
import { docs } from "../../.source/server";
export const source = createSource(docs);
// export const source = createSource(docs, { baseUrl: "/guide" });
0.1.27ではcreateSourceが型なしのソースを返すため、page.dataの読み取り時にProperty 'data' does not exist on type 'unknown'などのエラーがTypeScriptから報告されます(#4)。修正されるまでは、上記のようにloaderを使用してください。
メタデータ
createMetadata
ルートレイアウト用のNext.jsメタデータを生成します。
import { createMetadata } from "onedocs/metadata";
export const metadata = createMetadata(config, {
baseUrl: "https://example.com",
});
Options:
baseUrl- サイトのベースURL(任意)additional- 最後にマージされる追加のMetadataフィールド(任意)
Returns: 次の内容を含むNext.jsMetadataオブジェクト:
- タイトル(
config.title)とタイトルテンプレート(%s | Site Name) - 説明
- 設定されている場合、
config.iconのファビコン baseUrlが設定されている場合:metadataBase、OpenGraphメタデータ、Twittersummary_large_imageカード
createDocsPageMetadata
ドキュメントページのタイトルと説明のメタデータを生成します。titleと任意のdescriptionを含む1つのオブジェクトを受け取ります。
import { createDocsPageMetadata } from "onedocs/metadata";
import { notFound } from "next/navigation";
export async function generateMetadata(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();
return createDocsPageMetadata({
title: page.data.title,
description: page.data.description,
});
}
ページごとのOpen Graph画像については、動的OG画像を参照してください。
OpenGraph画像
createRootOGImage
ホームページ用のOG画像を作成します。黒い背景の中央にロゴを配置します。
// src/app/opengraph-image.tsx
import {
createRootOGImage,
loadPublicFile,
ogImageSize,
ogImageContentType,
type OGImageLogo,
} from "onedocs/og";
export const size = ogImageSize;
export const contentType = ogImageContentType;
export default async function Image() {
const logo = await loadPublicFile("logo-dark.svg");
return createRootOGImage(logo as OGImageLogo);
}
createDocsOGImage
ドキュメントページ用のOG画像を作成します。左上にロゴを置き、白いタイトルを黒い背景に表示します。フォント引数は任意で、省略するとシステムフォントでタイトルを表示します。
// src/app/docs/opengraph-image.tsx
import {
createDocsOGImage,
loadPublicFile,
loadInterFont,
ogImageSize,
ogImageContentType,
type OGImageLogo,
} from "onedocs/og";
export const size = ogImageSize;
export const contentType = ogImageContentType;
export default async function Image() {
const [logo, font] = await Promise.all([
loadPublicFile("logo-dark.svg"),
loadInterFont(),
]);
return createDocsOGImage("Documentation", logo as OGImageLogo, font);
}
動的OG画像
ページごとのOG画像を使うには、ルートから配信します。ページからこのルートへの参照は自動で設定されないため、たとえばcreateDocsPageMetadataのフィールドと並べてopenGraph: { images: "/docs/og/getting-started" }を指定するなど、各ページのメタデータに自分で追加してください。
// src/app/docs/og/[...slug]/route.tsx
import {
createDocsOGImage,
loadPublicFile,
loadInterFont,
type OGImageLogo,
} from "onedocs/og";
import { source } from "@/lib/source";
export async function GET(
_request: Request,
{ params }: { params: Promise<{ slug: string[] }> }
) {
const { slug } = await params;
const page = source.getPage(slug);
const title = page?.data.title ?? "Documentation";
const [logo, font] = await Promise.all([
loadPublicFile("logo-dark.svg"),
loadInterFont(),
]);
return createDocsOGImage(title, logo as OGImageLogo, font);
}
ヘルパー関数
| 関数 | 説明 |
|---|---|
loadPublicFile(path) |
public/からファイルをデータURLとバッファとして読み込みます。SVGの場合はwidth属性とheight属性も読み込みます |
loadInterFont(path?) |
OG画像用のフォントをpublic/から読み込みます。デフォルトはfonts/Inter-Medium.ttfです |
ogImageSize |
標準OG画像のサイズ{ width: 1200, height: 630 } |
ogImageContentType |
MIME型"image/png" |
必須ファイル:
public/logo-dark.svg- OG画像用のロゴです。OGヘルパーはwidth属性とheight属性からサイズを取得するため、<svg>タグには両方を数値で指定する必要があります。public/fonts/Inter-Medium.ttf- タイトル用のフォントです。Onedocsには含まれていません。
LLMs.txt
AIアシスタント用のLLMs.txtファイルを生成します。
generateLLMsText
簡潔なLLMs.txtコンテンツを生成します。createLLMsSourceと{ title, description? }でラップされたソースを受け取り、Promiseを返します。
// src/app/llms.txt/route.ts
import { createLLMsSource, generateLLMsText } from "onedocs/llms";
import { source } from "@/lib/source";
export async function GET() {
const content = await generateLLMsText(createLLMsSource(source), {
title: "My Project",
description: "Project description",
});
return new Response(content, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
}
ページURLは、ドメインを含めず、/docs/getting-startedのようにソースの内容に沿って記述されます。
generateLLMsFullText
ページコンテンツ全体を含む完全なLLMs.txtを生成します。ラップ済みソースだけを受け取り、Promiseを返します。
// src/app/llms-full.txt/route.ts
import { createLLMsSource, generateLLMsFullText } from "onedocs/llms";
import { source } from "@/lib/source";
export async function GET() {
const content = await generateLLMsFullText(createLLMsSource(source));
return new Response(content, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
}
ページ本文が含まれるのは、FumadocsMDXのincludeProcessedMarkdownが有効な場合のみです。SEOと検索を参照してください。
createLLMsSource
Fumadocsのソース(loader()またはcreateSource()の結果)を、上記2つの関数が読み取る形式でラップします。各ページのURL、タイトル、説明、テキストローダーを含みます。
SEO
generateSitemap
ドキュメントのサイトマップを生成します。baseUrl、meta.jsonから取得することが多いpagesリスト、任意のdocsPath(デフォルトは/docs)を含むオブジェクトを1つ受け取ります。
// src/app/sitemap.ts
import { generateSitemap } from "onedocs/seo";
import meta from "../../content/docs/meta.json";
export default function sitemap() {
return generateSitemap({
baseUrl: "https://example.com",
pages: meta.pages ?? [],
});
}
エントリーがURLになる仕組みについては、SEOと検索を参照してください。
generateRobots
robots.txtコンテンツを生成します。すべてを許可し、HostとSitemapの行を加えます。sitemapPathのデフォルトは/sitemap.xmlです。
// src/app/robots.ts
import { generateRobots } from "onedocs/seo";
export default function robots() {
return generateRobots({
baseUrl: "https://example.com",
});
}
CSSプリセット
globals.cssでCSSプリセットをインポートします:
@import "onedocs/css/preset.css";
@source "./**/*.tsx";
@source "../../content/**/*.mdx";
@sourceのパスはsrc/app/globals.cssからの相対パスです。
プリセットには次のものが含まれます:
- Tailwind CSS v4(
tailwindcssと@tailwindcss/postcssは自分でインストール) - Fumadocsのニュートラルテーマ
- Fumadocsのプリセットスタイル
--font-sansをFontHeadが定義する--font-inter変数に設定- 本文と見出し向けのInter OpenType機能
- 全高レイアウトのスタイルとOnedocsのレイアウト調整
MDXコンポーネント
mdxComponentsエクスポートはFumadocsのUIのデフォルトMDXコンポーネントをすべて含み、以下のコンポーネントを追加します:
import { mdxComponents } from "onedocs";
<MDX components={mdxComponents} />
含まれるコンポーネント:
- FumadocsUIのデフォルト:
pre(コードブロック)、a、img、アンカー付き見出しのh1からh6、table、CodeBlockTab、CodeBlockTabs、CodeBlockTabsList、CodeBlockTabsTrigger、CalloutContainer、CalloutTitle、CalloutDescription Callout- 情報・警告・エラーのコールアウトCard、Cards- カードレイアウトTab、Tabs- タブ付きコンテンツStep、Steps- 番号付き手順Accordion、Accordions- 折りたたみセクションFile、Folder、Files- ファイルツリーImageZoom- 拡大可能な画像TypeTable- 型ドキュメント用テーブル
InstallBlockとCodeBlockは含まれていません。使用するには、コンポーネントの説明に従って自分で追加してください。
使用例についてはコンポーネントを参照してください。