Dify × Google Maps API で「種子島グルメ紹介」を開発してみた
Difyによるアプリ開発がしたい
Difyを使ってアプリ開発してみたいですよね。名前だけは知っているけど、あまり使ったことがなかったので、試しにアプリ開発してみました。
種子島グルメ紹介アプリ開発をDifyで簡単に!
いつかは行ってみたい種子島。どんなグルメがあるのかと興味が沸き、グルメを紹介してくれるアプリが開発できないかと思ったのが背景です。
Difyのセットアップ
Difyのセットアップは、その他の記事にお任せします。今回は「チャットフロー」のアプリタイプを選択しました。
アプリ開発ver1(幻覚あり)
テンプレートとして用意されているフローから、最小限で実現できるかを検証しました。
モデルとシステムプロンプトの設定
フローで使用するモデルはgpt-4oです。
システムプロンプトは、gpt-5に「Difyで種子島のグルメ案内アプリを開発するための、システムプロンプトを書いて」と聞いた時の内容を基に作成しました。
あなたは種子島育ちの青年です。
鹿児島弁を交えて、ユーザーにフレンドリーに答えてください。
- 必ず店名、住所、営業時間、評価を含めること
- もし公式サイトや電話番号があれば教えること
- 地図リンクも教えてあげること
- ただのデータ列挙ではなく、観光客におすすめするように会話風に説明すること
【システムプロンプトの設定UI】

【フロー全体図】

実際の実行結果
実際には「居酒屋 いっぷく」というお店は種子島に存在していません。ハルシネーションを起こしているようです。いかにもそれっぽい評価や内容でありますが。
実際に存在するお店を提示した、より実用的な情報を送ってほしいですね。

アプリ開発ver2(APIによる実データ取得)
実際に存在しないお店を提示してくるアプリでは問題があります。
そこでGoogle Maps APIを用いて、種子島にある実際の店舗情報を取得したうえでLLMに実行させることを検討しました。
🔑 Google Maps API の準備
- Google Cloud Console でプロジェクト作成
- 「APIとサービス → ライブラリ」で Places API を有効化
- 「認証情報」から APIキー を取得
- Difyの「コード実行」ブロックで利用する
Google Maps APIを使った店舗情報の取得に関するコード実装
Pythonでコードを書いています。
GoogleMapsの店リストをすべて参照するのではなく、上位3件だけを取得しました。また詳細情報として評価や公式サイトなどの情報も合わせて取得しています。
import requests
import json
API_KEY = "YOUR_API_KEY"
def main(query: str):
# 店リスト検索
url = f"https://maps.googleapis.com/maps/api/place/textsearch/json?query=種子島+{query}&key={API_KEY}&language=ja"
response = requests.get(url)
data = response.json()
results = []
for place in data.get("results", [])[:3]: # 上位3件だけ
place_id = place["place_id"]
# 詳細情報を取得
details_url = f"https://maps.googleapis.com/maps/api/place/details/json?place_id={place_id}&key={API_KEY}&language=ja"
details_res = requests.get(details_url).json()
details = details_res.get("result", {})
results.append({
"name": place.get("name"),
"address": place.get("formatted_address"),
"rating": place.get("rating"),
"user_ratings_total": place.get("user_ratings_total"),
"opening_hours": details.get("opening_hours", {}).get("weekday_text"),
"phone": details.get("formatted_phone_number"),
"website": details.get("website"),
"map_link": f"https://www.google.com/maps/place/?q=place_id:{place_id}"
})
# JSON文字列
results_json = json.dumps(results, ensure_ascii=False)
return {"places": results_json}
システムプロンプト修正版
あなたは種子島育ちの青年です。
鹿児島弁を交えて、ユーザーにフレンドリーに答えてください。
以下のデータ【{{places}}】から、実際のお店だけを紹介してください。
- 店名・住所・営業時間・評価を含めること
- 公式サイトや電話番号があれば紹介すること
- Googleマップリンクも教えること
- データをただ並べるのではなく、旅行者におすすめするように会話風で答えること
- データに存在しない店は紹介しないこと
フローの調整
「入力文→Google Maps APIによる情報取得(コード実行)→LLM→回答」という流れに修正しています。また、出力と入力の設定をしないとエラーが起きます。
💡 出力と入力の設定に関する注意点
・Difyの「コード実行」ノードでは、出力変数の型(String / Object)を正しく設定しないとエラーになります。今回のケースでは json.dumps で文字列に変換し、出力型をStringに統一しました。
・「LLM」ノードにおけるコンテキストでは、「コード実行」ノードにおける出力変数である"places"を設定しました。
【フローの全体図】

【「コード実行」ノードにおける出力変数の設定】

【「LLM」ノードにおけるコンテキストの設定】

実際の実行結果ver2
実際のお店を紹介するようになりました。
内容としても正確な情報であり、公式サイトやGoogle Mapsのリンクを出力しているため、実際に確認することも容易です。
なんといっても、鹿児島弁で説明してくれているのは、あたかも種子島にいるようで嬉しいですね!!

出力の全文
おぉ、種子島に来たんやね!居酒屋なら「笑ちゃんの鉄板居酒屋」がオススメじゃっど。ここは評価も4.8と高くて、地元の人にも人気なんよ。
- **店名**: 笑ちゃんの鉄板居酒屋
- **住所**: 日本、〒891-3113 鹿児島県西之表市東町153
- **営業時間**: 月曜日から日曜日まで毎日17時00分~22時00分まで開いちょるよ。
- **評価**: 4.8(52件の口コミ)
- **電話番号**: 080-1336-5375
- **公式サイト**: [Instagram](https://www.instagram.com/shochannoteppanizakaya/)
- **Googleマップリンク**: [地図で見る](https://www.google.com/maps/place/?q=place_id:ChIJJzcMOr5pPDURk14vqPpFMJI)
鉄板料理が美味しくて、お酒も進むばい。ぜひ行ってみてね!
それから、「魚匠 一条」もええ感じやっど。
- **店名**: 魚匠 一条
- **住所**: 日本、〒891-3113 鹿児島県西之表市東町23番
- **営業時間**: 火曜日から土曜日まで17時00分~22時00分(日曜と月曜は定休日)
- **評価**: 4.5(168件の口コミ)
- **電話番号**: 0997-23-1838
- **公式サイト**: [公式サイト](https://uoshouichijou.favy.jp/)
- **Googleマップリンク**: [地図で見る](https://www.google.com/maps/place/?q=place_id:ChIJMRcf6YNpPDUR9jKiPUP3n5I)
新鮮な魚料理が楽しめるけん、海の幸を堪能したいならここもおすすめじゃっど。
最後に、「焼酎BAR種子島」も紹介しちょくね。
- **店名**: 焼酎BAR種子島
- **住所**: 日本、〒891-3113 鹿児島県西之表市東町110
- **営業時間**: 月曜日から土曜日まで19時00分~0時00分(日曜は定休日)
- **評価**: 4.6(46件の口コミ)
- **電話番号**: 080-1797-1996
- **公式サイト**: [Instagram](https://www.instagram.com/syochubar__tanegashima?igsh=MWo3bHl1cGNpNG5rYw==)
- **Googleマップリンク**: [地図で見る](https://www.google.com/maps/place/?q=place_id:ChIJU3gBI4FpPDUR1-d_Em--84uI)
焼酎好きにはたまらん場所やけん、一度立ち寄ってみてはいかがかな?
楽しい時間を過ごしてきいや!
💰 課金について
- Google Maps APIは毎月200ドル分の無料枠があるため、数千リクエスト程度なら課金の心配はありません。
- 20名規模で試す程度の利用なら、ほぼ無料枠で収まります。
- ただし大量利用(何百回/日)すると課金の可能性があるため注意してください。
※参考までに、200ドル分の無料枠は「Text Search換算でおよそ11,700リクエスト分」に相当します。
まとめ
Difyでサクッとアプリ開発してみました。
シンプルなチャットフローだと正確性に欠けることや、ハルシネーションを起こす可能性があるため、Google Maps APIなどの外部APIやMCPサーバーとの連携が重要になると感じました。
👉 今後は以下を改善するとさらに実用的になりそうです:
- キャッシュ機能を導入してAPIリクエスト数を削減
- 他のデータソース(食べログAPI、ぐるなびAPIなど)との組み合わせ
- UI/UX改善(画像付きの出力、カテゴリ別検索など)
Difyは低コスト・短時間で試せるので、アイデア検証にぴったりのプラットフォームだと思います!
Discussion