Pagefindの記事検索機能を追加した

このブログには検索機能を設置している(過去記事)。テキストエディタで記事の検索をするほうが速いので私としては、まぁ、あったら多少便利かもなくらいのもので、無ければ無いでも別にいいか、という程度の機能だった。この検索機能はMicrosoft AzureのBing Custom Searchというサービスを使っていた。月間1000回までの検索リクエストが無料なのでこのサイトのようにたいしたトラフィックもない環境に設置する検索サービスとしては必要十分で、Googleカスタムサーチみたいに広告が挿入されることもなく特に不便があったわけではない。

ところで最近Pagefindという静的サイトの指定箇所を全文検索可能にしてくれるというライブラリの存在を知った。外部サービスに依存することもなく、各社のクローラーの訪れを待つ必要もなく、無料で高性能な検索機能が導入できるとなれば使わない手はない。というわけでこれまで設置していたBing Custom Searchを削除し、代わって過去ログページの上部にPagefindの検索フォームを設置してみることにした。

↑こんなのを置いた↑

軽くさわってみただけだが、日本語のクエリでもふつうに使えている。検索速度も速く、ページビルドの際のインデキシングもCloudflare Pagesのビルド時に行えるようMakefileに一行コマンドを書き足すだけで済むし、その実行も数秒で終わった。あまりにもすばらしい。

PagefindはRust言語で開発されていてブラウザ上ではWebAssemblyが有効でないと機能しない。そのためContent Security Policyを過剰にstrictに指定している(過去記事)このサイトではそのままでは使えなかった。仕方ないのでscript-src 'unsafe-eval'を許可している。Wasmのみを明示的に許可することもできなくはないのだが、その仕様にSafariがまだ対応していない。

外部サービスへの依存をなくし、customsearch.aiにリダイレクトさせる必要もなくなった。月間1000回まで検索可能という制限もなくせた。あとはこのxar.shというドメインの運用だけがCloudflareに移行できていない。Cloudflare Registrarは.ioとか.fmといった極一部ccTLD以外は未対応で、.shも例に漏れず別サービスで管理している。私はCloudflare Registrar非対応のドメインはPorkbun🐷で管理していて、これはこれで安くとても使いやすいのでオススメだ。しかし一箇所でまとめて管理したいという気持ちも強い。

ここさえ乗り越えられればこのブログに関するものがCloudflareで一括管理できるようになる。Cloudflareのヘルプページによれば、対応ccTLDの拡大に注力しているとのことである。こちらからできることはなにもないし、気長に待とう。