ここ何年か、個人でウェブ検索する時は DuckDuckGo を使っているので、右上の Search も DuckDuckGo にしました。
なぜ DuckDuckGo ?
DuckDuckGo はプライバシー保護、広告の少なさ、フィルターバブル(特定の情報だけが表示される状態)の回避、国別の結果切り替えが容易、などが気に入って個人用途で使っています。macOS と Android のデフォルトの検索エンジンにしています。
このブログの右上の Search を使う人は私くらいだと思いますが、他の方の利用も考慮し、プライバシー保護の観点から DuckDuckGo にしました。
一方で Google 検索と比較して、たまに DuckDuckGo が反応しない、検索精度に多少不安がある、などのデメリットは感じており、これらを許容しています。
なぜ外部検索エンジン?
このブログは Hugo の PaperMod テーマを使っているので、素直に Fuse.js を使えば良いのですが、記事数が 1,500 近くあり検索がもっさりしてしまうので、外部の検索エンジンを使っています。
設置例
DuckDuckGo を始めとして、今まで使っていた Google や、その他試した検索方法を貼っておきます。
DuckDuckGo
content/search.md:
---
title: "Search"
showtoc: false
comments: false
author: " " # 姑息な手段で author を非表示にする。空 div は残る
_build:
list: "never"
---
<form id="searchbox" method="get" action="https://duckduckgo.com/">
<input type="text" name="q" value="" autofocus placeholder="Search this site with DuckDuckGo">
<input type="hidden" name="k1" value="ja">
<input type="hidden" name="sites" value="https://masutaka.net/">
</form>
content/search.md:
---
title: "Search"
showtoc: false
comments: false
author: " " # 姑息な手段で author を非表示にする。空 div は残る
_build:
list: "never"
---
<form id="searchbox" method=get action="https://www.google.co.jp/search">
<input type=text name=q value="" autofocus placeholder="Search this site with Google">
<input type=hidden name=ie value=UTF-8>
<input type=hidden name=oe value=UTF-8>
<input type=hidden name=hl value="ja">
<input type=hidden name=sitesearch value="https://masutaka.net/"><br>
</form>
Fuse.js
PaperMod テーマでは Fuse.js が使えるので、これだけで検索フォームを設置できます。
config.toml:
[outputs]
home = ["html", "json", "rss"]
content/search.md:
---
title: "Search"
layout: "search"
---
これらが検索フォーム用のファイルのようです。
- assets/css/common/search.css
- assets/js/fastsearch.js
- assets/js/fuse.basic.min.js
- layouts/_default/search.html
Lunr.js
今回 Lunr.js も知ったので手元で試作しましたが、Fuse.js とのパフォーマンスの違いを感じなかったので採用しませんでした。
リファクタリングの余地はあると思いますが、以下のファイルが増えてしまうのも避けたい気持ちがありました。
- layouts/_default/index.json
- static/js/lunr.ja.js
- static/js/lunr.multi.js
- static/js/lunr.stemmer.support.js
- static/js/search.js
- static/js/tinyseg.js
その他
- Meilisearch
- Cloud 版に課金するか、インスタンスを立てる必要があるため不採用としました
- Algolia
- デプロイ時に Algolia 用に調整した index.json をビルド&アップロードして、検索用の JS を書いて…と考えて止めました 😅
- 気が向いたら試すかもしれません
- Search tools | Hugo
- Hugo オフィシャルで、その他の方法がまとまっています
まとめ
あれこれ考えた結果、Hugo の検索フォームを Google から DuckDuckGo に変えました。
時間があるときに Algolia も試してみます。
おすすめの Hugo 検索ツールがあれば、下の [メッセージ送信]
から教えてもらえると嬉しいです。