Searxは終了?SearXNGとの違いと選び方
Searxは2023年4月以降コードコミットがなく、READMEにも未メンテナンスと記載されています。現状を確認するコマンドと、SearXNGでインスタンスを構築する際の変更点を解説します。
Searx と SearXNG: どちらをインストールすべきか
Searx と SearXNG は、名前がほぼ同じ別々のプロジェクトです。現在も修正が提供されているのは一方だけです。SearXNG をインストールしてください。元の Searx には 2023 年 4 月以降コードコミットがなく、README 自身も「Searx は現在メンテナンスされていません」と明記しています。
これは理念の問題ではなく、実務上の問題です。2 つのプロジェクトはスクリーンショット、設定ファイルの大部分、名前の半分を共有しているため、一方を対象に書かれたガイドがもう一方にも適用できるように見えます。しかし、実際には適用できません。設定ファイルの場所が異なり、ボット対策は新しく、パッケージ名は現在の Ubuntu から削除されています。以下では、この違い自体、状態を自分で確認するコマンド、そしてインスタンスを構築する際に変わった点を説明します。
Searx とは何か、SearXNG はどのように生まれたか
Searx はメタ検索エンジンです。独自のインデックスは保持しません。検索クエリを受け取り、Bing、DuckDuckGo、Wikipedia などの他の検索サービスへ転送し、返ってきた結果を1つの結果ページにまとめます。これにより、各サービスからは利用者のアドレスではなく、サーバーのアドレスが見えるという利点があります。一方で、保守が必要です。各エンジンは、他者の HTML または API を解析する小さなコードです。そのため、接続先が変更されるたびにエンジンが動作しなくなります。メタ検索エンジンの健全性は、エンジンモジュールを修正する人々の活動に左右されます。
searx リポジトリは 2013年10月に作成されました。2021年4月、元メンテナーの1人が、これをフォークして SearXNG を開始しました。「NG」は next generation を意味します。Searx の README では両プロジェクトを並べて説明しており、この説明が現在も分岐の概要として最も明確です。
SearxNG は、searx の元メンテナーが作成した searx のフォークです。
SearxNG ではローリングリリースを採用し、依存関係がより頻繁に更新され、エンジンの修正も迅速です。
フォークの背景にあった意見の相違は、診断情報の扱いに関するものでした。Searx は、利用データをインスタンスが保持すべきではないと考えていました。デフォルト設定にも、その方針が明記されています。enable_stats: False # activate /stats page - note: it may leak usage data。SearXNG は反対の判断を採用し、デフォルトで enable_metrics: true を提供します。これらのメトリクスにより、応答時間バーやエラーページが表示され、故障したエンジンを見つけて修正しやすくなります。どちらの立場にも妥当性はあります。ただし、コードの提供を継続できたのは一方だけでした。
Searx は終了したのか?自分で確認する方法
「終了」は GitHub が報告するステータスではないため、存在する2つの指標を確認して判断します。1つ目は、リポジトリがアーカイブされているかどうかと、最後に push された時期です。
curl -s https://api.github.com/repos/searx/searx | jq -r '.archived, .pushed_at'
curl -s https://api.github.com/repos/searxng/searxng | jq -r '.archived, .pushed_at'2026年8月22日時点では、1つ目のコマンドは false と 2026-05-14T10:02:22Z を出力します。2つ目は false と、実行した日のタイムスタンプを出力します。最初の値に注目してください。searx リポジトリはアーカイブされておらず、誰もロックしていません。そのため、この疑問が何度も出てきます。
pushed_at だけでは弱い指標です。ドキュメントを1行変更しただけでも、どのブランチへの push でも更新されるためです。代わりにコミット一覧を確認します。
curl -s 'https://api.github.com/repos/searx/searx/commits?per_page=5' \
| jq -r '.[] | .commit.committer.date[:10] + " " + (.commit.message | split("\n")[0])'2026年8月時点では、次のように出力されます。
2026-05-14 [doc] add hister reference
2023-09-07 Searx is no longer maintained
2023-04-05 Fix quoting issue in search_operator plugin (#3479)
2023-04-04 Bump pallets-sphinx-themes from 2.0.2 to 2.0.3 (#3450)
2023-04-04 Bump selenium from 4.7.2 to 4.8.3 (#3490)下から上へ読みます。通常の開発は2023年4月に止まっています。2023年9月のコミットは、メンテナーが README に通知を書き込んだものです。それ以降の唯一のコミットはドキュメントです。元の作者が Hister に移ったためです。Hister は、他の検索エンジンに問い合わせるのではなく、指定したページやファイルをインデックスする検索ツールです。これは別の考え方であり、実際に必要なのが自分のコンテンツを対象にした個人用検索エンジンであれば有用です。
2つ目の指標はパッケージングです。多くの古いチュートリアルは、明示せずにパッケージングへ依存しています。
- PyPI には
searxリリースが1つあり、バージョンは0.17.0、アップロード日は2020年7月です。pip install searxは成功しますが、fork が存在する9か月前のコードが取得されます。 - Debian は Debian 12 (bookworm) で searx 1.1.0 を提供し、現在も unstable に収録しています。2023年10月に testing から削除されたため、Debian 13 (trixie) には searx パッケージがありません。
- Ubuntu が最後に提供したのは22.04で、バージョンは1.0.0です。Ubuntu 24.04 では、
sudo apt install searxはE: Unable to locate package searxで終了します。 - プロジェクトが常に案内していた公開インスタンス一覧の searx.space には、現在 SearXNG のインスタンスが掲載されています。
正直な状態を説明します。コードは公開されており、現在も動作します。今日 clone して起動することもできます。しかし、エンジンの修正やセキュリティ更新は提供されません。メタ検索エンジンにとって、それが本来の役割のすべてです。検索エンジンは、他者が管理するサービスの都合で劣化します。メンテナンスされていないインスタンスは、サーバーに誰も変更を加えていなくても、毎月取得できる結果が減っていきます。
新しいインスタンスでフォーク版が変更した点
設定ファイルの場所が変わり、オーバーレイになった
Searx では、ソースツリー内の searx/settings.yml を編集しました。SearXNG では、ファイルは /etc/searxng/settings.yml にあり、プロセスは SEARXNG_SETTINGS_PATH 環境変数を通じてこのファイルを見つけます。インストーラーがそこへコピーするテンプレートは短いものです。
use_default_settings: true
general:
debug: false
instance_name: "SearXNG"
search:
safe_search: 2
autocomplete: 'duckduckgo'
formats:
- html
server:
# Is overwritten by ${SEARXNG_SECRET}
secret_key: "ultrasecretkey"
limiter: true
image_proxy: true
valkey:
# URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}.
url: valkey://localhost:6379/0use_default_settings: true が作業方法を変える行です。この設定により、ファイルには上書きする項目だけを記述し、省略したキーにはパッケージ内に含まれるデフォルト値が使われます。これがない場合、ファイルにはエンジンごとの設定を含む完全な構成を記述する必要があります。そのため、インスタンスは正常に起動するのに何も見つからない状態になります。古い Searx の設定ファイルをこのパスに貼り付けると、キー名の異なる完全な設定になるため、後者の方式が使われ、正常に動作しません。
Secret key がプロセスを停止する
sudo -H sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" \
"/etc/searxng/settings.yml"テンプレートをコピーした後、これを 1 回実行します。実行しない場合、SearXNG は 1 行をログに記録して status 1 で終了します。webapp.py がサービス提供前にキーとテンプレートの値を比較するためです。
server.secret_key is not changed. Please use something else instead of ultrasecretkey.general.debug が true の場合、このチェックはスキップされます。そのため、デバッグセッションでは正常に動作するインスタンスが、systemd やコンテナ上では起動を拒否することがあります。docker compose logs にこの行があるコンテナが再起動を繰り返す場合、原因は壊れたイメージではなく、このチェックの実行です。
limiter が追加され、Valkey が必要になった
Searx のアプリケーション内部には、レート制限がありませんでした。公開 Searx インスタンスでは、別のサービスを前段に置いていました。リクエストのフィルタリングには filtron、結果コンテンツのプロキシには morty を使います。これら 2 つのリポジトリで最後にコミットが行われたのは 2023 年です。
SearXNG はこれらの処理を自身で行います。レート制限とボット検出は limiter が担当し、server.limiter で有効にします。出荷時のデフォルトでは false、インストーラーのテンプレートでは true です。また、カウンターを保持する Valkey データベースが必要です。Valkey は Redis のフォークで、Ubuntu 24.04 にはパッケージが用意されています。
sudo apt install -y valkey-serverserver:
limiter: true
valkey:
url: valkey://localhost:6379/0この名称変更より前に書かれたガイドでは、代わりに redis: ブロックを設定します。現在の limiter ドキュメントからキー名をコピーしてください。詳細な調整は 2 つ目のファイル /etc/searxng/limiter.toml で行い、server.public_instance: true により、リンクトークン方式を含む、公開インスタンスに必要な厳格なボット検出を有効にします。目に見える結果として、一部のリクエストには検索結果ではなく HTTP 429 が返されます。インスタンスに対してスクリプトを実行する場合は、自身のリクエストも対象になります。これについては、SearXNG インスタンスが 429 Too Many Requests を返す理由 に専用の説明があります。
エンジンは自身を停止し、タイムアウトは長い
上流サービスが CAPTCHA またはレート制限ページを返すと、SearXNG は型付き例外を発生させます。その後、ブロックされるまで再試行するのではなく、一定時間そのエンジンへのリクエストを停止します。デフォルト値は searx/settings.yml の search.suspended_times にあります。2026 年 8 月時点で公開されている値は 6 個です。
The data behind this chart
[
{
"label": "SearxEngineAccessDenied",
"suspend_seconds": "180"
},
{
"label": "SearxEngineCaptcha",
"suspend_seconds": "3,600"
},
{
"label": "SearxEngineTooManyRequests",
"suspend_seconds": "180"
},
{
"label": "cf_SearxEngineCaptcha",
"suspend_seconds": "1,296,000"
},
{
"label": "cf_SearxEngineAccessDenied",
"suspend_seconds": "86,400"
},
{
"label": "recaptcha_SearxEngineCaptcha",
"suspend_seconds": "604,800"
}
]単純なアクセス拒否の応答では、そのエンジンを 180 秒間停止します。CAPTCHA の場合は 3,600 秒間停止します。Cloudflare CAPTCHA の場合は 1,296,000 秒間停止します。これは 15 日間に相当します。Google reCAPTCHA の場合は 604,800 秒間停止し、これは 1 週間に相当します。これらの長い値は意図的なものです。サービスがアドレスを検出した後に再度リクエストすると、インスタンスの IP が恒久的にブロックされるためです。
エンジンが停止している間、結果ページはそのエンジンをスキップし、サイドバーの "Messages from the search engines" というブロックに表示します。失敗した内容は /stats/errors に一覧表示されます。新しいインスタンスで結果が少ない場合、通常はインストールの失敗ではなく、この状態が原因です。
JSON API はデフォルトで無効になっている
出荷時のデフォルトは formats: [html] だけです。そのため、すべてのスクリプトが必要とする API は、明示的に有効にするまで閉じています。
curl -s -o /dev/null -w '%{http_code}\n' \
'http://127.0.0.1:8888/search?q=test&format=json'この場合、403 が出力されます。検索ルートは、要求された形式が search.formats に列挙されていない場合に flask.abort(403) を呼び出すためです。形式を追加して、サービスを再起動します。
search:
formats:
- html
- jsonsearx の設定ファイルには formats キーが存在しません。そのため、JSON 出力は要求するだけで利用できました。当時のすべてのスクリプトとスニペットは同じ前提で動作し、失敗すると説明のない 403 だけが返されます。インスタンスをツールから利用する場合は、エージェントに検索用の SearXNG エンドポイントを提供する方法 の最初に、この設定を行います。
コピーして使う Searx のチュートリアルが失敗する理由
次の各行は、現在も検索結果の上位に表示されるガイドに載っています。しかし、現在のインストール環境では失敗するか、誤解を招きます。
sudo apt install searxは Ubuntu 24.04 ではE: Unable to locate package searxで停止します。このパッケージの最後のリリースは 22.04 向けだからです。pip install searxは成功し、2020 年 7 月の 0.17.0 をインストールします。フォークより前のバージョンであることは警告されません。git clone https://github.com/asciimoo/searxは現在も動作します。GitHub が旧オーナー名をリダイレクトし、2023 年 4 月時点のツリーを取得するためです。- ソースツリー内の
searx/settings.ymlを編集する手順は、SearXNG では何も変更しません。SearXNG が読み込むのは/etc/searxng/settings.ymlです。 - filtron や morty をインストールする手順は、SearXNG にすでに含まれている機能の一部を再構築しています。
- リミッターの
redis:URL は、現在のvalkey:キーより 1 回前の名称です。
SearXNG のガイドも古くなります。clone URL を見れば、そのガイドがいつのものかを最も早く判断できます。compose ファイルは以前、別の searxng-docker リポジトリに置かれていました。そのリポジトリは 2026 年 3 月にアーカイブされ、ファイルはメインリポジトリの container/ に移されました。ドキュメントに記載されている現在のコンテナ向けクイックスタートは次のとおりです。
mkdir -p ./searxng/core-config/
cd ./searxng/
curl -fsSL \
-O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
-O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
cp -i .env.example .env
nano .env
docker compose up -d最後のコマンドを実行する前に .env を編集します。イメージは環境変数を設定キーに対応付けます。そのため、SEARXNG_SECRET は server.secret_key になり、SEARXNG_BASE_URL は server.base_url になります。スクリプトによるホストへのインストールは別の手順ですが、結果は同じです。
git clone https://github.com/searxng/searxng.git searxng
cd searxng
sudo -H ./utils/searxng.sh install allこれにより、searxng ユーザー、/usr/local/searxng 配下の仮想環境、uWSGI サービスが作成されます。これは SearXNG ドキュメントにおける標準構成です。この手順の詳細な説明は、自分で管理する VPS に SearXNG をインストールする を参照してください。
公開インスタンスと自分のインスタンス
公開インスタンスは、TLS(トランスポート層セキュリティ)接続を終端する他者のサーバーです。そのため、そこで動作するソフトウェアは検索クエリを平文として読み取れます。SearXNG の公式ドキュメントは、信頼の問題を明確に説明しています。管理者を信頼する必要があり、リクエストが記録、集計、または第三者に渡されているかどうかを知ることはできません。確認できる項目はこれですべてです。運用者のスタックは、クエリの内容、時刻、リクエスト元の IP アドレス、ブラウザーの user agent、設定を保持する preference cookie を確認できます。運用者はコードも管理しているため、適用したパッチは、そのインスタンスで実行するすべての検索に影響します。
デフォルト設定の1つでは、意図せずログに記録されやすくなります。Searx は検索を POST として送信していました。SearXNG は method: "GET" を提供しており、POST では検索クエリをブラウザー履歴に残さずに済む一方、使い勝手に問題が生じると説明しています。GET ではクエリがリクエスト行に含まれるため、デフォルトで reverse proxy のアクセスログとブラウザー履歴に記録されます。これは通常の Web サーバーの動作です。どのサーバーで実行するかを選ぶ前に、この点を把握しておく価値があります。
自分のインスタンスを運用しても、信頼の対象がなくなるのではなく、移るだけです。コードとログを自分で管理できます。また、単一ユーザー用のサーバーにホスト名や TLS 証明書を公開したくない場合は、v3 onion service 経由で接続することで、どこからでもアクセスしながらインスタンスを公開 DNS から外せます。その代わり、上流の検索エンジンからは、すべての検索が1つのアドレスから送信されたように見えます。単一ユーザー用のインスタンスでは、各クエリが他の利用者に紛れず、あなた自身に結び付きます。利用者の多い公開インスタンスでは、その集団への紛れ込みを得られる一方、ログを自分で管理することはできません。重視する性質を選んでください。リスクをすべて先に確認したい場合は、SearXNG が安全に使用できるかで詳しく説明しています。
VPS について、実務上の注意点があります。データセンターのアドレス範囲は家庭用回線より早く問題視されるため、新しいインスタンスでは、最初の数回の検索以内に一部の検索エンジンで CAPTCHA が表示されます。これは上記の停止動作が機能しているためであり、設定ミスではありません。
すでに Searx インスタンスを運用している場合
これを読んだ日に問題が発生するわけではありません。次の upstream の変更によって別のエンジンが壊れるまでサーバーは動作し、その後は壊れたままになります。移行を計画し、設定ファイルをそのまま移行しないでください。SearXNG のテンプレートから始め、意図的に変更した項目だけを再設定します。対象は、インスタンス名、safe_search、名前で指定した有効化または無効化するエンジン、インターフェースのデフォルト設定です。フォークではエンジン名とオプションが変更されているため、キーがまだ存在すると決めつけず、現在のドキュメントでそれぞれ確認してください。Filtron のルールと morty URL に相当する設定はありません。これらの処理はアプリケーション内部に移されたためです。
古いインスタンスを起動したまま、新しいインスタンスを別のポートで起動します。フロントページが 200 を返し、検索結果に複数のエンジンの結果が含まれ、/stats/errors が空であるか、内容を把握している失敗だけを表示していれば、正常に動作しています。その後、リバースプロキシの転送先を新しいインスタンスに変更し、古いサービスを停止します。
FAQ
Searx は 2026 年に終了していますか?
リポジトリはアーカイブされていないため、クローンを作成すること自体は可能です。ただし、プロジェクトは保守されていません。最後のコードコミットは 2023 年 4 月で、README には「Searx is no longer maintained.」と記載されています。curl -s https://api.github.com/repos/searx/searx | jq -r '.pushed_at' で自分でも確認し、その後で最近のコミットメッセージを読んでください。プッシュ日時だけでは、ドキュメントの編集によるものか判断できないためです。メタ検索エンジンでは、保守されていないと検索結果が自然に悪化します。各エンジンモジュールは、変更を続ける上流サイトに依存しているためです。
apt または pip で Searx をまだインストールできますか?
現在のシステムではできません。インストールできる場合でも、実用的ではありません。Ubuntu が最後に searx をパッケージ化したのは 22.04 で、バージョンは 1.0.0 でした。そのため、24.04 で sudo apt install searx を実行すると E: Unable to locate package searx が返ります。Debian は Debian 12 で 1.1.0 を提供しましたが、2023 年 10 月に testing から削除しました。そのため、Debian 13 にはパッケージがありません。PyPI では 2020 年 7 月の 0.17.0 がまだ提供されていますが、これはフォーク自体より古いバージョンです。代わりに SearXNG をインストールしてください。
古い searx の settings.yml は SearXNG で動作しますか?
いいえ。ファイル自体ではなく、値を移行してください。SearXNG は /etc/searxng/settings.yml を読み込み、先頭に use_default_settings: true があることを想定しています。そのため、ファイルは提供済みのデフォルト設定に対する上書きとして機能します。古い searx のファイルは完全な設定ファイルで、キー名も異なります。また、limiter、valkey ブロック、formats リストがありません。utils/templates/etc/searxng/settings.yml にあるテンプレートを基にして、変更内容を 1 つずつ追加し直してください。
自分の SearXNG インスタンスが公開インスタンスより少ない検索結果を返すのはなぜですか?
一部のエンジンが一時停止されているためです。エンジンが CAPTCHA またはレート制限ページを返すと、SearXNG は一定時間そのエンジンへの問い合わせを停止します。単純な拒否では 180 秒、Cloudflare CAPTCHA では最大 1,296,000 秒です。結果ページの「検索エンジンからのメッセージ」にこの状態が表示され、/stats/errors には失敗したエンジンとその理由が一覧表示されます。データセンターのアドレスは家庭の接続より早くフラグが付くため、新しい VPS インスタンスではこの問題がすぐに発生します。
公開 SearXNG インスタンスを使うべきですか、それとも自分で運用すべきですか?
コードとログを管理したい場合は、自分で運用してください。ただし、上流のエンジンからは、すべての検索に対して同じアドレスからアクセスしているように見えることを受け入れる必要があります。自分の検索を他の利用者の検索と混在させることを、ログに何が記録されるか把握することより重視するなら、公開インスタンスを使用してください。公開インスタンスでは、運用者が検索語、時刻、IP アドレス、ユーザーエージェントを確認できます。また、運用者は任意のタイミングでコードを変更できます。外部からは、掲げられたログ記録ポリシーを検証できません。