私は自分の検索エンジンを作りました(一応)

8,222 文字

i made my own search engine (kind of)
I've been using DuckDuckGo for a long time. I love their bangs feature and it's how I would search google, youtube, and ...

私がよく受ける質問の一つに、YouTubeやGoogle画像検索、その他の検索をどうやっているのかというものがあります。というのも、私は一つの検索バーを使って様々なものを検索しているからです。その答えはいつもDuckDuckGoでした。DuckDuckGoには「bangs」と呼ばれるとても便利な機能があり、検索したいことを入力して感嘆符(!)とコマンドを付けることで、特定のサイトに直接検索をかけることができます。例えば「!gi」はGoogle画像検索です。エンターを押すと、最終的には更新されて…いいですね、Google画像検索ができました。とても便利です。
しかし、これはここで起きた問題を示しています。DuckDuckGoに対して私は複雑な思いを抱いています。この「bangs」という構文が大好きで、本当に素晴らしいものです。一つの検索バーで、最もシンプルな構文を使って簡単に何でも検索できます。「!yt」でYouTubeを検索したり、「!gh」でGitHubを検索したり、いろいろなことができて非常に便利です。これは私がずっと使ってきた検索方法ですが、残念ながらDuckDuckGoの使用感はあまり良くないんです。
私は今DuckDuckGoにとても腹を立てています。ストリームの後、まず最初にDuckDuckGoから移行します。本当に腹が立つんです。DuckDuckGoと言ったり、Duck Dugo、Duck Duck Dugoと言ったりしていますが…
冗談で「自分の検索エンジンを作る時が来た」と言いましたが、その考えが頭から離れず、実際に作ってしまいました。今日は「unduck」を紹介します。DuckDuckGoに「ducked」(だまされる)されるのにうんざりしたからです。unduckは無料でオープンソースですが、チームに給料を払う必要があるので、今日のスポンサーの紹介を少しした後、私が何を作ったのか、なぜ作ったのかについて詳しく説明します。
今日のスポンサーは、私が4年以上使って愛用している製品なので非常に興奮しています。その製品はAgoraで、アプリに音声やビデオを追加するのに最適な方法だと確信しています。特にライブコミュニケーションを行う場合はそうです。Zoomのようなアプリを構築したり、アプリに音声チャットを追加したり、あるいはOpenAIのWhisperモデルのように音声をストリーミングしたい場合など、これらすべてに最適な方法です。
これは事実として知っています。というのも、PINGで5年近くAgoraを使って開発してきたからです。他のすべてのプロバイダー、あらゆるWeb RTC解決策、さらには自分で構築したものも試しましたが、得られた品質はAgoraに比べると全く比較になりませんでした。そして遅延は何故かさらに低いんです。変なピアツーピアの問題もなく、実際に高品質で信頼性の高いビデオインフラが、これらの最新のウェブ技術で可能だとは思えないほどの低遅延と解像度で提供されています。本当に、本当に優れています。
長い間Agoraを愛用してきました。もし構築しようとしているなら、試してみてください。私のフィードバックに基づいて、彼らはReact SDKを完全に刷新したほどです。以前は自分でたくさんのことをやらなければなりませんでしたが、今ではそれが非常に良い状態になっていることを見るのは素晴らしいことです。
ちなみにAIについても少し触れておかなければなりません。彼らは最近「Conversational AI」をリリースしました。これはOpenAIのリアルタイムモデルと連携して、彼らの強力なリアルタイムネットワークとSDKが一緒に動作するような統合です。これにより、ライブ転写、ライブ音声生成などが可能になり、AIとZoomコールのようにリアルタイムで会話することができます。もしそのようなものを自分で構築しようとしているなら、Agoraほど必要な要素をすべて提供できる場所は他にないと思います。今日、sv.l/aoraでチェックしてみてください。
私が検索エンジンを作ったなんて信じられません。正確には検索エンジンではないと思いますが、カギカッコ付きの「検索エンジン」あるいは「検索エンジンではない」と呼んでいます。unduckの目的は、DuckDuckGoのDNSの問題に悩まされることなく、bangsの力を提供することです。DuckDuckGoのDNSは本当にひどいもので、半分の時間は解決に失敗します。
正直なところ、私だけがこの問題を抱えているわけではないので、彼らを実質的にいじめて修正させたいと思っています。私と同じようにDuckDuckGoを使っている人が多くいて、検索しようとすると時に20〜40秒も止まったままになることがあります。その理由は、検索が彼らのサーバーで行われるからです。直接検索をしているわけではなく、検索がサーバーに送られ、解析され、bangを使った場合は別の検索エンジンにURLが変換されます。それがサーバー上にある必要はないのです。私は検索がすぐに行われることを望んでいます。
「コーギー !gi」と入力してエンターを押すと、すぐに検索が行われます。速度アップもなく、DuckDuckGoサイトに行くよりもずっと速いです。ちなみにDNSは事前にキャッシュされています。既に検索したので今は速いですが、50%の確率で失敗します。ハイライトリールや動画の冒頭で見たように、これは演出ではなく、私のDuckDuckGoの使用体験そのものです。半分の時間がこのような状態で、私は狂いそうでした。
DuckDuckGoは約8年間、すべてのデバイスでデフォルトの検索エンジンでした。それはプライバシーの観点ではなく(プライバシーは素晴らしいですが)、単に何でも簡単に検索できる機能が気に入っていたからです。
この分野に関しては私は初心者ではありません。以前、Chrome Tanaという拡張機能を作りました。これは、Windows 10が常にBingでしか検索できないことに怒って、Bing検索を任意の検索エンジンにリダイレクトする拡張機能です。私がこれを作った主な理由は、Windowsの検索バーからbangsを使用できるようにしたかったからです。何かを入力して「!yt」とエンターを押すと、ブラウザでYouTubeが開くようにしたかったのです。
Microsoftの対応は、ChromeがWindowsの検索から開けないようにすることでした。当時、私や他の人々がBingの強制利用を回避するためのツールを作ったことへの対応として、Windowsでデフォルト設定を強制しました。
これをリリースしてから約10年経ちますが、私がやった中で最悪のことでした。Chrome Tanaによって、私のGoogleアカウントは何度もフィッシング詐欺に遭いました。今でも、Chrome Tanaを購入してスパムを送りたいという偽の購入リクエストが届きます。Microsoftは著作権侵害でこれを何度も削除しようとし、彼らを黙らせるためにロゴを3回変更しなければなりませんでした。
評価が悪くなったのは、あるフィッシング試みが失敗したにもかかわらず、2段階認証があったにもかかわらず、別の抜け穴を使って私のGoogleアカウントに侵入し、Chrome Tanaのアップデートとしてマルウェアを投稿したからです。良い時代でした…正直、これを公開しなければよかったと思います。確かに私のキャリアを少し後押ししてくれましたが、その見返りとして多くの「成功ではないもの」を得ました。unduckにはもう少しうまくいってほしいです。
これらすべては、bangsへの愛から生まれたものです。そのパターンが本当に好きで、13,500もあるうちの20ほどしか使いませんが、それだけ多くのbangsが存在することは実際にとても素晴らしいことです。さらに素晴らしいのは、このURL(bangs)を.jsに変更すると、それらがすべて表示されることです。ただし、奇妙なフォーマットのJSファイルで、JSとJSONのハイブリッドのようなもので、値が割り当てられていない配列だけが含まれています。
unduckはこれを解決するために、コピーペーストして「bangs =」を追加し、Prettierでフォーマットしてめちゃくちゃにならないようにしています。かなり大きなファイルで、12,000行以上ありますが、gzipで圧縮すると約400キロバイトのJSになります。最上部にT3という独自のbangも追加しました。それについては後で説明します。
そして世界で最も複雑なバニラJSコードがあります。ちなみにUIはこんな感じです。UIはHTMLで設定しています。検索クエリのパラメータがない場合は、noSearchDefaultPageRenderという関数を呼び出します。クエリパラメータのQを取得し、ない場合はホームページにいるということなので、ホームページをレンダリングします。パラメータがある場合は、bangを見つけようとします。見つかれば使用し、見つからなければデフォルトを使用します。デフォルトはローカルストレージから取得されるか、設定されていない場合はGoogleを使用します。私はほとんどの場合「!g」を使用し、結果的にGoogleが好きなので、デフォルトをそれにしました。ローカルストレージのdefaultBangを変更するだけで変更できます。将来的にはURLとして公開したり、UIを作ったりする予定かもしれません。
ご覧のように、UIには多くの労力を費やしました。また、依存関係グラフもかなり複雑です。多くの依存関係があります。実際の依存関係はv-pwaプラグインだけで、これが実際の依存関係である必要があるかどうかはわかりません。開発依存関係でもいいかもしれませんが、確認していません。
これを追加した理由は、ネットワークタブがより良くなるからです。ネットワークタブを見ると、これはウェブワーカーによって提供されています。PWAの意味は、インターネット接続がなくてもコンテンツを解決できるサービスワーカーがあることです。ここでは、HTMLページがサービスワーカーから取得され、これを読み込むためにネットワークから何も取得する必要がなかったことがわかります。つまり、検索を行うときも何も読み込む必要がなく、コンピューターにキャッシュされた小さなJSファイルを評価するだけです。ネットワーク呼び出しもトラッキングもありません。
Plausibleを使用した匿名トラッキングは入れていますが、必要なら簡単に無効にできます。カスタムURLも設定していません。広告ブロッカーを使っていれば恐らくデフォルトで無効になります。サイトにどのようにアクセスしているかを知りたかっただけです。
本物の検索エンジンを作りたいわけではなく、革新的な検索製品を作ろうとしているわけでもありません。ただbangsが「ducking」遅いのをやめさせたかっただけで、それを実現しました。
これは私にとって非常に楽しく有益な構築作業でした。興味深いことがいくつか分かりました。まず、問題に対する迅速な解決策を構築することがこれまで以上に簡単になりました。私たちが持つツール、ホスティングプラットフォーム、そして最も重要なのは、私たちが構築するAIツールの組み合わせにより、あるものから気に入った機能を取り出して、それを改善したものを作ることが非常に簡単になりました。
DuckDuckGoはオープンソースで寛大な会社なので、彼らのbangsはすべて公開情報でした。確かに奇妙なフォーマットでしたが、公にアクセス可能な情報だったので、彼らが提供したオープンソース情報を使用できました。Vなどのパッケージやバンドラー、ツールがあることで構築が容易になりました。AIを使用してコードを生成し、スムーズにすることもできました。正規表現を書くのが嫌いなので、AIといくつかの正規表現デバッガーを使って、これができるだけ効果的に動作するようにしました。
その結果、本当にうまく動作するコードができました。これ全体を1時間で構築しました。おそらく、動画の編集、サムネイルとタイトルの作成、ブランディング、パッケージ化、リリースの方が、これを構築した時間よりも長くかかるでしょう。これは私が天才だという自慢ではありません。確かに私はコードを書くのが得意ですが、より重要なのは、私が使用しているツールのおかげで、誰でも比較的迅速にこのようなものを構築できるようになったということです。
私はそれが大好きです。ソフトウェアに問題があるとき、もはやそれを構築した会社が修正するのを待ったり、思い通りに動作しないというフラストレーションに対処したりする必要がないという事実が好きです。今は自分でより良い代替品を構築できます。T3チャットでも同じことをしました。確かにはるかに難しい製品でしたが…
まだ私のお気に入りの機能をお見せしていませんでした。正直に言うと、これを設定したとき、これほど使うとは思っていませんでしたが、完全に間違っていました。「経験豊富なエンジニアが見るべき最高のソフトウェア開発YouTuberは誰ですか?」と「!t3」と入力すると、すぐにT3チャットでチャットが始まります。私はこれを予想以上に使っています。
残念ながら、レスポンスは仕込んでいません。ご覧のように、推薦したくない人も何人か含まれています(TechLeadやBob Martinなど)。しかし、このようにAIに直接検索できることは、実際にとても素晴らしいことでした。従来のウェブ検索ではなく、自分のAIチャットアプリで検索することが多くなりました。これにより、検索方法や、検索クエリの書き方、探したいものが変わりました。
ここで検索したものを見ると、これは「!t3」bangを使って検索したものです。Bashコマンドでshファイルを実行可能にする方法を検索しようとしていました。「chmod +x」などを覚えるのにうんざりしていたからです。Googleで検索しようとしていたところ、すぐに「!t3」とエンターを押しました。ここでワンクリックでコピーし、ターミナルに戻って貼り付けるだけで作業を続けられます。
または、「ディレクトリ内のすべてのファイルを正しくフォーマットするように更新する」というのもありました。「–write」だということは知っていましたが、その後に何が来るのか覚えていませんでした。通常はスクリプトとして持っていますが、確認したかっただけです。
このようなクイック検索ができることは本当に便利です。
チャットメッセージに何が起こったのかというのもありました。もしかしたら私のセットアップが少し壊れているのかもしれません。自分のアカウントでデバッグしているので、チャット履歴は私がやる奇妙なことでめちゃくちゃになっています。
しかし、言いたいのは、検索エンジンを使って自分のチャットアプリを検索することが予想以上に多いということで、それが脳の配線を変えました。一部はバイアスかもしれません。自分で作ったものを使っていて、作った検索エンジンで作ったチャットアプリを検索するのは結構クールですから。でも一方で、実際に役立っていて、それをデフォルトにしていることに驚いています。
これほど高速でなければ、おそらくそうではないでしょう。高速なチャットアプリを構築しただけでなく、デフォルトのGeminiが本当に高速に動作するからです。ここで言いたいのは、デフォルトの検索エンジンとしてのAIチャットを過小評価していたということです。今ではより多く使うようになり、実際にかなり楽しんでいます。
とはいえ、これを構築した目的ではありません。ただDuckDuckGoのbangsを「unduck」したかっただけで、それに成功しました。これからどうなるかはわかりません。ブラウザに追加したい場合は比較的簡単です。ほとんどのブラウザで同様に、検索設定に移動し、カスタム検索エンジンを追加して「unduck」と入力します。ここに表示されているように、クリックしてコピーペーストするだけです。これで新しい検索エンジンが追加されました。とても簡単です。
これまでの使用経験に本当に満足しています。すべてのブラウザに追加しましたが、iPhoneには追加できません。Appleは検索エンジンをハードコードしているからです。
しかし、これに関してはそれだけです。信じられないかもしれませんが、数十行のコードで検索エンジンを構築し、それが私のデフォルトになり、非常に満足しています。bangsを使いたい場合は、試してみることをお勧めします。皆さんのご意見をお聞かせください。
そして予想できたと思いますが、完全にオープンソースで、すでにプルリクエストが来始めています。この動画が公開されるとさらにカオスになることは確実です。MITライセンスなので、フォークして独自のものを構築したい場合は自由にどうぞ。
このプロジェクトに多くの作業を投入する予定はありません。一つの問題を解決したかったので、それを解決しました。他の問題を解決したいなら素晴らしいことです。実際に役立つことの一つとして、「ghr」を使うとGitHubリポジトリへのホットリンクができますが、スラッシュが正しく解析されなかったので、カスタム処理を追加しました。例えば「ping.g/upload」などと入力すると、そのリポジトリのGitHubに直接開くことができます。
ローカルストレージを通じてカスタムbangsを追加することも考えられますが、まだやっていません。実際にやりたかったのは、検索をすべてローカルのIndexDBに記録して、それらを見ることができるようにし、それらすべてを表示するページを持つことです。
このプロジェクトには多くの可能性がありますが、私はそのどれも計画していません。このような動画の傾向から予想すると、おそらく3〜4つのフォークがすぐに現れるか、類似のものが登場し、そのほとんどはおそらく私が構築したものよりもさらに進化してより良いものになるでしょう。それは素晴らしいことです。
私はDuckDuckGoのbangsの排他的なプロバイダーになりたいわけではありません。実際、私も排他的なプロバイダーではなく、DuckDuckGoから「盗んだ」だけです。単に自分の問題を解決したかっただけで、これがあなたの問題を解決するなら素晴らしいことです。もし解決しなければ、それも良いでしょう。もしこれが異なる問題を解決できることを示しているなら、ぜひ挑戦してください。それは光栄なことです。
誰かがunduckをクローンして、それでより大きくて成功したものを作るなら、それは素晴らしいことです。ただし、ローカルで解決されることを確認してください。ネットワークを介してホップする必要はなく、他のプラットフォームをGoogle検索するために誰かの悪いDNSを待つ必要もありません。それは不要です。高速に動作することを確認してください。
正直なところ、DuckDuckGoが状況を改善すれば、私はそこに戻るかもしれません。しかし今のところ、私にとって世界最高の検索エンジンを構築しました。おそらくすべての人にとって最高というわけではないでしょうが、もしあなたにとってそうなら素晴らしいことです。もしそうでなければ、あなた自身のものを作るために必要なすべてのものが今あります。
これが私のすべてです。あなたの意見を聞かせてください。私の検索エンジンはミームですか、それとも実際に役立つものですか?このような個人的なソフトウェアの未来は非常に明るいと思います。あなた自身でこのようなものを構築することをお勧めします。次回まで、T3チャットの登録を続けてください。

コメント

タイトルとURLをコピーしました