SSD Nodes Learn Hosting plans →
ガイド Matt Connor著者 Matt Connor ・更新日 2026-10-11

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年10月10日時点では、最初のコマンドが false と 2026-05-14T10:02:22Z を出力します。2つ目は false と、通常は直近1〜2日以内のタイムスタンプを出力します。最初の値を確認してください。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年10月10日時点では、次のように出力されます。

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  Update searx.data - update_wikidata_units.py (#3454)

下から上へ読んでください。通常の開発は2023年4月に止まっています。2023年9月のコミットは、メンテナーが README に告知を書き込んだものです。その後の唯一のコミットはドキュメントの変更です。元の作者が Hister に移行したためです。Hister は他の検索エンジンへ問い合わせるのではなく、指定したページやファイルをインデックス化する検索ツールです。これは別の考え方であり、実際に必要なのが 自分のコンテンツを対象にした個人用検索エンジン であれば便利です。

2つ目の指標はパッケージングです。多くの古いチュートリアルは、実際にはここに依存しています。

  • PyPI には searx 個のリリースがあり、2014年1月の 0.1.2 から2020年7月の 0.17.0 まで、すべて現在もダウンロードできます。pip install searx は成功し、最新の 0.17.0 を取得します。ただし、これは 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/0

作業方法を変えるのは use_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 の場合、このチェックは省略されます。そのため、debug セッションでは正常に動作するインスタンスが、systemd またはコンテナ内では起動を拒否することがあります。docker compose logs にこの行を指定したコンテナが再起動を繰り返している場合、原因は壊れたイメージではなく、このチェックが実行されていることです。

limiter が追加され、Valkey が必要になった

Searx のアプリケーション内部にはレート制限がありませんでした。公開 Searx インスタンスでは、別のサービスを前段に置き、リクエストのフィルタリングには filtron、結果コンテンツのプロキシには morty を使っていました。どちらのリポジトリも January 2023 以降コミットがなく、filtron の最後のコミットはその月、morty の最後のコミットは April 2021 です。

SearXNG はこの処理を自ら行います。レート制限と bot 検出は limiter が担当し、server.limiter で有効にします。パッケージのデフォルトでは false、インストーラーのテンプレートでは true であり、カウンターを保持する Valkey データベースが必要です。Valkey は Redis のフォークで、Ubuntu 24.04 にはパッケージが用意されています。

sudo apt install -y valkey-server
server:
  limiter: true

valkey:
  url: valkey://localhost:6379/0

この名称変更前に書かれたガイドでは、代わりに redis: ブロックを設定しています。そのため、キー名は現在の limiter のドキュメントからコピーしてください。詳細な調整は 2 つ目のファイル /etc/searxng/limiter.toml で行い、server.public_instance: true によって、link token 方式を含む、公開インスタンスに必要な厳格な bot 検出が有効になります。目に見える結果として、一部のリクエストは結果ではなく HTTP 429 で応答されます。インスタンスに対してスクリプトを実行した場合は、自分のリクエストも対象になります。詳細は SearXNG インスタンスが 429 Too Many Requests を返す理由 を参照してください。

エンジンは自動的に停止し、タイムアウトは長い

上流サービスが CAPTCHA またはレート制限ページを返すと、SearXNG は型付き例外を発生させます。その後、ブロックされるまで再試行するのではなく、一定時間そのエンジンへのリクエストを停止します。デフォルト値は searx/settings.yml の search.suspended_times にあります。以下は、October 2026 時点で公開されている 6 個の値です。

グラフSearXNG default engine suspension times, in seconds
このグラフのデータ
[
  {
    "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"
  }
]

通常の access denied 応答では、そのエンジンは 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
    - json

Searx の設定ファイルには 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 が古い所有者名をリダイレクトするためです。ただし、現在のデフォルトブランチを checkout します。このブランチでは、2023 年 4 月に変更が止まったアプリケーションコードに、2026 年 5 月のドキュメント変更が加わっています。
  • ソースツリー内の searx/settings.yml を編集する手順は、SearXNG では何も変更しません。SearXNG が読み込むのは /etc/searxng/settings.yml です。
  • filtron や morty をインストールする手順は、SearXNG がすでに内蔵している機能の一部を再構築しています。
  • リミッター用の redis: URL は、現在の valkey: キーより 1 回前の名前を使用しています。

SearXNG のガイドも古くなります。clone URL を確認するのが、ガイドの時期を判断する最も早い方法です。compose ファイルは以前、別の searxng-docker リポジトリにありました。そのリポジトリは現在アーカイブ済みで、最後の push は 2026 年 3 月です。ファイルはメインリポジトリの container/ に移動されました。ドキュメントにある現在のコンテナー quickstart は次のとおりです。

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 サーバーの動作です。どのサーバーで実行するかを選ぶ前に、この点を把握しておく価値があります。

自分でインスタンスを運用しても、信頼先がなくなるのではなく移るだけです。コードとログを管理でき、1 台のユーザー向けボックスにホスト名や TLS 証明書を公開したくない場合は、v3 onion service 経由で接続することで、どこからでもアクセスしながらインスタンスをパブリック DNS から外せます。その代わり、上流のエンジンからはすべての検索が 1 つのアドレスから行われたように見えます。また、単一ユーザーのインスタンスでは、各クエリが他の利用者に混ざらず、あなたに直接ひも付きます。利用者の多い公開インスタンスなら、その集団への混在効果を得られ、ログを自分で管理する必要もありません。重視する性質を選んでください。最初にリスクをすべて確認したい場合は、SearXNG は安全に使用できるかで整理できます。位置情報の履歴も同じ観点で考える必要がありますが、リスクはさらに大きくなります。スマートフォンが 1 日中現在位置を報告すると、検索ログより多くの情報が明らかになるためです。管理下のボックスにそのデータを置きたい場合は、セルフホスト型の位置情報トラッカーを比較することから始めてください。

VPS に関する実務上の注意点です。データセンターのアドレス範囲は家庭用接続より早くフラグが付くため、新しいインスタンスでは、検索を数回行っただけで一部の検索エンジンに CAPTCHA が表示されます。これは上記の停止動作が機能している結果であり、設定ミスではありません。停止期間が終了した後も同じ検索エンジンでブロックされ続ける場合は、変更を加える前に実際のエラーを確認することで、推測だけで対処方法を試す必要がなくなります。

すでに Searx インスタンスを運用している場合

これを読んだ日に問題が発生するわけではありません。次の upstream の変更によって別のエンジンが壊れるまでサーバーは動作し、その後は壊れたままになります。移行を計画し、設定ファイルをそのまま移行しないでください。SearXNG のテンプレートから始め、意図的に変更した項目だけを再設定します。対象は、インスタンス名、safe_search、名前で指定した有効化または無効化するエンジン、インターフェースのデフォルト設定です。フォークではエンジン名とオプションが変更されているため、キーがまだ存在すると決めつけず、現在のドキュメントでそれぞれ確認してください。Filtron のルールと morty URL に相当する設定はありません。これらの処理はアプリケーション内部に移されたためです。

古いインスタンスを起動したまま、新しいインスタンスを別のポートで起動します。フロントページが 200 を返し、検索結果に複数のエンジンの結果が含まれ、/stats/errors が空であるか、内容を把握している失敗だけを表示していれば、正常に動作しています。その後、リバースプロキシの転送先を新しいインスタンスに変更し、古いサービスを停止します。

FAQ

Searx は 2026 年も停止していませんか?

リポジトリはアーカイブされていないため、clone はできます。ただし、プロジェクトは保守されていません。最後のコードコミットは 2023 年 4 月で、README には「Searx is no longer maintained.」と記載されています。curl -s https://api.github.com/repos/searx/searx | jq -r '.pushed_at' で自分でも確認し、その後、最近のコミットメッセージを読んでください。push の日付だけでは、ドキュメントの編集による可能性があるためです。メタ検索エンジンでは、保守されていないと検索結果が自然に悪化します。各エンジンモジュールは、変更が続く外部サイトに依存しているためです。

apt または pip で Searx をまだインストールできますか?

現在のシステムではできません。インストールできる環境でも、実用的ではありません。Ubuntu が searx を最後にパッケージ化したのは 22.04 の version 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 にはすべての searx release が残っていますが、最新は 2020 年 7 月の 0.17.0 で、fork 自体より古いものです。代わりに SearXNG をインストールしてください。

古い searx の settings.yml は SearXNG で使えますか?

使えません。ファイルではなく、設定値をコピーしてください。SearXNG は /etc/searxng/settings.yml を読み込み、先頭に use_default_settings: true があることを想定します。そのため、提供時のデフォルト設定に対する overlay として機能します。古い searx のファイルは、異なる key 名を持つ完全な設定ファイルです。また、limiter、valkey ブロック、formats リストもありません。utils/templates/etc/searxng/settings.yml の template を起点にし、変更を 1 つずつ追加し直してください。

自分の SearXNG instance が公開 instance より少ない検索結果を返すのはなぜですか?

一部の engine が停止されています。engine が CAPTCHA または rate limit ページを返すと、SearXNG は一定時間その engine への問い合わせを停止します。単純な拒否では 180 秒、Cloudflare CAPTCHA では 1,296,000 秒です。結果ページの「Messages from the search engines」にこの状態が表示され、/stats/errors には失敗とその理由が一覧表示されます。データセンターのアドレスは家庭用接続より早く検出対象になるため、新しい VPS instance ではこの問題が早期に発生します。

公開 SearXNG instance を使うべきですか、それとも自分で運用すべきですか?

コードとログを自分で管理したい場合は、自分で運用してください。ただし、その場合、upstream の engine からは、すべての検索に同じアドレスを使っているように見えます。検索内容を他の利用者の検索と混在させることを、ログに何が記録されるか把握することより重視するなら、公開 instance を使ってください。公開 instance では、運用者が検索文字列、時刻、IP アドレス、user agent を確認できます。また、運用者は任意のタイミングでコードを変更できます。外部からは、提示された logging policy を検証できません。