Skip to content

Fumadocsに移行する #998

Description

@suin

サバイバルTypeScriptをDocusaurus v2からFumadocsへ移行することを提案します。

文脈

  • 現在Docusaurus v2を使っている。
  • Docusaurus v3に移行したい。
  • v2→v3は結構な労力がいる。(破壊的変更があるため)
  • どうせなら、Fumadocsへ移行もあり

概要

現在Docusaurus v3への移行を検討しています。しかし、v3は

  • MDXのバージョンが違うことで、コンテンツの変更が必要
  • 各種独自コンポーネントも改修が必要

など結構な労力が必要です。

また、Docusaurusについて満足しているかというとそうではなく、次のような課題もあります。

  • ビルドが遅い (不満度=高)
  • llms.txtやMarkdownソースファイルを提供できず、生成AIニーズに対応しにくい (高)
  • Mermaidが使えない(高)
  • フレームワークが独自なので、拡張しずらい(中)
  • デザインフレームワークがtailwindなどポピュラーなものでなくカスタマイズしにくい(中)
  • yarn classicでinstallが遅い(中)
  • サイドバーの管理がグローバルなので数百ページある本プロジェクトでは管理しにくい(低)

どうせ苦労するなら、もっとモダンなツールに移行するほうがいいと考えました。具体的にはFumadocsです。Fumadocsは

  • Next.jsベースで、扱える人も多い
  • ISRが使えるのでビルド時間が短い
  • LLMフレンドリーな機能がある
  • ルックアンドフィールがモダン
  • ZodやArkType、Zen Browserなど有名なOSSでも使われている

といった特徴があります。

移行のメリット

  1. ビルド速度の向上: FumadocsはNext.jsベースであり、Docusaurus v2と比較して大幅なビルド時間の短縮が期待できます。これは開発効率の向上に直結します。
  2. Next.jsとの高い統合性: Next.js App Routerとのシームレスな連携は、既存のNext.jsエコシステムとの親和性を高め、将来的な機能追加やカスタマイズを容易にします。
  3. LLMフレンドリーなコンテンツ管理: コンテンツをツリーデータとして扱えるため、生成AIによるコンテンツ活用が容易になります。llms.txtやMarkdownソースの提供に関する課題を解決できます。
  4. モダンな見た目とカスタマイズ性: 洗練されたデフォルトデザインに加え、Tailwind CSSベースのカスタマイズ性により、より柔軟でモダンなUIを実現できます。Docusaurusの独自フレームワークによるデザインの制約から解放されます。
  5. bun対応: bunによる高速なパッケージインストールとnode_modulesの容量削減は、開発環境の最適化に貢献します。
  6. 既存機能の継続利用: Algolia検索やShiki Twoslashといった現在利用中の主要機能は、Fumadocsでもサポートされており、スムーズな移行が可能です。
  7. Mermaid: MermaidをFumadocsはサポートしており、今まで図が書けなかった問題が解決します。
  8. ディレクトリごとの目次設定: ディレクトリごとにmeta.jsonを配置することで、目次が設定できるため、Docusaurusのsidebar.jsのように肥大化して管理がしにくいといったことが防げます。

既存機能は使えるか?

  • Algolia検索: Algolia検索はFumadocsでもサポートされています。AlgoliaのAPIキーを設定することで、ドキュメントを検索できます。
  • Shiki Twoslash: Shiki TwoslashはFumadocsでもサポートされています。コードブロックにTwoslashを適用することで、型推論やエラー表示ができます。
  • PageRef: 移植する必要はありますが、機能的には可能です。
  • PostILearned: 移植する必要はありますが、ほぼそのままで動くはずです。
  • MDXv2: MDXv3への書き換えが必要。
  • TypeScript解読アシスタント: LLMが登場したため不要になったと判断し削除します。
  • OGP画像生成: 画像生成機能は別システムなので移行の必要はないです。
  • twoslashの細かい点
    • twoslash include main: 要調査
  • コードブロックの細かい機能
    • 行ハイライト: 対応しているが、書き換えが必要?
    • ファイル名表示(title=): 書き換え不要で使える
  • :::tip: 書き換えが必要

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    stage1:話し合い中結論を出すために話し合いをしている最中です。まだ着手・プルリクエストの作成はしないでください。

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions