Google Mapsの口コミを自動的に収集(スクレイピング)し、多角的な視点から分析・可視化するためのChrome拡張機能です。
技術的な構成要素と、各ファイルが担っている役割について解説します。
1. 全体アーキテクチャ
このプロジェクトは、Google Chromeの拡張機能規格である Manifest V3 に基づいて構築されています。
主に3つの層で構成されています。
- UI層 (
popup.html/js):
ユーザーが分析を開始するためのインターフェース。 - 収集層 (content.js):
Google Mapsのページに介入し、口コミデータを抽出するエンジンの役割。 - 分析・表示層 (
dashboard.html/js):
収集したデータを統計処理し、グラフやレポートとして表示するエリア。
2. 技術的ハイライト
① 動的なデータ収集ルーチン (content.js)
Google Mapsは要素が動的に読み込まれるため、以下の高度な制御を行っています。
- オートスクロール機能:
口コミコンテナのscrollHeightを監視しながら、設定された件数に達するまで自動でスクロールを繰り返します。 - 要素解析(セレクタ・エンジニアリング):
h1.DUwDvfなどの複雑なクラス名を使い、店名、評価、投稿日、本文、ローカルガイド情報、オーナーの返信などを精密に抽出します。 - 相対日付の解決 (parseRelativeDate):
「3ヶ月前」「1年前」といった相対的な表記を、実行時の日付から逆算して「YYYY-MM-DD」形式の絶対日付に変換して記録します。
② 7つの観点による多角分析ロジック (dashboard.js)
収集した生データに対し、事前に定義された辞書(KWオブジェクト)を用いて、以下の7つの分析を実行します。
- 定量的分析 (analyzeQuantitative):
平均スコアの推移(直近3ヶ月 vs 全体)や、評価の二極化(5点と1点に偏っていないか)を計算。 - 定性的分析 (analyzeQualitative):
ポジティブ・ネガティブキーワードの出現頻度を算出。 - 5領域分析 (analyzeFiveElements):
「商品・サービス」「接客」「価格」「空間」「利便性」の5つのカテゴリーごとに満足度をスコアリング。 - 時系列トレンド (analyzeTimeTrends):
月別の投稿頻度や、曜日・時間帯による評価の差異を判定。 - レビュアー属性 (analyzeReviewerAttributes):
信頼性の高い「ローカルガイド」による投稿比率や、写真付き投稿の割合を分析。 - 競合比較 (analyzeCompetitive):
「他店」「と比較して」といったキーワードを含む口コミを抽出し、独自の強みを特定。 - 返信品質分析 (analyzeOwnerResponse):
全体の返信率に加え、低評価に対する返信率や、返信内容が「定型文(テンプレート)」になっていないかを自動判定。
③ データの永続化と連携
- content.js で収集されたデータは、一度
chrome.storage.localに保存されます。 - その後、自動的に dashboard.html が開き、保存されたデータを読み込んでレンダリングします。これにより、ページを跨いだデータの受け渡しを実現しています。
④ ビジュアル・プレゼンテーション (dashboard.css)
- 外部ライブラリ(Chart.js等)に頼らず、純粋なCSSとJavaScript(Vanilla JS)でカスタムチャートを実装しています。
conic-gradientを用いたドーナツチャートや、CSS変数を用いたバーチャートなど、モダンで軽量なUIを実現しています。
3. ファイル別の役割まとめ
| ファイル名 | 役割 |
|---|---|
| manifest.json | 拡張機能の定義ファイル。権限(storage, scripting, activeTab)を設定。 |
popup.html/js | 操作パネル。Google Maps上にいるかを判定し、スクレイピングを開始させる。 |
| content.js | 収集エンジン。タブ操作、スクロール、DOMからのデータ抽出を担当。 |
| dashboard.js | 分析・統計ロジック。キーワードマッチングや満足度計算のコア。 |
dashboard.html/css | 分析レポートの構造とデザイン。ダッシュボード形式のレイアウトを提供。 |
このシステムは、単なるデータの取得に留まらず、店舗運営における「改善ポイントの自動抽出」をターゲットとした、高度なデータ分析ツールとして設計されています。