静的サイトに特化した全文検索ライブラリ「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
与信サービス構築基盤Credit as a Serviceを展開するCrezitが6.5億円調達、開発・経営チームの採用強化
IT関連
2022-02-25 10:45
Kubernetesベースの開発で面倒なDevOps部分をPaaSとして引き受けるPorter
ソフトウェア
2021-08-02 16:12
第3回:なりすましメール対策の「DMARC」–すぐに実現できる仕組み
IT関連
2022-06-01 18:11
Oracle Cloudのリージョンを社内に持てる「OCI Dedicated Region」、最小12ラック、年間1億3000万円からの対応をオラクルが発表
Oracle
2022-06-23 00:19
企業が運用するKubernetesクラスター数は今後大幅増に–VMware調査
IT関連
2022-05-12 06:15
デル・テクノロジーズ、ハイエンドストレージの新製品発売
IT関連
2022-08-24 04:54
英GCHQによる大量データ傍受はプライバシーの権利侵害–欧州人権裁判所
IT関連
2021-05-28 14:02
AWSジャパン、オペレーショナルレジリエンス向上を支援–金融戦略を説明
IT関連
2023-03-24 09:11
日本を代表する大手クラウド運用の裏側はどうなっている? 運用をクリエティブに改善する方法とは。Cloud Operator Days Tokyo 2022[PR]
PR
2022-07-13 20:31
クラウドビジネスが変わる–ヴイエムウェアCTOが語る「非中央集権化」
IT関連
2022-09-15 04:10
日立製作所、IoT機器などの脅威・脆弱性情報を収集分析するサービスをAIで強化
IT関連
2021-03-08 16:50
中国のフィンテックWalletsClubは世界で使える「eウォレットのためのVisa」を目指す
IT関連
2021-05-24 22:06
総合商社の決算まとめ:伊藤忠、三井物産は今期最高益の予想
IT関連
2021-06-08 23:26
職業としてのセキュリティ–日本企業がIT分野で思考を停止した経緯
IT関連
2022-12-22 12:13