
ざわっち

こんにちは!
ノベルワークス所属のザワッチです!
先日、Google GeminiのLangGraphサンプルをXで見かけて、「これ、ドメイン調査に特化させたら面白そう」って思い立って改造したら、思いのほかおもしろいものができてしまったので共有します。
新しいWebサービスを作るとき、まず最初にやることってドメイン取得ですよね。
でも、いちいちお名前.comとかムームードメインとか開いて、ドメイン検索して、WHOIS調べて、SSL証明書の状態確認して...って、めんどくさくないですか?
そこで「全部AIでぜんぶやっちゃえばいいやん」と思いつきました。
ベースにしたレポジトリは、汎用的なDeepResearchのような動きをする調査エージェントになります。
Web検索をしてレポートに近い出力をしてくれるReactフロントエンドとLangGraphバックエンドエージェントを使ったフルスタックアプリケーションサンプルになります。
実をいうと、このレポジトリの構造がめちゃくちゃ綺麗で改造しやすいです。
以下、実装機能をまとめます。
ドメインさえ抽出できているという前提で、AIかまさずに実現している機能と、AI使って実現している機能があります。
あと、検索履歴をduckdb-wasmを使って実装しています。(触ってみたかっただけ)
ドメイン可用性チェックcheck_domain_availability() - ソケット解決でリアルタイム確認
WHOIS情報の詳細取得Google Search API経由で実際のWHOIS情報を検索登録日、有効期限、所有者履歴まで取得
SSL証明書の完全分析check_ssl_certificate() - 証明書の有効性確認SSL Labs評価結果も自動取得
セキュリティ評判調査マルウェア、フィッシング、ブラックリスト全チェック過去のインシデント履歴も調査
トラフィック・SEO分析ドメインオーソリティ、被リンク状況推定トラフィック量も取得
ローカル検索履歴(DuckDB WASM)SQLでの履歴検索ページリロードしても消えない永続化(OPFS使用)
次にとるべき行動がわかりやすいようなフォローアップ質問の生成AIの応答に基づく次のアクション提案ワンクリックでさらなる深堀り調査可能
バックエンドでは backend/src/agent/graph.py で LangGraph を使って、「検索→分析→反省→再検索→統合」という複雑なプロセスをグラフ定義で管理しています。
下が公式が出してる概要図です:
生成にはGemini モデル活用して、
・検索クエリの自動生成
・検索結果に対しての反省(知識の抜け・偏りの検出)
・最終回答文の組み立てと引用挿入
を行います。
最初の検索結果が不十分であれば、自動で「反省」「更なる検索」「再度反省」を最大ループ数まで繰り返します。
今回は、ドメイン検索に特化するということで、ドメイン分析専用のノードを追加しました:
def domain_analysis(state: OverallState, config: RunnableConfig) -> OverallState:
# 技術的チェック(DNS、SSL、HTTP)
domain_info = analyze_domain_info(domain)
# 実際のWHOIS、評判、トラフィックデータを取得
response = genai_client.models.generate_content(
model=configurable.query_generator_model,
contents=formatted_prompt,
config={"tools": [{"google_search": {}}], "temperature": 0}
)
ドメインの詳細調査をするにあたって、以下の項目をWebで検索させています。
実際のデータを取得するように指示をかなり強化していて、以下はその例です:
WHOIS情報の詳細検索:
"{domain} WHOIS" で検索し、登録者情報、登録日、有効期限を確認"{domain} domain registration date" で登録履歴を調査
セキュリティ・評判の詳細調査:
"{domain} malware check" でマルウェア検出状況を確認"{domain} blacklist status" でブラックリスト登録状況を確認
書ききれないほど、いろいろやっていますが、処理フローを図で起こしました。
duckdbを導入したのはいいものの、永続化するにはIndexedDB使わないといけないなど、あんまりスマートじゃないなと思って色々調べていると、Origin Private File System(OPFS)という存在に気づき、使用することにしました。
https://developer.mozilla.org/ja/docs/Web/API/File_System_API/Origin_private_file_system
ブラウザ内部の仮想ファイルシステム領域を各オリジンに割り当てられており、実際の OS 上のファイルツリーとは異なり、ブラウザが内部的に管理するデータベースやストレージ領域 上に保存されます。
ということで、ユーザがそのファイルを閲覧できない点がかなりセキュアであり、ほんでもって、バイナリの読み書きという低レベルアクセスがduckdb-wasmととても相性がいいとのこと。
先駆者たちが記事を残されていたので、とても参考になりました!
https://zenn.dev/akabana/articles/24ba54f63ae9b1
https://zenn.dev/voluntas/scraps/08e6065facbefd
完璧じゃないけど、動けばよし!の精神ではありますが。
ほぼほぼもとのUIと一緒です。
海外のSaaSになんかありそうな感じにチューニングしました。
動画です。
langgraphでエージェンティックな深堀り機能は作れる
ちゃんとプロンプト書けば、WHOIS情報もSSL評価も検索して取ってきてくれる
どこまで深ぼって調べるのかその線引きが難しい
エージェント特有の問題ですが、コストの兼ね合いもあり、どこまで自律的に検索させていくかをちゃんと考える必要がある。
検索エージェント系はこのご時世、もうユーザ向けじゃなくてMCPサーバとして実装するべきか?
簡単に作れちゃうというのがわかった以上、MCPサーバとしてAIによって呼び出されるのに特化してしまったほうがいい。こうなったら、フロントエンドを実装する必要がなくなってしまう。
ちょうど書いてるときにでてきたやつ↓:
Google GeminiとLangGraphを組み合わせることで、個人的には使えるドメイン調査ツールを作ることができました。
正直、最初は「ドメインが取れるかどうかわかればいいや」くらいに思ってたんですが、作り込んでいくうちにWHOIS情報からSSL評価、トラフィック推定まで取れるようになって、自分でも驚いてます。
次は、ドメインの自動取得まで実装してみたい。。
カテゴリー
最新の投稿
見えないIT負債が、会社の成長を止める
【AIで働き方が変わる?】SIerの価値は『作り手』から『伴走者』へ
たかが領収書、されど領収書 — AI 化してみたら、経理の判断は思ったより深かった
【1時間でアプリ完成】FLASH AI サービスが実現する「kintone×生成AI×プロノウハウ」の爆速開発とは?
IT人材の「採用」や「従来の高額外注」はもう不要?
【kintone×AI】毎月アプリを成長させる伴走支援「FLASH STEP」とは?
【kintone × AI】エンジニア生存戦略 ~AIに丸投げする人と、AIをパートナーとして使う人の決定的な差~
失敗しないkintone開発
脱・kintone運用の属人化!kintone×AIで実現する「誰でも扱える」運用体制の作り方
【製造・工場編】kintone × AIが変える現場の姿 生産管理・品質保証・設備保全におけるユースケース