静的サイトに特化した全文検索ライブラリ「Pagefind」、さくらのレンタルサーバで動かしてみた

今回は「静的サイトに特化した全文検索ライブラリ「Pagefind」、さくらのレンタルサーバで動かしてみた」についてご紹介します。

関連ワード (動作確認、同時、開発等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


先日、静的サイトに特化した全文検索ライブラリとして「Pagefind」というソフトウェアがあることを、下記の記事が話題になったことで知りました。

参考:静的サイトに特化した検索ライブラリ Pagefind を試す | grip on minds

実は、いまお読みのPublickeyはまさに、Movable TypeというCMSを用いて生成された静的なWebサイトです。現在、PublickeyではGoogleが提供している「Googleカスタム検索エンジン」を全文検索エンジンとして採用しています(右上の虫眼鏡アイコンから呼び出せます)。

しかしPublickeyでは以前からGoogleに依存しない、自前の全文検索エンジンを持てないかと模索しており、まさにPagefindは私が探し求めていたソフトウェアだったと言えます。

そこでさっそくPagefindがPublickeyに導入できるかどうか、調べてみることにしました。

Pagefindをさくらのレンタルサーバで動かせるか?

上記の記事や公式サイトを読むと、Pagefindの仕組みは、「pagefind」というコマンドをサーバ上で実行することで静的サイトの大量のHTMLファイルを読み込み、インデックスファイルをJavaScriptファイルなどのファイル群として生成します。

それをWebブラウザ上で読み込み、ユーザーが入力した検索キーワードに対応してJavaScriptが実行され、結果を表示する、というもののようです。

仕組みそのものはPublickeyでも利用できそうだということが分かりました。

ただし問題が2つありました。

1つは、ドキュメントによるとPagefindのインストールにはNode.jsのパッケージマネージャに関連した「npx」コマンドを使うと説明されていることです。Publickeyは、さくらのレンタルサーバを利用しているのですが、さくらのレンタルサーバにはNode.js環境は標準で用意されていません。

もう1つは、Pagefindが公式で提供しているビルド済みのファイルは、Windows版、macOS版、Linux版しか提供されていないことです。さくらのレンタルサーバのOSはFreeBSDなので、そのままでは実行できません。

この2つを同時に解決するには、PagefindのソースコードをFreeBSD上でビルドし、できあがったバイナリをさくらのレンタルサーバに転送し実行する、という方法が考えられます。

早速試してみることにしました。

Windows上の仮想マシンでFreeBSDを動かす

具体的には、Windows上で仮想マシンを起動し、そこでFreeBSD環境を用意します。

次に、PagefindはRust言語で開発されていることが分かったので、FreeBSD上にRust言語をインストールし、Pagefindをビルドする、という手順で試してみましょう。

Windows 11での仮想マシンの立ち上げは、コントロールパネルを起動し、Hyper-Vを有効にします。

fig

次に、FreeBSDの公式サイトからHyper-V用のイメージを取得します。さくらのレンタルサーバはFreeBSD 13.0だったので、FreeBSD 13.2のAMD64版となる「FreeBSD-13.2-RELEASE-amd64.vhd.xz」をダウンロードし、解凍します。

解凍したファイルをHyper-Vで読み込んで起動すると、仮想マシン上でFreeBSD 13.2が起動します。

fig

ただしデフォルトの状態ではストレージの容量が5GBしかなく、Rust言語がインストールできません。そこで、こちらのサイトを参考に、ストレージを拡張します。

基本的な操作は、Hyper-Vマネージャから仮想ハードディスクの拡張を行い、その後FreeBSDのコンソールからrootで以下のコマンドを実行することになります。

Rust環境でPagefindのビルドを実行

これでFreeBSDのストレージ容量が確保できたので、次はRust言語のインストールとPagefindのビルドです。このサイトが大変参考になりました。

Rust環境の構築は次のコマンドをrootのまま実行しました。

これでRut言語だけでなくパッケージマネージャのcargoまでインストールしてくれます。

次に、cargoコマンドでPagefindをインストールするため、以下のコマンドを入力します。するとPagefindのソースコードを取得してビルドしてくれます。

ビルドが正常に終了すれば、「pagefind」コマンドが「/root/.cargo/bin/」の下に保存されています。これでFreeBSDで実行可能なPagefindのバイナリが手に入ったはずです。

これをftpのバイナリモードなどで、さくらのレンタルサーバへ転送します。そしてパスを通して実行してみたところ、エラーを吐くことなく無事に実行できました!

fig

あとは設定やカスタマイズ

あとは公式ドキュメントを読みつつ、設定やカスタマイズを行えばよいはずです。

また、cronを使って定期的にpagefindコマンドを実行するように設定すれば、つねに最新のコンテンツに対して検索できるようになります。

ちなみに、Publickeyの約6000記事のインデックス化にかかった時間は約20秒でした。その高速さにも驚かされました。

下記が、実際にさくらのレンタルサーバでPagefindを動かしてPublickeyのコンテンツをインデックス化し、検索可能にしたものです。「AWS」とか「Kubernetes」とか「GitHub」とか、適当なキーワードを入力してみてください。

document.addEventListener(‘DOMContentLoaded’, () => {
new PagefindUI({ element: “#search”,pageSize : 10,
excerptLength: 50 });
});

まだデフォルトの状態のままなので、結果が長くなって見にくいところなどがありますが、実際にPagefindがさくらのレンタルサーバ上で(そしてMovable Typeのコンテンツでも問題なく)動くこと、そして6000本以上もある記事でもサクサクと検索できることを確認できると思います。

もう少し動作確認と設定を行った後、近いうちにPublickeyでこのPagefindを正式な機能として投入しようと考えています。お楽しみに!

関連記事

Publickeyは昨年(2023年)、関連記事の動的生成を自前のプログラムで実現することに成功しています。Pagefindは、もしかしたら関連記事の精度を高めることに活用できるかもしれない、とも思っています。

  • Publickeyが関連記事の動的生成をPHPとJavaScriptとMovableTypeで実装した方法とは?

COMMENTS


Recommended

TITLE
CATEGORY
DATE
伊藤忠グループの日本サニパックにおける社員のデータ利用スキル育成方法
IT関連
2022-12-16 19:49
次世代ビジネスアプリケーションの鍵となる"コンポーザブル"やローコード
IT関連
2021-07-15 12:05
大和総研、大和証券にゼロトラストセキュリティを導入
IT関連
2022-09-29 07:46
支出管理SaaS提供のリーナーテクノロジーズが見積依頼書を「5ステップ5分」で作成できる「Leaner見積」公開
ネットサービス
2021-05-14 23:34
資生堂、ITファイナンス管理基盤を導入–戦略的なIT投資を強化
IT関連
2021-03-25 20:11
公務員のテレワーク進まず 住民との窓口多く対応に苦慮
IT関連
2021-01-16 18:27
WhatsApp対抗のインドHikeがメッセージングアプリからの撤退を発表
ネットサービス
2021-01-20 18:36
SnapchatにARとカメラを活用したコマース重視の新機能追加
ソフトウェア
2021-05-25 21:50
新しい「Bing」、誰でも利用可能に–オープンプレビューに移行
IT関連
2023-05-09 04:50
NTTとNEC、欧州自動車産業向けに5Gシステムを展開へ
IT関連
2021-06-29 19:08
エクシオグループ、仮想GPU対応のAI基盤を構築–通信工事現場の写真判定を3秒以下に
IT関連
2022-05-03 18:57
AWSでAppleシリコンによるビルドやテストが可能に、「Amazon EC2 M1 Macインスタンス」が正式リリース
Apple
2022-07-11 20:59
「Fedora Linux」から「Ultramarine」に移行して使いやすさを高めるには
IT関連
2024-06-14 01:50
サービスの信頼性と開発効率を両立するSRE–GoogleとJCBの取り組み
IT関連
2022-08-31 10:15