静的サイトに特化した全文検索ライブラリ「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
ライフログアプリSilentLogを提供するレイ・フロンティアが個人ユーザー・自治体・企業に向け防災機能をリリース
IT関連
2022-03-12 20:09
日立、ブロックチェーン利用の「日立電子署名サービス」を開発
IT関連
2021-03-04 09:43
データサイエンティスト500人–リコー新中計にみるデジタル人材の重要性
IT関連
2023-03-09 22:58
今こそ知っておきたい「TensorFlow」–機械学習ソフトウェアライブラリーの進化
IT関連
2021-05-23 12:47
新興EV企業のRivianが2023年末までに全米に1万基以上の充電器を設置すると発表
モビリティ
2021-03-21 17:02
ユーザーとAdobeが力を合わせて登頂に成功したコードネーム「HOTAKA」と日本語DTP完成への道 InDesign日本語版発売20周年(前編) (1/6 ページ)
イラスト・デザイン
2021-02-17 11:45
ダブリンのExergynは形状記憶合金を使って温室効果ガスの原因となる冷媒を代替
IT関連
2022-01-23 06:04
上っ面の業務自動化ではなく、本質的な自動化に必要なこと
IT関連
2022-06-10 13:44
法務管理クラウド「GVA manage」、「ドキュサイン」とAPI連携
IT関連
2023-03-26 13:11
ドーモ、「Domo.AI」など事業戦略を発表–ソニー銀行は組織全体で活用
IT関連
2023-09-23 18:18
芝浦機械とマクニカが熟練技能の継承をAIで実現
IT関連
2022-06-23 13:55
アカマイ、セキュリティ強化とエッジ開発など展開–2021年戦略
IT関連
2021-02-27 16:39
「DarkSide」の攻撃を受けたColonial、操業再開 バイデン大統領はサイバーセキュリティに関する新大統領令に署名
セキュリティ
2021-05-14 13:35
さいたま市、基幹業務システムの統合基盤をNutanixに移行
IT関連
2024-07-13 18:24