📝

Nextra 4.0での多言語化に苦しんだ小話とNextraの現状

に公開

はじめに

今回の記事はNext.js用の静的サイトジェネレーターであるNextra 4.0での多言語化に苦しんだ小話です!
特に細かい実装に踏み込んだ内容ではないのですが、技術選定の参考になればと思います。

前提:Nextraでの多言語化に苦しんだ話

公式ドキュメントを読みつつNextraでドキュメントサイトを構築していた時のこと。
途中までは順調に進んでいたのですが、いよいよ多言語化の実装に入ろうとした際に少し苦しみました。
多言語化の対応の際に参照していたのは公式ドキュメントの以下のページです。

https://nextra.site/docs/guide/i18n

なのですが、実際に実装を進めていく中で次のエラーに遭遇。
何度もドキュメントと実装を見比べて確認し、その後下記のissueに辿り着きました。

https://github.com/shuding/nextra/issues/4562

今回の本題でないため、解決策を知りたい人のためにさくっと提示すると、
上記のissueを読み進めていくと見つかる2つの実装例を参考にすることで解決できます。
どうやらApp Routerへの対応に伴ってtheme.config.jsではなくPropsで設定を渡すように変わったようです。

コントリビューターの方が示す実装例

https://github.com/shuding/nextra/tree/main/examples/swr-site

他の方のリポジトリ
上記のissue内でコメントされていた方の再現リポジトリ(Mastraのエンジニアの方らしい)
https://github.com/adeleke5140/minimal-repro-nextra-i18n/tree/content

上記の実装でもコンパイル時間の増加などの問題があるようですが、とりあえず多言語化自体は実装できました。

本題:Nextraの現状を調べてみた

執筆時点でバージョンが4.6であるのにも関わらず、公式ドキュメントが最新の実装例を反映していない...
よく見てみると公式サイトもいまだに4.0がリリースされました!というバナーが掲載されている...

あれ?と思い、調べてみた。
その結果の共有が今回の記事の本題となります!


調べてみて最初にわかったのはリポジトリオーナーがメインのメンテナーではないらしいということでした。

公式サイトのAboutページでもShu Ding氏ではなく、Dimitri Postolov氏がNextra 4を全面的に開発したと明記されています。

In 2025 Nextra 4 with App Router support was released, Dimitri Postolov fully developed it too.
https://nextra.site/about

そして、Dimitri Postolov氏のNextraのフォークを見に行くと次の議論を見つけました。

https://github.com/dimaMachina/nextra/issues/55

ざっくりと要点は次の通りです。

  • 移管してほしいがShu Ding氏とは連絡がつかない
  • Node.js 18のサポート終了につき、新規デプロイは失敗している
  • ただ、現行のshuding/nextraはv4としてメンテナンスは継続中
  • dimaMachina/nextraは次期バージョンで使用される

Dimitri Postolov氏は...

Anyway, don’t worry — I have no plans to stop maintaining Nextra, even if we'll have 0 GitHub stars 😂.

というようなメッセージを発信していますし、スポンサーもいるようなので大丈夫かなと思いますが、若干の不安はある状況のようです。

大丈夫だとは思うけど代替ツールも見ておこう

React系だと以下のようなものが良い選択肢になるかと思います。

  • Docusaurus
  • Fumadocs

多くの場合、MetaがメンテナンスしているDocusaurusが安定していて良い感じもしますね。
ただ、Nextraの代替と考えるとFumadocsの方が近いような感じもあるので、今回はFumadocsについて少し掘り下げてみます(今回の件で初めて知ったので気になるのもある)。

Fumadocs

https://fumadocs.dev/

FumadocsはNextraに影響を受けて開発されたドキュメントフレームワークですが、

a "framework" that you can break.

という哲学のもと、より柔軟にカスタマイズできることを目指しているようです。
また、NextraがRSCに対応していなかったために開発を始めたという背景もあり、リリース当初からRSCに対応しているようです。

カスタマイズが柔軟にできるというのはどういうことかというと、例えば以下のような点がサイトでは示されています。

  • 対応フレームワーク: Next.js、Waku、React Router、Tanstack Start
  • コンテンツソース: Fumadocs MDXの他、CMSを利用可能
  • UI:Tailwind CSSを使用。Shadcn UIにヒントを得たCLIでコンポーネントやレイアウトを導入可能

今回、調べるきっかけとなった多言語化の対応はどうかというとNextraと似たような感じで対応できます(似てるのは、Next.jsに乗っかる形なので仕方がない)。

https://fumadocs.dev/docs/ui/internationalization/next

他にもいろいろな特徴があるのですが、ざっと見た感じでもNextraでやりたいことのほとんどはカバーできそうな印象ですし、確かに柔軟性は高そうです。


では最後に体制的な観点だとどうかというと

メインの開発者はFuma Nama氏で、コントリビューターもいるもののほとんどのコミットはFuma Nama氏によるものです。
OSSの界隈に詳しくないのですが、ここは同様に少し不安なポイントかもしれませんね🤔

ただ、FumadocsもスポンサーとしてOramaやBetter Authなどが名を連ねているので、ある程度は安定しているのかなと思います。

まとめ

今回はNextra 4.0での多言語化に苦しんだ小話(+Fumadocsの紹介)を共有しました。
Nextra自体は非常に優れたツールであり、ドキュメントサイトの構築においても魅力的な選択肢であることは間違いありません。
ただ、今回の件を通じて選定においてはメンテナンス体制やコミュニティの活発さなども重要な観点であることを再認識しました。

今後もNextraの動向を注視しつつ、必要に応じてFumadocsなどの代替ツールも検討していきたいと思います!

参考リンク

マーベリックスのテックブログ

Discussion