コンテンツへスキップ
Fumadocs

変更履歴

プロジェクトのリリース情報を表示します。

インストール

タイムラインコンポーネントをインストールします。インストールすると、@fumadocs/changelog が依存関係に追加されます:

npx @fumadocs/cli@latest add changelog

使い方

Home Layout の配下にページを作成します。エントリーを1ページ分取得して ChangelogTimeline でレンダリングし、ChangelogPagination で他のページへのリンクを表示します。

src/routes/changelog.{-$page}.tsx
import { createFileRoute, notFound } from '@tanstack/react-router';
import { createServerFn } from '@tanstack/react-start';
import { HomeLayout } from 'fumadocs-ui/layouts/home';
import { githubReleases } from '@fumadocs/changelog/github';
import { baseOptions } from '@/lib/layout.shared';
import { ChangelogPagination, ChangelogTimeline } from '@/components/changelog';

const getReleases = createServerFn({ method: 'GET' })
  .validator((page: number) => page)
  .handler(async ({ data: page }) => {
    const releases = await githubReleases({
      owner: 'fuma-nama',
      repo: 'fumadocs',
      token: process.env.GITHUB_TOKEN,
      page,
    });
    if (releases.entries.length === 0) throw notFound();

    return releases;
  });

export const Route = createFileRoute('/changelog/{-$page}')({
  loader: async ({ params }) => {
    const page = Number(params.page ?? 1);
    return { page, ...(await getReleases({ data: page })) };
  },
  component: Page,
});

function Page() {
  const { page, entries, nextPage } = Route.useLoaderData();

  return (
    <HomeLayout {...baseOptions()}>
      <div className="mx-auto flex w-full max-w-[900px] flex-col gap-10 px-4 py-12">
        <ChangelogTimeline entries={entries} />
        <ChangelogPagination
          newer={page > 1 ? `/changelog/${page - 1}` : undefined}
          older={nextPage ? `/changelog/${nextPage}` : undefined}
        />
      </div>
    </HomeLayout>
  );
}

ソース

GitHub Releases

githubReleases() は、リポジトリで公開されているリリースを1ページ分返します。さらに古いリリースがある場合は、nextPage も返されます。

  • バージョンは、fumadocs-ui@16.17.0 のようなリリース名、またはそのタグから読み取られます。
  • プレリリースのエントリーには prerelease プロパティがあります。
  • GitHub では、認証なしのリクエストは1時間あたり60回までに制限されています。token を渡したうえで、ページをキャッシュしてください。
  • GitHub で一覧取得できるのは最初の1000件のリリースまでです(トークンを使用した場合は10000件まで)。それ以降のページにはエントリーが含まれません。

プロパティ

型

カスタムエントリー

エントリーはプレーンなオブジェクトです。任意のソースから作成できます。

プロパティ

型

エントリーはデータとしてローダーからページへ渡されるため、コンテンツは body に React ノードとして記述するのではなく、content に Markdown として記述してください。

How is this guide?

最終更新日