元々自前で実装しようとも思ってたけどめんどくさくなっちゃったのと良い感じのライブラリがあったのでそれを使うことにした!!
Pagefindは最小限の帯域幅で動作する静的全文検索エンジンで、ホスティングサービスなしで利用できる良い感じのライブラリです
$ bun add pagefind @pagefind/default-ui
たった一行で終了です
簡単ですね
次に、インデックスを作成するために次のコマンドを実行します。
Astroの場合デフォルトで dist
ディレクトリに成果物が生成されるため、次のように実行します
$ bunx pagefind -s dist
これによって、dist/pagefindにインデックスが作成されます。
また、これはビルド毎に行う必要がある(当たり前)なので、CI/CDにもこの工程を挟む必要があります
PagefindのデフォルトUIを使ってスタイリングなしで実装できます。
簡単ですね
<div class="search" />
<script>
import { PagefindUI } from "@pagefind/default-ui";
new PagefindUI({
element: ".search",
translations: {
placeholder: "Search"
}
});
</script>
Pagefindでは言語がhtml.langから判別されてプレースホルダーなどの言語が設定されるのですが、今回はプレースホルダーのテキストを変更しています。
タグに data-pagefind-*
属性を付与することによって、インデックスする対象を設定することができます。
詳しくはドキュメントを参照してください
このサイトでは、記事のレイアウトの本文部分のみをインデックスして検索対象をブログのみに絞っています。
...
<div class="text-left prose porse-h1:text-3xl" data-pagefind-body>
<Content />
</div>
...
めちゃ簡単に検索エンジンが入ってすげーって思いました
Cloudflare PagesやGithub Pagesみたいな静的なホスティングサービスでも動かせるのがすごく良いと思います