コンテンツへスキップ
Fumadocs

ページスラッグとページツリー

ドキュメントを整理するための共通の規約

このガイドは、Fumadocs MDX など、loader() APIを使用するコンテンツソースにのみ該当します。

概要

Fumadocs は loader() を使用して、コンテンツディレクトリからページスラッグとページツリー(サイドバーの項目)を生成します。 ルーティングは、お使いの React フレームワークが処理します。

ファイルシステムベースのルーティングと同じ要領で、フォルダーとページを定義できます。

index.mdx
getting-started.mdx

出力をさらにカスタマイズしたい場合は、ローダープラグインを使用できます。

ファイル

MDX & Markdown ファイルでは、フロントマターでページ情報をカスタマイズできます。

---
title: My Page
description: Best document ever
icon: House
---

## Learn More

Fumadocs は、以下のプロパティをもとにページツリーを構築します。

名前説明
titleページのタイトル
descriptionページの説明
iconアイコン名。アイコンを参照してください

補足

ページ情報は、Fumadocs MDX などのコンテンツソースから提供されます。

Fumadocs MDX では、schema オプションを指定することで、フロントマターのスキーマをカスタマイズできます。

スラッグ

ページのスラッグは、そのファイルパスから生成されます。

パス (コンテンツフォルダーからの相対パス)スラッグ
./dir/page.mdx['dir', 'page']
./dir/index.mdx['dir']

フォルダー

複数のページをまとめて整理できます。Metaファイルを作成すると、フォルダーをカスタマイズできます。

フォルダーグループ

デフォルトでは、ファイルをフォルダーに入れるとその slugs が変わります。 フォルダー名を括弧で囲むと、子ファイルの slugs に影響を与えないようにできます。

パス(コンテンツフォルダーからの相対パス)slugs
./(group-name)/page.mdx['page']

ルートフォルダー

フォルダーをルートフォルダーとして指定します。その場合、開いているルートフォルダー内のアイテムのみが表示されます。

meta.json
{
  "title": "Name of Folder",
  "description": "The description of root folder (optional)",
  "root": true
}

たとえば、ルートフォルダー framework を開いている場合、他のフォルダー(例: headless)はサイドバーやその他のナビゲーション要素に表示されません。

index.mdx
current-page.mdx
other-pages.mdx
my-page.mdx

Fumadocs UI

Fumadocs UI はルートフォルダーを Layout Tabs としてレンダリングするため、ユーザーはルートフォルダー間を切り替えられます。

ルートタイプ

root には文字列も指定でき、これはルートフォルダーのタイプを表します。 同じ親スコープ内にある同じタイプのルートフォルダーは、同じドキュメントの異なるバージョンのように、互いに切り替え可能なものとして扱われます。

meta.json
index.mdx
guide.mdx
meta.json
index.mdx
guide.mdx
{
  "title": "1.0.0",
  "root": "version"
}

root: true は単なるデフォルトのタイプで、タブとして表示されます。

同じタイプの別のルートフォルダーに切り替えると、ページはその構造的射影、つまりルートフォルダーからの相対パスが同じページに対応付けられます。

ページv2 での射影
v1/guide.mdxv2/guide.mdx
v1/python/guide.mdxv2/python/guide.mdx(ネストされたルートフォルダーは維持されます)

Fumadocs UI

Fumadocs UI は、現在のページのパス上にある各ルートフォルダーごとに、同じタイプのルートフォルダー間で切り替えるためのドロップダウンをレンダリングします。完全な例はバージョニングを参照してください。

Meta

フォルダー内に meta.json ファイルを作成すると、そのフォルダーをカスタマイズできます。

{
  "title": "Display Name",
  "icon": "MyIcon",
  "pages": ["index", "getting-started"],
  "defaultOpen": true
}

コンテンツソースが対応している場合は、メタファイルをコード(meta.ts または meta.js)で記述し、データをデフォルトエクスポートとして公開できます。

名前説明
title表示名
iconアイコン名(アイコンを参照)
defaultOpenフォルダーをデフォルトで開いた状態にする
collapsibleフォルダーの内容を折りたたみ可能にする(デフォルト: true)
pagesフォルダー内のアイテム(後述)
pagesIndexインデックスアイテム(後述)

Pages

フォルダー内のアイテムはデフォルトでアルファベット順に並びます。pages を使用すると、アイテムを追加したり、並び順を指定したりできます。

meta.json
{
  "pages": ["index", "getting-started"]
}

指定した場合、pages に記載されていない項目は含まれません。

種類構文説明
パス./path/to/pageページまたはフォルダーへのパスです。
セパレーター---Label---
---[Icon]Label---
2つのセクションの間に置く区切りです (アイコン対応) 。
リンク[Text](url)
[Icon][Text](url)
external:[Text](url)
リンクを挿入します (アイコン対応) 。
external: プレフィックスを付けると、外部リンクとして扱われます。
Rest...残りのページを含めます (アルファベット順) 。
Reversed Restz...aRest 項目の逆順版です。
Extract...folderフォルダー内の項目を展開します。
Except!item... または z...a から項目を除外します。
meta.json
{
  "pages": [
    "components",
    "---My Separator---",
    "...folder",
    "...",
    "!file",
    "!otherFolder",
    "[Vercel](https://vercel.com)",
    "[Triangle][Vercel](https://vercel.com)"
  ]
}

URL の重複禁止

同じページ URL をページツリー全体で複数回使用することはできません。 同じ理由から、ページ項目を重複させることもできません。

これは意図的な仕様です。これにより、Fumadocs は現在のパス名だけを基にアクティブなツリー項目を特定できます。

フォルダーのインデックス

フォルダーがインデックス項目を持つ場合、そのフォルダーはクリック可能になり、クリックするとインデックス項目に移動します。

デフォルトでは、各フォルダー内の index ファイルがインデックス項目になります。フォルダーのインデックス項目は任意に指定することもでき、パスまたはリンクを指定できます。

{
  // フォルダー内に "overview.mdx" ファイルがあると仮定します
  "pagesIndex": "overview"
}

アイコン

Fumadocs にはアイコンライブラリが含まれていないため、ランタイムでアイコン名を JSX 要素に変換し、コンポーネントとしてレンダリングする必要があります。

そのためには、loader() に icon ハンドラーを追加します。

i18n ルーティング

i18n ルーティングのスタイルは、用途に応じて定義できます。

lib/i18n.ts
import type { I18nConfig } from 'fumadocs-core/i18n';

export const i18n: I18nConfig = {
  // デフォルト
  parser: 'dot',
  // または
  parser: 'dir',
};

ファイル名の末尾に .{locale} を付けると、言語ごとの Markdown/meta ファイルを追加できます。例:

meta.json
meta.cn.json
get-started.mdx
get-started.cn.mdx

デフォルトのロケールでは、ロケールコードを省略できます。

パスパラメーター

[name] という名前のフォルダーは、パラメーターの値ごとに生成されます。値は、そのフォルダーのメタファイルの staticParams に列挙してください。

meta.json
deploy.mdx
[framework]/meta.json
{
  "title": "Framework",
  "staticParams": [{ "framework": "waku" }, { "framework": "astro" }]
}
パス (コンテンツフォルダーからの相対パス)slugs
./[framework]/deploy.mdx['waku', 'deploy'], ['astro', 'deploy']

meta ファイルは、生成されるすべてのフォルダーに適用されます。各ページは params を props として受け取るほか、loader() から page.params としても取得できます。

meta.ts では、代わりに params を受け取る関数をエクスポートすることもできます。その場合は、staticParams を名前付きエクスポートとして併せてエクスポートします。

[framework]/meta.ts
const names = { waku: 'Waku', astro: 'Astro' };

export const staticParams = [{ framework: 'waku' }, { framework: 'astro' }];

export default ({ framework }: { framework: keyof typeof names }) => ({
  title: names[framework],
});

補足

[name] フォルダーは、その値を列挙するものがなければ、通常のフォルダーのままです。

ページのパラメーター

ページのフロントマターにも staticParams を指定できます。親フォルダーでも指定されている場合、そのページは両方に共通する値に対してのみ生成されます。

[framework]/fumadocs-mdx.mdx
---
title: Fumadocs MDX
staticParams:
  - framework: waku
---

静的パス

固定のパスに置かれたファイルは、動的に生成されるファイルよりも優先されます。たとえば、astro/deploy.mdx は [framework]/deploy.mdx から生成される astro ページを置き換えます。meta ファイルについても同様です。

ローカライズされたページ

i18n を使用する場合、各ロケールのファイルはフォールバックロケールのファイルよりも優先されます。/cn/docs/astro/deploy の場合は、次のうち最初に見つかったファイルが使用されます。

  1. astro/deploy.cn.mdx
  2. [framework]/deploy.cn.mdx
  3. astro/deploy.mdx
  4. [framework]/deploy.mdx

ローカライズされたページでは、まず meta.cn.json から staticParams が読み込まれます。dir パーサーを使用する場合は、言語ごとのフォルダーにそれぞれの値を記述します。

How is this guide?

最終更新日