ここ何年か、個人でウェブ検索する時は DuckDuckGo を使っているので、右上の Search も DuckDuckGo にしました。

なぜ DuckDuckGo ?

DuckDuckGo はプライバシー保護、広告の少なさ、フィルターバブル(特定の情報だけが表示される状態)の回避、国別の結果切り替えが容易、などが気に入って個人用途で使っています。macOS と Android のデフォルトの検索エンジンにしています。

このブログの右上の Search を使う人は私くらいだと思いますが、他の方の利用も考慮し、プライバシー保護の観点から DuckDuckGo にしました。

一方で Google 検索と比較して、たまに DuckDuckGo が反応しない、検索精度に多少不安がある、などのデメリットは感じており、これらを許容しています。

なぜ外部検索エンジン?

このブログは HugoPaperMod テーマを使っているので、素直に 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>

Google

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"
---

これらが検索フォーム用のファイルのようです。

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 検索ツールがあれば、下の [メッセージ送信] から教えてもらえると嬉しいです。