【Dify使い方】Google Maps APIと連携!実店舗の勝率判定&出店コンサルAIの作り方

DifyとGoogle Maps APIを連携させ、特定エリアの競合店舗データを分析して「実店舗の勝率判定」や「出店コンサル」を行うAIの作り方を解説したブログ第116話のアイキャッチ画像。横浜のみなとみらいを背景に、作業着姿の49歳男性(Yasu)がタブレットを手に、ラーメン店の分布や人気トレンド、データ分析グラフが浮かび上がる近未来的なデジタルマップを操作しているイメージ図。 Uncategorized

皆さんこんにちは、前回は

「天使と悪魔」が議論する!決算書PDFから最強の投資判断アプリ

を作りましたね。

ただAIとチャットするだけのツールから卒業し、世の中のリアルな情報を取り込んでAIに分析させる。今回は、プロのエンジニアが作るような「Googleマップのデータと連携した実店舗の勝率判定AI」をDifyのワークフローで構築しました。 IT完全未経験の49歳でも、仕組みさえ分かればここまで作れる。その全手順を包み隠さず公開します!

【結論】 今回開発したのは、出店したい「業種」と「エリア」を入力するだけで、Googleマップから実際のライバル店舗数と店名を全自動で取得し、独自の計算式で「勝率」を弾き出し、最後に凄腕AIコンサルタントが実名入りの出店戦略レポートを叩き出す【最強出店エリア判定ツール】です。 「HTTPリクエスト(API連携)」×「コード実行(自動計算)」×「LLM(AIの分析)」という3つのブロックをバケツリレーのように繋ぐことで、AIは単なる相談相手から「現場を知り尽くした本物のマーケター」へと劇的に進化します!


【手順:最強出店エリア判定ツールの作り方】

Difyの「ワークフロー」を新規作成し、以下の順番でブロックを繋いでいきます。

1. 開始ブロック(ユーザー入力)

まずは、ユーザーにリサーチしたい条件を入力させる窓口を作ります。

  • 入力変数1: shop_type (テキスト型) 例:「ラーメン屋」
  • 入力変数2: target_city (テキスト型) 例:「横浜市中区」

2. HTTPリクエストブロック(Googleマップへのデータお取り寄せ)

開始ブロックから線を繋ぎ、Google Maps API(Places API)を使ってライバル店のデータを取得します。

  • API: GET
  • URL: https://maps.googleapis.com/maps/api/place/textsearch/json
  • パラメータ:
    • query{{開始ブロックのtarget_city}} {{開始ブロックのshop_type}}
    • keyあなたのAPIキー(Google Cloud Platformで取得した長い文字列)

※ここを設定することで、指定エリアにあるお店のリストがJSON(データの塊)としてごっそり届きます。

3. コード実行ブロック(ライバル数のカウントと勝率計算)

HTTPリクエストブロックの出力(body)を受け取り、JavaScriptで「ライバル数」と「1店舗あたりの見込み客数」「勝率スコア」、そして「具体的なライバル店名」を抽出・計算します。

  • 入力変数: google_data (値はHTTPリクエストブロックのbody
  • 出力変数: rivals (Number)、customers (Number)、win_rate (Number)、rival_names (String)

JavaScript

function main({google_data}) {
  // Googleから届いた文字のデータを、プログラムが扱える形式(JSON)に変換します
  let data = JSON.parse(google_data);
  
  // ライバル店の数を数えるための箱(変数)を準備し、最初は0にしておきます
  let rival_count = 0;
  
  // ライバル店の名前を繋げて入れるための箱(変数)を準備し、最初は空っぽにしておきます
  let rival_names_list = "";
  
  // もしデータの中に「results(お店のリスト)」がちゃんと入っていたら、以下の処理をします
  if (data.results) {
    // お店のリストの長さ(件数)を調べて、ライバルの数として記録します
    rival_count = data.results.length;
    
    // お店の名前を一時的に集めるための配列(リストの箱)を作ります
    let names_array = [];
    
    // 0番目のお店から順番に、ライバルの数だけ繰り返し処理を行います
    for (let i = 0; i < rival_count; i++) {
      // リストの中からi番目のお店の「name(名前)」を取り出して、配列に追加します
      names_array.push(data.results[i].name);
      
    // 繰り返し処理の終わりです
    }
    
    // 集めたお店の名前を「、」でくっつけて、1つの長い文章にします
    rival_names_list = names_array.join("、");
    
  // もしデータがない場合の分岐の終わりです
  }
  
  // 今回はテスト用として、エリアの人口を仮で15万人に設定しておきます
  let population = 150000;
  
  // 1店舗あたり何人のお客さんを獲得できるか計算するための箱を用意します
  let customer_per_shop = 0;
  
  // ライバル店が1件以上ある場合の計算です
  if (rival_count > 0) {
    // 人口をライバル店の数で割り算して、1店舗あたりの見込み客数を計算します
    customer_per_shop = population / rival_count;
    
  // ライバル店が0件だった場合の計算です
  } else {
    // ライバルがいないので、人口全員がそのまま見込み客になります
    customer_per_shop = population;
    
  // 分岐の終わりです
  }
  
  // お店の勝率スコアを入れる箱を用意し、基本の点数を30点にしておきます
  let score = 30;
  
  // もし1店舗あたりの見込み客が5000人より多ければ
  if (customer_per_shop > 5000) {
    // とても有利なので、勝率スコアを90点にします
    score = 90;
    
  // 5000人以下でも、2000人より多ければ
  } else if (customer_per_shop > 2000) {
    // まあまあ戦えるエリアなので、勝率スコアを70点にします
    score = 70;
    
  // 分岐の終わりです
  }
  
  // 最後に、次のAIブロックに渡すために4つのデータを出力します
  return {
    // ライバル店の数を出力します
    rivals: rival_count,
    
    // 見込み客数を、小数点以下を切り捨てて綺麗な数字にして出力します
    customers: Math.round(customer_per_shop),
    
    // 計算した勝率スコアを出力します
    win_rate: score,
    
    // 繋ぎ合わせたライバル店の名前リストを出力します
    rival_names: rival_names_list
    
  // 出力処理の終わりです
  };
  
// プログラムの終わりです
}

4. LLMブロック(凄腕コンサルタントの最終レポート生成)

コード実行ブロックの右側にLLMブロックを繋ぎ、計算された数字とライバル店リストを読み込ませて、生々しい出店戦略を出力させます。

【設定するプロンプト】

Plaintext

# 役割
あなたは、これまで1000店舗以上の出店を成功に導いてきた「伝説のエリアマーケター(店舗展開のプロ)」です。
与えられたデータと、あなたの持つ「地域特性(ターゲット層、街の雰囲気など)」の知識を掛け合わせ、依頼者に最高精度の出店戦略レポートを提出してください。

# 出店希望データ
- 業態:{{①開始のshop_type}}
- 候補地:{{①開始のtarget_city}}
- 現在のライバル店舗数:{{④コード実行のrivals}} 件
- 1店舗あたりの見込み客数(商圏パイ):約 {{④コード実行のcustomers}} 人
- AI算出の勝率スコア:{{④コード実行のwin_rate}} 点 / 100点満点
- 実際のライバル店リスト:{{④コード実行のrival_names}}

# 分析・出力ルール
以下の構成で、中学生でも理解できる「熱量のある分かりやすい言葉(身近な例え話を交えて)」で出力してください。

1. 【プロの最終結論と勝率の解釈】
「この業態と、この街の相性」をプロの目線で分析し、「大賛成」「条件付きで賛成」「撤退推奨(やめておくべき)」のいずれかでズバッと判定してください。

2. 【抽出された全ライバル店リストと激戦度分析】
まずは、提供された『実際のライバル店リスト』に記載されている店舗名をすべて漏れなく列挙してください。
<ライバル店一覧>
(ここに全店舗を出力)
その顔ぶれと街の特性を踏まえ、これだけの競合がひしめく中でどう戦うべきか解説してください。

3. 【弱者の逆転戦略(エッジの効いたアイデア2つ)】
資金力のある大手や既存の有名店に勝つための、「一点突破の差別化戦略」を2つ提案してください。「笑顔で接客する」等の当たり前の提案は禁止。明日からすぐ使える超具体的なアイデアにすること。

最後に「終了」ブロックを繋げば完成です!

Difyワークフローの「出店コンサルAI」全体図とテスト実行画面。ユーザーが「業種(shop_type)」と「対象都市(target_city)」を入力すると、HTTPリクエストを通じてGoogle Maps APIから周辺の競合店情報を取得。「コード実行」ノードでデータを加工し、最終的にLLM(gpt-4o)が横浜市中区のラーメン店激戦区における「弱者の逆転戦略(観光客ターゲットや夜型営業など)」を具体的に提案している出力画面。

【まとめ】 テスト実行で「横浜市中区」の「ラーメン屋」を検索したところ、実在する地元の有名店(Taigen、ハマカゼ拉麺店、ラーメン大将など)がズラリとリストアップされ、「観光客ターゲットの海鮮塩ラーメン」や「深夜の飲んべえ特化型営業」といった泥臭くも実践的な戦略が叩き出されました。

なかなか面白いアプリだったと思います。今回はそこまでどはまり

しなかったので割と早く作れました!

「外部APIの連携」と「コードによるデータ整形」の壁は、IT未経験の49歳には高く感じるかもしれません。しかし、この壁を越えた先には、AIの可能性が100倍に広がる世界が待っています。同世代の皆さん、年齢を言い訳にせず、エラー画面と向き合って手を動かしましょう。

エックスもやっているのでよかったら見に来てください。

私のエックス

次回も是非お楽しみに!

コメント

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