2839 文字
14 分
souten に1単語で関連クエリを一気に装填する機能を追加した
この記事について

Claude(Anthropic)との共同編集により作成されました。

要約
  • 検索窓に1単語打ったときに下にずらっと出てくるオートコンプリート、あれを全部いっぺんに開けたら面白いと前から思っていたので、思考装填アプリ souten に組み込んだ
  • 入力欄の下に「{入力} とは」「{入力} 使い方」のような候補が並び、Shift + Tab(または「一括装填」ボタン)でまとめて装填できる
  • 本物の autocomplete API は使わず、固定サフィックスのテンプレ展開で擬似的に実装している。サーバ非依存・揮発という souten の原則は崩していない
  • 一括装填のパターン(サフィックスのセットや組み方)は今後増やせる余地がある、というのも今回作って面白かったところ

検索窓に1単語打つと、下にずらっと候補が並ぶ。Google でも YouTube でも npm でも、現代の検索ボックスはたいていオートコンプリートを出してくれる。

このリストを見ているといつも思う。 「これ、全部いっぺんに開いて見比べたいんだよな」と。

実際に1つ選んで Enter を押すと、残りの候補は消える。本当は今の自分の興味がどの候補と一致するか自分でも分かっていないから、ひとつに絞らされる時点でちょっとした損失になっている。10件並んでいたものを9件捨てて、1件しか見られない。

その「いっぺんに見たい」を souten でやりたかった。 1単語を装填しようとした瞬間に関連クエリの候補がまとめて装填され、発射ボタン1つで候補ぶん全部のタブが開く。検索エンジンが見せてくれるオートコンプリートを、眺める対象ではなく装填の素材として食う側に回せたら面白いはず——というのが今回の出発点。

機能としてリリースしたものは、その思想を残しつつ少し違う形に着地した(後述)。


何が変わったか#

これまでの souten は、装填欄に書いた文字をそのまま1件のクエリとして溜める道具だった。

入力: 「猫」 → Enter → 装填済み: [「猫」]

新機能を入れた今は、入力した瞬間、欄の下に切り口つきの候補が並ぶ。

入力: 「猫」
↓ ドロップダウン
猫 とは
猫 使い方
猫 おすすめ
猫 種類
...
[ 一括装填 Shift+Tab ]

Shift+Tab を押すか、「一括装填」ボタンをクリックすると、候補が全部まとめて装填済みリストに入る。 あとは普段どおり「発射」を押せば、Google なり Perplexity なり、選んでいる発射先全部に対してクエリ × 発射先の組み合わせが新規タブで一斉展開される。

「気になるけど切り口が定まらない」状態でも、ひとまず種を打って一括装填→発射すれば、複数の切り口 × 複数の発射先ぶんのタブが一気に開く。検索窓のオートコンプリートを眺めて1件選ぶ、というルーチンが、装填して全部撃つ、に置き換わる。


使い方#

操作は3つだけ覚えてもらえれば終わる。

1. 入力欄に1単語を書く#

でも vLLM でも グラフニューラルネットワーク でも、思いついた種をそのまま打つ。入力中、欄の下にドロップダウンで候補が出る。

2. Shift + Tab で一括装填#

候補が並んでいる状態で Shift+Tab。 全候補がまとめて装填済みリストに入って、入力欄は空になる。

候補のうち1件だけ装填したいときは、その行をクリックする(ドロップダウンは閉じない)。 気が変わってドロップダウンを閉じたければ Esc。入力は残るので、書き換えれば候補も再表示される。

3. Shift + Enter で発射#

装填し終わったら、入力欄にフォーカスがあるまま Shift+Enter、または「発射」ボタンで一斉展開。 発射した瞬間にクエリも候補も全部リセットされて、また次の装填サイクルから始まる。

種を1単語打って Shift+Tab → Shift+Enter

これだけで「1単語の好奇心」が「複数の検索エンジン × 複数の切り口」に発射される。キーボードから手を離さずに完結する。


なぜ「擬似」オートコンプリートなのか#

ここからは、なぜ普通の autocomplete を使わなかったか、という話。 リリース告知としてはここで切ってもいいんだけど、結構面白い設計判断になったので少しだけ書き残しておく。

本物の autocomplete は使えるのか#

最初に考えたのは当然、Google や Bing の autocomplete API を叩く案だった。 ユーザーが「猫」と入れたら、検索エンジンが「猫カフェ」「猫の種類」「猫 アレルギー」みたいな本物のサジェスト候補を返してくれる。これがいちばん体験としては良いはずだった。

ただ、souten のコア原則と正面衝突する。

  • サーバ非依存 — souten は何処にも何も送らないことを売りにしているクライアント完結アプリ
  • プライバシー — 入力した思考の断片を外部サービスに渡したくない
  • 揮発 — そもそも検索エンジン側にログが残るのが嫌

別経路(自前のプロキシを立てる、外部 SaaS を経由する、等)も考えたが、どれも「サーバ無し」の前提を崩してしまう。 それなら最初から外部に出さない。

では client-side だけで関連クエリは生成できるのか#

外部に出せないなら、ブラウザの中だけで「猫」から「猫 種類」「猫 違い」のような関連クエリを生成したい。これが思ったよりずっと難しかった。

JavaScript 製の補完系ライブラリ(autoComplete.js、MiniSearch、FlexSearch、Algolia autocomplete、Elasticlunr など)をひと通り眺めたが、全部が「与えた配列や corpus に対するマッチング」系で、種から新しいクエリを生成するものは見つけられなかった。

ライブラリが想定しているのは、こういう状況だ。

  • 数千件の既存ノートが手元にある。ユーザーが入力した語に近いものを引きたい
  • 商品 DB がある。type-ahead で候補を絞り込みたい

つまりライブラリは「マッチング」をしてくれる。 souten が欲しいのは「生成」だった。「猫」しか手元にないところから、「猫 種類」「猫 違い」を作り出してほしかった。

書いてしまえば当たり前の区別なのだけど、調べ始めの自分は「補完ライブラリならどうにかしてくれるはず」とこの2つを曖昧に混ぜていた。client-side だけで「生成」をやろうとすると話のスケールが一気に変わる、というのは作ってみないと気づきにくいところだった。

それを本当にやろうとすると、(a) 検索エンジンの巨大な検索ログ corpus を持つか、(b) ブラウザで動く LLM を bundle するか、のどちらかになる。 どちらも、souten が大事にしている「単機能で軽い」「タブひとつで完結する」とは噛み合わない。

着地点:固定サフィックスの擬似展開#

最終的に選んだのは、「ふと検索したくなる切り口」をサフィックスとして固定で持っておくやり方だった。

とは / 使い方 / おすすめ / 種類 / 違い / 評判 / 入門 / 最新 —— このあたりを並べておいて、入力された語の後ろにくっつけるだけ。

expandCompletions("猫")
// → ["猫 とは", "猫 使い方", "猫 おすすめ", ...]

中身はびっくりするほど単純で、定数の配列に map を1回かけているだけ。 これだと「本物の autocomplete」みたいに、その語に固有の関連語(「猫 カフェ」とか「猫 アレルギー」とか)は出てこない。

ただ、souten で欲しかったのは「この語をどの切り口で検索してみたいか」をいくつか並べてくれることであって、「この語と意味的に近い別の語」を提案してほしかったわけではなかった。 そう考え直すと、サフィックスを変えながら同じ語を撃ち抜くこの形は、souten の用途にはむしろ素直にハマった。

「擬似」と呼んでいるのはそういう意味で、生成しているように見えて、実体としては足し算をしているだけ、というところ。 それでも体験としては成立する、というのが今回ちょっと面白かったところだった。


一括装填のパターンは今後増やせる#

今のサフィックス(とは / 使い方 / おすすめ / 種類 …)は、いわゆる「ふと検索したくなる切り口」の汎用セット。これはこれで悪くないけれど、テンプレを差し替えるだけで「一括装填」のキャラを変えられる、というのが今回作って気づいた拡張可能性の高いところだった。

たとえば気軽に想像できるだけでも、

  • プログラミング系: エラー / 使い方 / Python / vs / tutorial / GitHub
  • 比較レビュー系: おすすめ / 比較 / vs / デメリット / 口コミ / 2026
  • 学術系: 論文 / survey / dataset / benchmark / state of the art
  • チュートリアル系: 入門 / getting started / quickstart / 公式ドキュメント

…のような切り替えセットを足せば、同じ1単語からでも違うベクトルの探索ができる。 さらに進めば、「サフィックスを付けない接頭辞展開」や「{入力1} {入力2} を組み合わせる装填」みたいに、一括装填のロジック自体を別パターンに拡張する余地もある。

今は最低限の汎用セット1つだけで切り出した状態。ここから先は、自分が souten を使い続けながら「これ欲しい」を見つけて足していく予定。


おわりに#

検索窓のオートコンプリートを、眺める対象ではなく装填の素材にする。

souten がもともと持っていた「装填して、まとめて発射する」体験に、もう1段だけ加速がついた。 種を1個打って、Shift+Tab、Shift+Enter。これだけで気になることが一気に十数タブに膨らむ。

リアルにこれを使うと、自分の好奇心がどれくらい解像度高いか/粗いかが可視化されて、けっこう面白い。 よければ試してみてください。

souten に1単語で関連クエリを一気に装填する機能を追加した
https://yurudeep.com/posts/web/2026/20260521/
作者
ひらノルム
公開日
2026-05-21
ライセンス
CC BY-NC-SA 4.0