Docusaurus V3でローカル検索を動作させる

Docusaurus v3にて対応が入っていなかったコミュニティ作検索プラグインについて、対策IssueがCloseしていたので実際にやってみました。
2023.11.13

機能確認として、幾つものあるドキュメント管理CMSのうち、docusaurusに触る機会がありました。10/31にversion3が出たばかりで、コミュニティプラグインも対応が進んでいる最中です。

基本機能やバージョン指定のないプラグインについては滞りなく確認が行えたものの、検索はほぼversion2指定となっており、version3で動かせないものかとソースコード含めて追っていました。

丁度先日Fork版検索用プラグイン側でVersion3で動かすためのIssueがCloseしたため、実際に機能させるためのアレコレをやってみました。

セットアップ

ライブラリの依存設定へ追記が必要です。それ以外はversion2での設定と変わりません。

package.jsonにoverridesを追加します。依存がversion2に向くのを防ぎます。

"overrides": {
    "@docusaurus/core": "3.0.0",
    "@docusaurus/theme-common": "3.0.0"
},

必要に応じてdocusaurus.config.jsにindex対象を設定します。

module.exports = {
  // ...
  plugins: [
    [
      require.resolve("@easyops-cn/docusaurus-search-local"),
      {
        // Options here
        indexDocs: true,
        language: "ja",
      },
    ],
  ],
}

あとはversion2と同じくプラグインのインストール後、buildで静的ファイル生成を行ってserveで実行します。

% npm install @easyops-cn/docusaurus-search-local
..
added 11 packages, and audited 1255 packages in 2s

295 packages are looking for funding
  run `npm fund` for details

16 moderate severity vulnerabilities

To address issues that do not require attention, run:
  npm audit fix

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.
% npm run docusaurus build
..
✔ Client


✔ Server
  Compiled successfully in 13.05s


✔ Client


● Server █████████████████████████ cache (99%) shutdown IdleFileCachePlugin
 stored

[Local Search] [INFO]: Gathering documents
[Local Search] [INFO]: Parsing documents
[Local Search] [INFO]: 2 indexes will be created.
[Local Search] [INFO]: Building index default (4 documents)
[Local Search] [INFO]: Building index docs-default-current (102 documents)
[Local Search] [INFO]: Index default written to disk
[Local Search] [INFO]: Index docs-default-current written to disk
[SUCCESS] Generated static files in "build".
[INFO] Use `npm run serve` command to test your build locally.
% npm run docusaurus serve

あとがき

修正点判明後の対応が本当に早かったため、優先してのfixだったと予想できます。Fork版v0.37.1でversion3対応となりました。オリジナル版でもoverride指定を入れることで動作することを確認しています。

費用面でAlgoliaが使えず、TypeSenseは設定が上手くいかない場合における、数少ない選択肢になりそうです。