AI時短ラボ
検証· 約11

自分だけの検索エンジンを作る「Hister」──ブラウザ履歴もローカルファイルもMCP経由で検索対象にする

AGPLv3のOSSツールHisterは、訪れたWebページと手元のファイルを全文インデックス化し、Web・ターミナル・CLI・HTTP API・MCPサーバーという5通りの入口から検索できる自己ホスト型の検索エンジン。テレメトリなし・クラウド必須なしという設計をREADMEから確認した。

自分だけの検索エンジンを作る「Hister」──ブラウザ履歴もローカルファイルもMCP経由で検索対象にする
執筆・編集:
目次

3行まとめ

  1. Histerは、ブラウザで訪れたページと手元のファイルの内容を全文インデックス化し、自分で選んだサーバー上に保存する自己ホスト型の検索エンジン。ライセンスはAGPLv3。
  2. 検索の入口はWeb・ターミナル・CLI・HTTP API・MCPサーバーの5種類が用意されており、AIアシスタントからMCP経由で検索させることもできる。
  3. サイト自身が掲げる原則は「テレメトリなし」「クラウド必須ではない」「クライアントはあなたが設定したHisterサーバーにしかインデックス内容を送らない」の3点。

「ブックマークやファイル名の先」を検索する

Histerのコンセプトは、タイトルやURL・ファイル名だけでなく、インデックス化したページ・ファイルの中身そのものを検索対象にすることだ。サイトのデモには「1,924ページがインデックス済み」の状態で「privacy notes I read last month(先月読んだプライバシーに関するメモ)」と検索すると、0.04秒で6件がヒットする例が示されている。ヒットした結果はスニペットだけでなく、保存された本文プレビューと元の出典(ソース)を並べて表示する。

集める・索引する・見つける、という3ステップ

サイトの説明によれば、仕組みは次の3段階に分かれる。

  1. 収集(Collect):ブラウザ拡張機能で訪れたページを自動的に保存する、ローカルフォルダを監視する、ブラウザ履歴をインポートする、サイトをクロールする、のいずれか
  2. 索引(Index):重要な部分を抽出し、選んだサーバー上で全文インデックス化する
  3. 検索(Find):Web・ターミナル・コマンドライン、あるいはAIアシスタントにMCP経由で取得させる

「収集」で使えるソースとして明記されているのは、ブラウザ拡張機能(Chrome・Firefox向けが配布されている)・ローカルファイル監視・ブラウザ履歴インポート・Webサイトクローラーの4種類。「検索」では、フィールド指定・引用符によるフレーズ検索・ワイルドカード・否定・日付範囲・独自エイリアスといったクエリ言語の機能が使える。「抽出」については、構造化データに対応したコンテンツ抽出器、オプションのセマンティック検索(有効にした場合のみ、自分で設定した埋め込みエンドポイントへテキストが送られる)、言語別インデックス、読みやすいプレビューが用意されている。「ルール適用」では、スキップ・優先度ルール、バージョン管理(過去のドキュメント内容を保持できる)、機微情報チェックが挙げられている。

開発者はSearx(メタ検索エンジン)とColly(Webスクレイピングフレームワーク)の作者だった

Histerの開発者はGitHubアカウントasciimoo(本名Adam Tauber、ハンガリー・ブダペスト在住)。本人のGitHubプロフィールには「Author of Hister, Searx, Colly and a bunch of smaller projects」と明記されている。Searxは、SearXNGの前身にあたるプライバシー重視のメタ検索エンジンとして知られるOSSプロジェクトで、Collyは人気のGo言語製Webスクレイピングフレームワークだ。つまりHisterは、検索エンジンとクローラーの両方を作った経験を持つ開発者による、個人向け検索エンジンという位置づけになる。リポジトリ(asciimoo/hister)はGitHub実測でスター3.2k・フォーク147。

クエリ言語:フィールド指定と日付範囲の実例

Query Language Guideには、field:value形式で使えるフィールドが具体的に列挙されている。

フィールド指定 意味
title: タイトルのみを検索 title:encryption
text: 本文のみを検索 text:"GDPR compliance"
url: / url_re: URLのみ検索(url_re:はGo正規表現) url:*/security/*
domain: ドメイン名のみ検索 domain:github.com
language: 検出された言語で絞り込み language:en
label: ドキュメントのラベルで絞り込み label:research
metadata.KEY: メタデータの値で絞り込み metadata.source:linkding
type: ドキュメント種別(web/file/local) type:file
visits: 訪問回数(範囲指定可:visits:2..4visits:10.. visits:1
added: / updated: 追加日・更新日(相対期間 or 絶対日付) added:>90dadded:>=2026-04-01updated:>90dupdated:<2026-05-01
user_id: ユーザーIDで絞り込み(管理者用) user_id:3

added:updated:は、90d(90日)のような相対期間と、YYYY-MM-DD形式の絶対日付の両方に対応しており、相対期間は秒(s)・分(m)・時(h)・日(d)・週(w)の単位が使える。

MCP経由のアクセスには「プロンプトインジェクション対策」が明記されている

MCP Integrationのドキュメントを読むと、単に検索結果をAIアシスタントに渡すだけでなく、プロンプトインジェクション対策が具体的に設計されていることが分かる。

Every indexed title, URL, metadata value, document body, and history field is untrusted source data. A page can contain instructions aimed at the assistant that reads it. Those instructions must never override the user request, cause secret disclosure, or trigger another tool.

(インデックス化されたタイトル・URL・メタデータ値・本文・履歴のすべてのフィールドは、信頼できない情報源のデータとして扱われる。ページには、それを読むアシスタント宛ての指示が含まれている可能性がある。そうした指示は、ユーザーの要求を上書きしたり、秘密情報を漏洩させたり、別のツールを起動させたりしてはならない)

具体的には、ツールのレスポンスはソース由来の値をstructuredContent.untrusted_contentという区画に格納し、すべてのレコードにtrust: "untrusted"というフラグを付与する。目に見えない制御文字は除去され、HTMLはsearchで明示的に要求された場合かget_previewのプレビューとしてのみ返る。ドキュメント自身も「これらの対策はリスクを減らすが、すべてのモデルがプロンプトインジェクションに抵抗できることを保証するものではない」「MCPクライアント側もHTMLをサニタイズし、読み取り専用以外のアクション(ファイル・シェル・ブラウザ・メール・ネットワークツールの使用)の前にはユーザー確認を必須にすべき」と注意を添えている。エンドポイントはPOST /mcpで、Streamable HTTPトランスポートを使う設計だ。

デプロイはローカル1バイナリからマルチユーザーまで

デプロイの選択肢として、設定不要のクイックスタートで動く単一バイナリ、SQLiteまたはPostgreSQLを使ったバックエンド、ユーザースコープ付きのマルチユーザー構成、Docker・Nixでの導入が挙げられている。「プライバシーの原則」としてサイトが強調しているのは、インデックス・保存されたページ内容・ルールはすべて自分で設定したHisterサーバー上に留まり、そのサーバーにはテレメトリがなくクラウドサービスも必須ではない、という点だ。オプションのセマンティック検索を有効にした場合のみ、テキストが自分で設定した埋め込みエンドポイントに送られる(ブラウザ拡張機能がファビコンを取得する場合もある)とも明記されている。

大規模なインデックスでの検索速度は確認していない

本記事はHister公式サイト(hister.org)・GitHubリポジトリ・Quickstart/Query Language Guideの各ドキュメントを2026年8月27日〜30日にcurlで取得した内容にもとづく。実際にブラウザ拡張機能とサーバーをセットアップし、自分のブラウジング履歴やファイルをインデックス化して検索を試したわけではない。Quickstartの手順によれば、./hister listenでサーバーが起動し、既定ではhttp://127.0.0.1:4433(同一マシンからのみアクセス可能)で待ち受けるとされているが、この起動コマンド自体も自分の手元では実行していない。デモに掲載されている「1,924ページ・0.04秒」という数字も、サイトが提示する1つの例であり、大規模なインデックスでの検索速度がどうなるかは確認できていない。

自己ホスト型の個人検索エンジンという事例はまだ少ない

Zenn・Qiitaともに言及はゼロだった。自己ホスト型の個人検索エンジンというテーマ自体、日本語圏ではまだ紹介例が少ない。

関連記事

シェア: ポスト はてブ

出典・参照資料

AIニュースの解説を動画でも

YouTubeでは注目ニュースの背景を解説し、Xでは新着記事をお知らせしています。

コメント

まだコメントはありません。最初のコメントを書いてみませんか?

AIについて聞きたいことはありますか?

質問箱で無料で受け付けています。回答は公開され、他の方の参考にもなります。

質問箱を見る →

新しい記事をメールで受け取る

AIの新しい発表を、出典付きで整理して届けます。

関連記事

FirefoxのAIブラウジング「Smart Window」(ベータ)がMistralのモデルで動く──フランスと北米から、英国・ドイツは年内。会話はMozillaのサーバーに既定で保存せず、Mistralはゼロデータ保持。ChatGPT Atlas・Perplexity Comet・Claude in Chromeに対する「オープンソース2社」の答えの記事画像
プロダクト09.23読了7

FirefoxのAIブラウジング「Smart Window」(ベータ)がMistralのモデルで動く──フランスと北米から、英国・ドイツは年内。会話はMozillaのサーバーに既定で保存せず、Mistralはゼロデータ保持。ChatGPT Atlas・Perplexity Comet・Claude in Chromeに対する「オープンソース2社」の答え

出典 ─ Mistral AI(2026年9月16日・9月18日取得)
メタ検索エンジンsearxの作者が、13年後に「もう他社エンジンには頼らない」検索を作った理由の記事画像
検証09.04読了12

メタ検索エンジンsearxの作者が、13年後に「もう他社エンジンには頼らない」検索を作った理由

出典 ─ GitHub: asciimoo/searx
リサーチ結果の引用が「原文に本当にあるか」を検証するターミナル発エージェント「mole」の記事画像
検証09.04読了12

リサーチ結果の引用が「原文に本当にあるか」を検証するターミナル発エージェント「mole」

出典 ─ lajosdeme/mole
バー・ランチャー・通知・壁紙を1つのシェルに統合するNoctalia──Qt/GTKに依存しないWayland環境の記事画像
検証09.01読了16

バー・ランチャー・通知・壁紙を1つのシェルに統合するNoctalia──Qt/GTKに依存しないWayland環境

出典 ─ GitHub: noctalia-dev/n
有償AIコードレビューをやめてローカル自作に切り替えた話──diffだけを見るPythonツール avouchの記事画像
検証09.05読了12

有償AIコードレビューをやめてローカル自作に切り替えた話──diffだけを見るPythonツール avouch

出典 ─ Show HN: I canceled my
Claude Codeの「毎回ゼロから調べ直す」を止める「Graft」──SWE-benchで33/50 vs 27/50まで踏み込んだ数字の記事画像
検証09.04読了12

Claude Codeの「毎回ゼロから調べ直す」を止める「Graft」──SWE-benchで33/50 vs 27/50まで踏み込んだ数字

出典 ─ trailhq/Graft
「グラフ版SQLite」LatticeDBは1ファイルでベクトル検索・全文検索・グラフ探索を同じクエリ言語で扱うの記事画像
検証09.04読了12

「グラフ版SQLite」LatticeDBは1ファイルでベクトル検索・全文検索・グラフ探索を同じクエリ言語で扱う

出典 ─ jeffhajewski/latticedb
チャットは会話を隠す、グラフは会話そのもの──ThoughtDAGが「編集できる文脈」に賭けた理由の記事画像
検証09.04読了12

チャットは会話を隠す、グラフは会話そのもの──ThoughtDAGが「編集できる文脈」に賭けた理由

出典 ─ Make LLM context visible and editable